基于pandas的股票前复权计算

基于pandas的股票前复权计算
简单说下步骤吧
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
经过测试, 前复权结果与同花顺,通达信的计算相同

你可能感兴趣的:(基于pandas的股票前复权计算)