打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
量化交易基础入门,量化数据分析计算利器之Numpy

前言

正如我前面所讲,量化交易背后是有着一套严谨计算的过程的。我们进行量化交易时,如果进行原始数据的分析,一般避免不了进行数据的运算。

所以,按照我跟大家讲的量化交易学习路线,我们需要先学习下numpy和pandas,这两个是python进行数据运算和处理的两个比较重要的依赖包。

我们本篇文章先来看下,量化交易计算的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安装前面已经讲过了哦。

pip install numpy

安装Numpy

数组生成及基本操作

指定数据,创建一个简单的数组

import numpy as npa = np.array([1, 2, 3], dtype=np.int32)print(a)print(a.dtype)

我们指定了一个一维数组,3个元素分别1,2,3。控制台输出:

[1 2 3]

int32

同理,我们可以构建多维数组,可以直接使用自带方法构建全1数组,全零数组等。

# 多维数组的创建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)# 创建全空数组,每个数无限接近于0a = np.empty((4, 5))print(a)

打印查看结果:

[[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行的二维数组,注意列数乘以行数要等于改数组的元素个数。

[ 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 首先,我们来看下数组的运算。构造数组,分别一个整数型数组和一个小数型数组,再分别将两个数组相加,形成新的数组。代码如下:

# 生成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_1print('合并后生成的数组:', data)

生成小数型数组: [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 调用内部函数求数组最大最小值。

# 计算最大的数max_index = np.argmax(data)print('最大值元素索引%d' % np.argmax(data))# 计算最小的数min_index = np.argmin(data)print('最小值元素索引%d' % np.argmin(data))

最大值元素索引38

最小值元素索引3

我们求最终获得数组的:

最大值索引为38,即从第38个元素(从0开始数),值为20.

最大值索引为3,即从第3个元素(从0开始数),值为15.3

3 求出5日移动平均价格数组

下面,我们求5日移动均线的数组,5日均线的计算方法,就是第5个数的时候,将其前面4个包括自身值相加除以5.

def moving_average(a, n=5): ret = np.cumsum(a, dtype=float) ret[n:] = ret[n:] - ret[:-n] return ret[n - 1:] / n# 5日平均print('5日移动均线:', moving_average(data))

控制台输出:

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直接画出图形。

# 画图整理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']=Falseplt.title('行情及五日均线模拟图')plt.savefig('./20200414.png')plt.show()

最终,画出的图形如下:

numpy计算

这里,我们画出了整段行情,并且标注除了最大最小价格,画出5日的移动均线。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
python数据分析基础——numpy和matplotlib
基础|Numpy常用知识点汇总
斯坦福CS231n深度学习课程笔记翻译(一)
程序员做的数据分析基础教程Numpy指南笔记!
「AI白身境」学AI必备的python基础
技术图文:NumPy 的简单入门教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服