posts - 20,comments - 15,trackbacks - 0
简单说下步骤吧
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 阅读(2771) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理