简单说下步骤吧
1. 需要收集分红送股的数据, 姑且称之为分红表,给一个例子
600617的分红表, 股数,现金,除权日
0 1 2
0 7 0 2015-04-20
0 0 0.26 2001-07-19
0 0 0.2 2000-08-24
0 0 0.4 1998-07-29
0 0 0.38 1996-06-25
0 2 1.5 1995-05-31
0 0 3 1994-06-06
2. 当然需要有日k线数据, 转换为pd.DataFrame格式, 最高价最低价等对应的col名称为ohlcv
3. 根据除权数据, 按倒序来复权, 就是先复权日期早的
def calc_fuquan_use_fenhong(df, df_fenhong):
"""获取复权后的历史数据, 用分红表来计算复权 , 前复权
df: 日k线
df_fenhong: 分红表
return: df"""
#日期早的在前面
df_fenhong = df_fenhong.sort_index(by=2)
for i in range(len(df_fenhong)):
gu, money, date = df_fenhong.irow(i)
if len(df.ix[:date]) < 2:
continue
date = agl.df_get_pre_date(df, date)
if money > 0:
money = money * 0.1
df['o'].ix[:date] -= money
df['h'].ix[:date] -= money
df['c'].ix[:date] -= money
df['l'].ix[:date] -= money
if gu > 0:
# x = cur / (1+y/10)
gu = 1+gu/10
df['o'].ix[:date] /= gu
df['h'].ix[:date] /= gu
df['c'].ix[:date] /= gu
df['l'].ix[:date] /= gu
return df
4. 结果
o h l c v
2010-06-01 6.158824 6.458824 6.158824 6.158824 1922980
2010-06-02 5.941176 6.294118 5.941176 6.235294 837740
经过测试, 前复权结果与同花顺,通达信的计算相同
posted on 2015-04-25 09:28
wangkang 阅读(2769)
评论(0) 编辑 收藏 引用