时序数据研究之篇《二》中所讲述的都是理论计算,无论学什么,都得有理论基础的支撑嘛!若给出csv表格,再结合Excel表格的计算公式进行计算,不是不行,光是敲公式估计已经够繁琐了吧。现在我就用Python来实现这些参数的计算!
上代码前先给你们安利一个技术指标库TA_Lib,关于如何下载车轮和安装,参考:https://blog.youkuaiyun.com/feixuedongji/article/details/82796381;
关于TA_Lib库的文档可以去官网看,或者参考中文文档:https://blog.youkuaiyun.com/luoganttcc/article/details/84028334
对了,还有一个很重要的提醒:时序数据研究之篇《一》的hs_300.csv 文件最好放在你创建代码所在的projec下,避免不必要的error!!
废话不多说,上代码:
import pandas as pd
import numpy as np
import talib
import os
# 导入数据 - 注意:这里请填写数据文件在您电脑中的路径
df= pd.read_csv('hs_300.csv')
# 获取标签列‘close’的list(注:计算MA的值时只需要一列数据close收盘价)
close = [float(x) for x in df['close']]
# 获取最高价和最低价
high = [float(x) for x in df['high']]
low = [float(x) for x in df['low']]
# 获取开盘价和成交金额
open = [float(x) for x in df['open']]
money = [float(x) for x in df['money']]
# 调用TA_Lib库计算移动均线
df['MA5'] = talib.MA(np.array(close), timeperiod=5)
df['MA10'] = talib.MA(np.array(close), timeperiod=10)
# 调用talib计算指数移动平均线的值
df['EMA12'] = talib.EMA(np.array(close), timeperiod=6)
df['EMA20'] = talib.EMA(np.array(close), timeperiod=20)
df['EMA26'] = talib.EMA(np.array(close), timeperiod=12)
# 调用talib计算MACD指标
df['DIFF'],df['DEA'],df['MACD'] = talib.MACD(np.array(close),
fastperiod=6, slowperiod=12, signalperiod=9)
# 调用talib计算CCI指标
df['CCI'] = talib.CCI(np.array(high), np.array(low),
np.array(close), timeperiod=14)
#调用talib计算ATR指标
df['ATR'] = talib.ATR(np.array(high), np.array(low),
np.array(close), timeperiod=14)
# 定义MTM指标函数
def cal_MTM(x):
if x == 6:
MTM_6 = []
for i in range(len(close)):
if i < 5:
continue
else:
MTM = close[i]-close[i-5]
MTM_6.append(MTM)
df['MTM6'] = pd.Series(MTM_6, index=((j+5) for j in range(len(close)-5)))
elif x == 12:
MTM_12 = []
for i in range(len(close)):
if i < 11:
continue
else:
MTM_num = close[i] - close[i - 11]
MTM_12.append(MTM_num)
df['MTM12'] = pd.Series(MTM_12, index=((j + 11) for j in range(len(close) - 11)))
else:
print("目前支持求6和12的MTM指标")
# 调用MTM指标函数
cal_MTM(6)
cal_MTM(12)
# 调用talib计算BOLL指标
df['BOLL_up'], df['middle'], df['BOLL_low'] = talib.BBANDS(
np.array(close), timeperiod=20,
# number of non-biased standard deviations from the mean
nbdevup=2, nbdevdn=2,
# Moving average type: simple moving average here
matype=0)
# 调用talib计算ROC指标
df['ROC'] = talib.ROC(np.array(close), timeperiod=10)
# 定义SMI指标计算方式函数
def cul_SMI():
pass
# 定义WVAD指标计算方式函数
def cul_WVAD(x):
try:
if x !='':
wvad = 0
WVAD = []
for i in range(len(close)):
if i < x-1:
continue
else:
A = close[i-x+1] - open[i-x+1]
B = high[i-x+1] - low[i-x+1]
V = money[i-x+1]
if B != 0:
wvad = wvad+(A/B*V)
WVAD.append(wvad)
else:
wvad = 0
WVAD.append(wvad)
df['WVAD'] = pd.Series(WVAD, index=((j + x-1) for j in range(len(close) - x+1)))
except Exception as e:
raise e # 异常抛出
# 调用WVAD函数计算WVAD指标
cul_WVAD(6)
# 删除多余的列,看根据自己的需求
df.drop('EMA12', axis=1, inplace=True)
df.drop('EMA26', axis=1, inplace=True)
df.drop('DIFF', axis=1, inplace=True)
df.drop('DEA', axis=1, inplace=True)
df.drop('middle', axis=1, inplace=True)
# 若文件存在则删除
if os.path.exists('hs_300_args.csv'):
os.remove('hs_300_args.csv')
# 暂时生成csv文件,后期需要可以把DataFrame直接传到MySQL中
df.to_csv('hs_300_args.csv', index=False)
里面大部分参数指标的计算都是调用talib技术指标库,像MTM和WVAD参数指标是个人按照对应的公式自行编写函数完成的!同时MTM亦可以像WVAD那样编写类似的函数不会显得那么死板!!!
结果显示图:
各类指标可以进行往后的工作!
个人原创,如有疑问可以咨询我;若有不对的地方,欢迎指正!!