本章内容是我们视频教程中的代码示例,包含代码块的详细说明,完整代码附在文章最后面,大家可以用电脑版的微信打开并且复制下来。
- 引入相关的包
使用numpy之前,我们需要先将numpy的包引进来,这里我们还引入了matplotlib的包,这个是用来画图用的。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
方法名为moving_average,括号里面的为参数,a为自定义的行情数组,n为要计算的移动均线的个数,默认为5表示默认计算5日移动均线。
# 计算n日移动均线def moving_average(a, n=5):
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:] / n
我们这里直接先用python自带的随机数生成,我们生成一段模拟行情数据。后续我们学习tushare后,我们将使用实盘的行情数据。
# 生成随机小数数组np.set_printoptions(precision=1)
data_1 = np.random.rand(50)
print(data_1)
print("============")
# 生成随机的整数数组data_2 = np.random.randint(15, 20, size=50)
print(data_2)
data_3 = data_1 + data_2
print("============")
print(data_3)
# 计算最大的数的索引位置max_index = np.argmax(data_3)
print("最大值元素索引%d" % max_index)
min_index = np.argmin(data_3)
print("最小值元素索引%d" % min_index)
# 移动均线数组print("移动均线")
print(moving_average(data_3))
- 以下是画图部分,画图没什么技巧,直接copy即可,因为后续画图的步骤大体都一样的。这里,我们主要是在图上打点,画出最大与最小值,并且画出一条移动均线。
x = np.arange(0, 50, 1)
plt.plot(x, data_3, "--*r")
# 瞄最大点show_max = '[key=' + str(max_index) + ' value:' + str(round(data_3[max_index], 1)) + ']'plt.annotate(show_max, xytext=(max_index, data_3[max_index]), xy=(max_index, data_3[max_index]))
# 瞄最小点show_min = '[key=' + str(min_index) + ' value:' + str(round(data_3[min_index], 1)) + ']'plt.annotate(show_min, xytext=(min_index, data_3[min_index]), xy=(min_index, data_3[min_index]))
# 移动均线x_average = np.arange(4, 50, 1)
plt.plot(x_average, moving_average(data_3))
# 保存图mpl.rcParams['font.sans-serif'] = ["SimHei"]
plt.title("行情及五日均线")
plt.savefig("./20200423.png", dpi=300)
plt.show()
最后画出的行情效果图,如下图所示。

完整的源代码如下,使用pycharm打开,并且安装好numpy和matplotlib依赖包,直接ctrl+shift+F10即可运行,不懂得安装依赖包的,可以关注头条号【大操手量化投资】观看视频学习。
"""
@Author: dacaoshou
@微信公众号: 大操手量化投资
@Site: http://dacaoshou.com
@Software: pycharm
@File:__init__.py.py
@Time:2020/4/21 22:18
@Description:
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# 计算n日移动均线
def moving_average(a, n=5):
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:] / n
# 生成随机小数数组
np.set_printoptions(precision=1)
data_1 = np.random.rand(50)
print(data_1)
print("============")
# 生成随机的整数数组
data_2 = np.random.randint(15, 20, size=50)
print(data_2)
data_3 = data_1 + data_2
print("============")
print(data_3)
# 计算最大的数的索引位置
max_index = np.argmax(data_3)
print("最大值元素索引%d" % max_index)
min_index = np.argmin(data_3)
print("最小值元素索引%d" % min_index)
# 移动均线数组
print("移动均线")
print(moving_average(data_3))
# 画图
x = np.arange(0, 50, 1)
plt.plot(x, data_3, "--*r")
# 瞄最大点
show_max = '[key=' + str(max_index) + ' value:' + str(round(data_3[max_index], 1)) + ']'
plt.annotate(show_max, xytext=(max_index, data_3[max_index]), xy=(max_index, data_3[max_index]))
# 瞄最小点
show_min = '[key=' + str(min_index) + ' value:' + str(round(data_3[min_index], 1)) + ']'
plt.annotate(show_min, xytext=(min_index, data_3[min_index]), xy=(min_index, data_3[min_index]))
# 移动均线
x_average = np.arange(4, 50, 1)
plt.plot(x_average, moving_average(data_3))
# 保存图
mpl.rcParams['font.sans-serif'] = ["SimHei"]
plt.title("行情及五日均线")
plt.savefig("./20200423.png", dpi=300)
plt.show()
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/76857
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!