关键词
复权
最近在看自己的界面效果时,发现一些股票价格大幅下降的情况,比如下图的兆易创新。
找了找原因,原来自己在用baostock下载日K数据的时候,用的是前复权,
http://baostock.com/baostock/index.php/Python_API%E6%96%87%E6%A1%A3#.E8.8E.B7.E5.8F.96.E5.8E.86.E5.8F.B2A.E8.82.A1K.E7.BA.BF.E6.95.B0.E6.8D.AE.EF.BC.9Aquery_history_k_data_plus.28.29
adjustflag:复权类型,默认不复权:3;1:后复权;2:前复权。已支持分钟线、日线、周线、月线前后复权。* BaoStock提供的是涨跌幅复权算法复权因子,具体介绍见:复权因子简介或者BaoStock复权因子简介。
在每日更新数据时,为了节约时间,只取当天的数据,这样当天的数据前复权了,但是之前日期的数据用的是上一次复权日的价格,
比如5.6日兆易创新价格是306,5.7日前复权后价格是218,在K线图上就出现了大幅下跌的情况,这个是错的,而且计算各种数据也会出错。
解决方案:使用不复权的方式重新拿到所有的日K数据,同时拿到所有股票的复权信息。
query_adjust_factor()
之后在要进行展示或者计算指标的时候先进行除权动作,再做其他操作。
def getAdjust(adjust, date):
for i in range(adjust.shape[0]):
if date >= adjust.loc[i,'date']:
return adjust.loc[i,'foreadjustfactor']
return 1
def calculateDayKWithAdjustFactor(daily, factor):
for i in range(daily.shape[0]):
forefactor = getAdjust(factor, daily.loc[i,'date'])
daily.loc[i,'open'] = forefactor * daily.loc[i,'open']
daily.loc[i,'high'] = forefactor * daily.loc[i,'high']
daily.loc[i,'low'] = forefactor * daily.loc[i,'low']
daily.loc[i,'close'] = forefactor * daily.loc[i,'close']
daily.loc[i,'preclose'] = forefactor * daily.loc[i,'preclose']