A股复权计算_权息数据整理代码

目录

前置:

获取数据代码 

数据整理代码

视频


前置:

1 本系列将以 “A股复权计算_” 开头放置在“随想”专栏
2 权息数据结合 “PostgreSQL_” 系列博文中的股票未复权数据,可以自行计算复权日数据

获取数据代码 

配股数据

df = DataAPI.EquAllotGet(secID=u"",ticker=u"",isAllotment=u"1",beginDate=u"19900101",endDate=u"20250331",field=u"",pandas="1")
df.to_csv('peigu600.csv')

分红数据

 df = DataAPI.EquDivGet(secID=u"",ticker=u"",eventProcessCD=u"6",exDivDate="",beginDate=u"19900101",endDate=u"20250331",beginPublishDate=u"",endPublishDate=u"",beginRecordDate=u"",endRecordDate=u"",field=u"",pandas="1")
df.to_csv('fenhong600.csv')

拆股数据

 df = DataAPI.EquSplitsGet(secID=u"",ticker=u"",beginDate=u"19900101",endDate=u"20250331",field=u"",pandas="1")
df.to_csv('chaigu600.csv')

数据整理代码

import pandas as pd

def temp_000():
    pre_dir = r'E:/temp003/'
    df_splits = pd.read_csv(pre_dir + 'chaigu600.csv',encoding='utf-8')
    df_allotment = pd.read_csv(pre_dir + 'peigu600.csv',encoding='utf-8')
    df_equdiv = pd.read_csv(pre_dir + 'fenhong600.csv',encoding='utf-8')

    col_splits = ['ticker','reTradeDate','splitsRatio']
    col_allotment = ['ticker','exRightsDate','allotmentRatio','allotmentPrice']
    col_equdiv = ['ticker','exDivDate','bonusShareListDate','perShareDivRatio','perShareTransRatio','perCashDiv']
    target_col = ['ticker','exDate','perShareTransRadio','perCashDiv','allotmentRatio','allotmentPrice']

    df_equdiv['perShareDivRatio'] = df_equdiv['perShareDivRatio'].fillna(0)
    df_equdiv['perShareTransRatio'] = df_equdiv['perShareTransRatio'].fillna(0)

    df_equdiv.dropna(how='all',subset=['exDivDate','bonusShareListDate'],inplace=True)
    df_splits = df_splits.loc[df_splits['splitsRatio']>=1].copy()

    df_splits['ticker'] = df_splits['secID'].str.slice(0,6)
    df_allotment['ticker'] = df_allotment['secID'].str.slice(0,6)
    df_equdiv['ticker'] = df_equdiv['secID'].str.slice(0,6)

    df_splits = df_splits.loc[:,col_splits].copy()
    df_allotment = df_allotment.loc[:,col_allotment].copy()
    df_equdiv = df_equdiv.loc[:,col_equdiv].copy()

    df_equdiv['exDivDate'] = df_equdiv['exDivDate'].fillna(df_equdiv['bonusShareListDate'])
    df_equdiv['perShareTransRadio'] = df_equdiv['perShareDivRatio'] + df_equdiv['perShareTransRatio']

    # merge
    df = pd.DataFrame(columns=['ticker','exDate','perShareTransRadio','perCashDiv'])
    df['ticker'] = df_equdiv['ticker'].to_list()
    df['exDate'] = df_equdiv['exDivDate'].to_list()
    df['perShareTransRadio'] = df_equdiv['perShareTransRadio'].to_list()
    df['perCashDiv'] = df_equdiv['perCashDiv'].to_list()

    df_allotment.rename(columns={'exRightsDate':'exDate'},inplace=True)
    df_splits.rename(columns={'reTradeDate':'exDate'},inplace=True)

    df = pd.merge(df,df_allotment,on=['ticker','exDate'],how='outer')
    df = pd.merge(df,df_splits,on=['ticker','exDate'],how='outer')

    # 拆股 eg:1股拆成10股,=》1股送9股
    df['perShareTransRadio'] = df['perShareTransRadio'].fillna(0)
    df.loc[df['splitsRatio'].notnull(),'perShareTransRadio'] = df['perShareTransRadio'] + df['splitsRatio'] -1

    df['perCashDiv'] = df['perCashDiv'].fillna(0)
    df['allotmentRatio'] = df['allotmentRatio'].fillna(0)
    df['allotmentPrice'] = df['allotmentPrice'].fillna(0)
    df['date_o'] = pd.to_datetime(df['exDate'])
    df.sort_values(by='date_o',inplace=True)
    df = df.loc[:,target_col]
    df.to_excel(pre_dir + '000.xlsx',engine='openpyxl')
    pass

if __name__ == '__main__':
    temp_000()
    pass

视频

https://www.bilibili.com/video/BV1jeZhYPEGA/
https://www.bilibili.com/video/BV1LoZ8Y8EN8/
https://www.bilibili.com/video/BV1acZhYdEdU/
https://www.bilibili.com/video/BV1xLZhYjEMx/
https://www.bilibili.com/video/BV1xLZhYjEMP/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值