量化交易基礎入門,量化數據分析計算利器之Numpy

前言

正如我前面所講,量化交易背後是有著一套嚴謹計算的過程的。我們進行量化交易時,如果進行原始數據的分析,一般避免不了進行數據的運算。

所以,按照我跟大家講的量化交易學習路線,我們需要先學習下numpy和pandas,這兩個是python進行數據運算和處理的兩個比較重要的依賴包。

我們本篇文章先來看下,量化交易計算的Numpy。

這裡,我必須先友情提示下,接下去兩章的內容會比較枯燥,因為涉及到一些數據計算和統計的東西,而且後續不一定直接使用這兩個包,因為大部分量化工具都已封裝好數據處理。但是學好這兩個知識,對於我們後續對行情數據的分析,瞭解量化工具包如何處理數據流的處理方法有比較重要的意義。


量化交易基礎入門,量化數據分析計算利器之Numpy

numpy & pandas

Numpy是什麼?

首先,我們來了解下啥是Numpy。

先看下概念:

NumPy是使用Python進行科學計算的基本包。其中包括:

  1. 一個強大的N維數組對象
  2. 複雜(廣播)功能
  3. C/C++與FORTRAN代碼集成工具
  4. 有用的線性代數、傅立葉變換和隨機數能力

除了明顯的科學用途外,NumPy還可以作為通用數據的高效多維容器。可以定義任意數據類型。這使得NumPy能夠無縫、快速地與各種數據庫集成。

稍等。。是不是看的有點頭暈,分分鐘想放棄學習,有沒有?特別是第4點,感覺又要回到高中大學時學習數學,高數的痛苦感覺啦?

別急!!!

深奧的理論概念一般都是用來嚇唬學生的,其實我們在實際應用Numpy的時候,沒有涉及到這麼深奧的東西。我們只需要掌握以下內容:

  • 數據類型
  • 數組類型
  • 類型轉換
  • 創建數組
  • 數組索引
  • 數組切片
  • 改變維度

這些都是跟數組有關的,是不是就比較清晰了?雖然裡面有些概念還不懂,比如啥切片啊,索引啊~沒事,不急,後續介紹。

Numpy包在量化交易中,起到的作用是數據的計算。使用這個包,我們可以很輕鬆的處理量化數據,比如股票行情數據,期貨行情數據等等。

下面我們開始numpy的學習。

Numpy安裝

首先,我們來看下如何安裝numpy。
win+R,輸出cmd打開,確認,命令窗口。

直接命令行安裝Numpy,記得需要先安裝python。python安裝前面已經講過了哦。

<code>

pip

install numpy/<code>
量化交易基礎入門,量化數據分析計算利器之Numpy

安裝Numpy

數組生成及基本操作

指定數據,創建一個簡單的數組

<code>

import

numpy

as

np a = np.array([

1

,

2

,

3

], dtype=np.int32)

print

(a)

print

(a.dtype)/<code>

我們指定了一個一維數組,3個元素分別1,2,3。控制檯輸出:

[1 2 3]

int32

同理,我們可以構建多維數組,可以直接使用自帶方法構建全1數組,全零數組等。

<code> 

a

=

np.array([[1,

2

,

3

],

[2,

3

,

4

]])

print(a)

a

=

np.ones((4,

4

),

dtype=np.int)

print(a)

a

=

np.zeros((3,

4

))

print(a)

a

=

np.empty((4,

5

))

print(a)

/<code>

打印查看結果:

[[1 2 3]

[2 3 4]]


[[1 1 1 1]

[1 1 1 1]

[1 1 1 1]

[1 1 1 1]]


[[0. 0. 0. 0.]

[0. 0. 0. 0.]

[0. 0. 0. 0.]]


[[6.23042070e-307 4.67296746e-307 1.69121096e-306 1.37962524e-306

1.89146896e-307]

[7.56571288e-307 3.11525958e-307 1.24610723e-306 1.37962320e-306

1.29060871e-306]

[2.22518251e-306 1.33511969e-306 1.78022342e-306 1.05700345e-307

1.11261027e-306]

[1.11261502e-306 1.42410839e-306 7.56597770e-307 6.23059726e-307

1.78016909e-306]]

連續數組及變換

下面我們重點看下連續數組和變換。我們之所以獨立開來講,是因為這個跟我們的行情數據關係密切。我們的行情數據,不管股票還是期貨,外匯等的所有數據,都是連續不斷的數據構成的一個段完整的行情。

連續數組創建,創建一個數組,從1到50,步長為1.注意,arrange產生數組是左閉右開的,所以下標要到51,才是創建50個數據。生成數組之後,我們將其變換為2行的二維數組,注意列數乘以行數要等於改數組的元素個數。

<code>傳/<code>

[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

49 50]


[[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]

[26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50]]

數組基本運算

數組的基本運算,我們需要掌握一些基本的運算即可,我們下面結合行情數據來講解相關運算內容。

假設有一段行情,我們需要知道這段的最高價,最低價,以及行情的五日均線。我們可以用numpy的素組一些內置函數的運算來實現,很簡單。

下面我們通過示例來演示。


1 首先,我們來看下數組的運算。構造數組,分別一個整數型數組和一個小數型數組,再分別將兩個數組相加,形成新的數組。代碼如下:

<code># 生成

10

20

的隨機數組 np.set_printoptions(precision=

1

) data_1 = np.

random

.rand(

50

)

print

(

"生成小數型數組:"

, data_1) data_2 = np.

random

.randint(

15

,

20

, size=

50

)

print

(

"生成整數型數組:"

, data_2) data = data_2 + data_1

print

(

"合併後生成的數組:"

, data)/<code>

生成小數型數組: [0.8 0.2 0. 0.3 1. 0.4 1. 0.4 1. 0.8 0.1 0.7 0.6 1. 0.7 0.9 0.6 1.

0.8 0.6 0.1 0.9 0.3 0.5 0.7 0.8 0.6 0.5 0.7 0.6 1. 0.1 0.3 0.4 0.8 0.8

1. 0.5 1. 0.9 0.9 0.9 0.9 0.6 0.1 0.2 0.9 0.3 0.8 0.9]

生成整數型數組: [15 17 18 15 16 15 18 16 18 18 16 19 18 15 18 16 16 17 19 17 19 16 15 17

15 17 15 15 18 15 18 16 17 15 18 15 19 18 19 18 16 19 19 17 18 19 19 19

19 19]

合併後生成的數組: [15.8 17.2 18. 15.3 17. 15.4 19. 16.4 19. 18.8 16.1 19.7 18.6 16.

18.7 16.9 16.6 18. 19.8 17.6 19.1 16.9 15.3 17.5 15.7 17.8 15.6 15.5

18.7 15.6 19. 16.1 17.3 15.4 18.8 15.8 20. 18.5 20. 18.9 16.9 19.9

19.9 17.6 18.1 19.2 19.9 19.3 19.8 19.9]

以上,我們構造了一段行情數據,設置行情價格為15~20元範圍波動。下面,我們求出行情最大價格,

2 調用內部函數求數組最大最小值。

<code> 
max_index = np.argmax(data)

print

(

'最大值元素索引%d'

% np.argmax(data)) min_index = np.argmin(data)

print

(

'最小值元素索引%d'

% np.argmin(data))/<code>

最大值元素索引38

最小值元素索引3

我們求最終獲得數組的:

最大值索引為38,即從第38個元素(從0開始數),值為20.

最大值索引為3,即從第3個元素(從0開始數),值為15.3

3 求出5日移動平均價格數組

下面,我們求5日移動均線的數組,5日均線的計算方法,就是第5個數的時候,將其前面4個包括自身值相加除以5.

<code>

def

moving_average

(a, n=

5

)

: ret = np.cumsum(a, dtype=float) ret[

n:

] = ret[

n:

] - ret[

:-n

]

return

ret[n -

1

:

] / n print(

'5日移動均線:'

, moving_average(data))/<code>

控制檯輸出:

5日移動均線: [16.7 16.6 16.9 16.6 17.3 17.7 17.8 18. 18.4 17.8 17.8 18. 17.4 17.2 18. 17.8 18.2 18.3 17.7 17.3 16.9 16.6 16.4 16.4 16.7 16.6 16.9 17. 17.3 16.7 17.3 16.7 17.4 17.7 18.6 18.6 18.8 18.8 19.1 18.6 18.5 18.9 18.9 18.8 19.2 19.6]

以上三個步驟就是我們求利用numpy數組求得行情最大最小值,並且求出5日移動均線數據。

這樣的數據,看的是不是很累?下面我們利用plot將其畫出來。

利用matplotlib畫圖,我們之前的文章已經稍微講過了,下面我們利用plot直接畫出圖形。

<code># 畫圖整理
x = np.arange(

1

,

51

,

1

) plt.plot(x,

data

,

'--*y'

) # 最大值 plt.plot(max_index,

data

[max_index],

'rs'

) show_max=

'[key:'

+str(max_index)+

' value:'

+str(round(

data

[max_index],

1

))+

']'

plt.annotate(show_max, xytext=(max_index,

data

[max_index]), xy=(max_index,

data

[max_index])) # 最小值 plt.plot(min_index,

data

[min_index],

'gs'

) show_max=

'[key:'

+str(min_index)+

' value:'

+str(round(

data

[min_index],

1

))+

']'

plt.annotate(show_max, xytext=(min_index+

1

,

data

[min_index]), xy=(min_index,

data

[min_index])) # 均線 x_2 = np.arange(

5

,

51

,

1

) plt.plot(x_2, moving_average(

data

)) mpl.rcParams[

'font.sans-serif'

]=[

'SimHei'

] #用來指定默認字體 SimHei為黑體 mpl.rcParams[

'axes.unicode_minus'

]=False plt.title(

'行情及五日均線模擬圖'

) plt.savefig(

'./20200414.png'

) plt.show()/<code>

最終,畫出的圖形如下:


量化交易基礎入門,量化數據分析計算利器之Numpy

numpy計算

這裡,我們畫出了整段行情,並且標註除了最大最小价格,畫出5日的移動均線。

以上完整代碼均已傳到VX公號:大操手量化投資,歡迎關注並獲取相關代碼。後續最新文章會陸續在上面更新。

以上是我們本章的內容,關於numpy,進行數組運行,結合我們量化交易的行情數據進行的講解。希望大家能學有所得!

好啦,本章內容就到這裡。歡迎關注【大操手量化投資】,一起學習量化交易相關知識,量化交易從小白到高手的路程!


分享到:


相關文章: