量化交易基础入门,量化数据分析计算利器之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,进行数组运行,结合我们量化交易的行情数据进行的讲解。希望大家能学有所得!

好啦,本章内容就到这里。欢迎关注【大操手量化投资】,一起学习量化交易相关知识,量化交易从小白到高手的路程!


分享到:


相關文章: