Python --相似K线匹配–实现股票走势预测 Tushare
前言
同花顺和东方财富都提供了一个免费的功能可以查找相似走势的K线,提供参考。差不多,东方财富可以选择分析的周期,同花顺是固定120日的分析周期。我们可以通过tushare的数据源获取历史交易数据自己实现一个类似功能。
得到的K线匹配效果如下:
一、获取历史交易数据
1.引入库,读取历史交易数据
Tushare是一个免费、开源的python财经数据接口包。注册用户后到个人中心改一下名字获取积分,基本的功能都可以用了。大家可以用我的邀请码注册
①首先要安装tushare库
pip install tushare --upgrade
②注册Tushare大数据社区的账号,在个人中心获取你的token
③Tushare官网接口使用手册,可以查看如何调用各个接口。
import tushare as ts
# 个人账号tushareToken
ts.set_token('dce74e113985d5da2a8dffe05cccdba7c72aa1e0c34601dbb8d2cbc0')
pro = ts.pro_api()
#调用000001.sz的的历史日线数据
df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20180718')
print(df)
至此我们实现了某只股票的交易数据获取。
接下来,我们需要获取当前所有正常上市交易的股票列表,然后获取他们的的历史走势与我们选取的对象做比较。
import tushare as ts
# 个人账号tushareToken
ts.set_token('dce74e113985d5da2a8dffe05cccdba7c72aa1e0c34601dbb8d2cbc0')
pro = ts.pro_api()
# 获取当前所有正常上市交易的股票列表
stock_all = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
for eachCode in stock_all.iterrows():
# 获取历史交易数据
stock_history=ts.get_hist_data(eachCode[1]['symbol'])
# 打印调试
print(eachCode[1]['symbol'],eachCode[1]['name'])
print(stock_history)
2.认识K线,如何分析走势
当我们描述股票的一根K线组成,会用开盘价open、收盘价close、最高价high、最低价low,因为周期不同,会使得K线表现形式产生差异,因此我们往往在讲K线时,在K线前指明周期,比如:日级K线、60分钟K线、15分钟K线等等。
均线指标是反映价格运行趋势的重要指标,其运行趋势一旦形成,将在一段时间内继续保持。五日均线指的是近5天内收盘价的加权平均价,是均线系统中的短期均线,反映股价或指数的短期运行趋势。如图所示,黑色的是5日均线,黄色为10日均线,粉色为20日均线。
那么我们如何定义一根K线相似,对于单根K线其开盘价、收盘价、最高价、最低价越相似那么它就越相似。同理我们如何定义短期趋势的相似,计算Ma5的相关系数。
在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数,是用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。我们可以利用numpy.corrcoef()函数,来计算两个矩阵之间的相关性。那么我们定义两段K线的相似度K=(开盘价相关系数+收盘价相关系数+最低价相关系数+最高价相关系数+5日均线的相似度)/5。
stock_compare=ts.get_hist_data(code)[0:day_range] #获取选取范围的分析对象的交易数据
compare_open=stock_compare['open']
compare_close=stock_compare['close']
compare_high=stock_compare['high']
compare_low=stock_compare['low']
compare_ma5=stock_compare['ma5']
stock_all = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
stock_all = stock_all[0:100]
# 逐一获取A股上市股票的历史走势做比较
for eachCode in stock_all.iterrows():
stock_history=ts.get_hist_data(eachCode[1]['symbol']) # 旧接口获取历史数据,因为就接口直接提供ma5数据
trade_days = len(stock_history) #获取的历史交易数据长度
k_list=[]
x_list=[]
# /**截取30_days的长度,滑动窗口为5*/
for i in range(5,trade_days, 5):
# 截取判空,滑动数据不满足range后跳出
if(i+day_range>=trade_days):
break
stock_offer=stock_history[i:i+day_range] #截取后的数据
open_o =stock_offer['open']
close_o =stock_offer['close']
high_o =stock_offer['high']
low_o =stock_offer['low']
ma5_o =stock_offer['ma5']
open_k =np.corrcoef(compare_open,open_o)[0][1]
#/**-------------计算相关系数-------------------*/
close_k=np.corrcoef(compare_close,close_o)[0][1]
high_k =np.corrcoef(compare_high,high_o)[0][1]
low_k =np.corrcoef(compare_low,low_o)[0][1]
ma5_k =np.corrcoef(compare_ma5,ma5_o)[0][1]
ave_k = (open_k+close_k+high_k+low_k+ma5_k)/5
总结
例如:
本文仅仅简单介绍了如何通过tushare数据源获取A股的历史交易数据,通过皮尔逊相关系数实现一种查找相似K线的算法。
资本市场没有新鲜事,历史总是重演但不是简单重复,该方法提供一种实现方法,并不构成投资建议。
enjoy🥰!
本文参考了以下博主的文章
如何用Python量化“相似K线”实现形态选股?