可转债回测抓去数据工具

废话不多说,直接上代码,主要是用于验证我看过的一本关于可转债的书《攻守》里面的策略,用回测去验证一下。


import time
import akshare as ak
import pandas as pd
import datetime
#根据开始时间,结束时间,间隔天数,获取轮动的日期清单;
def get_date_lists():
    #获取所有的历史交易日,格式为np多维数组吧
    trade_date_df = ak.tool_trade_date_hist_sina()
    #转变历史交易日格式为list格式
    trade_date_list = trade_date_df["trade_date"].astype(str).tolist()
    #设定开始时间,结束时间
    begin_date = datetime.date(2020,3,6)
    end_date = datetime.date(2023, 3, 6)
    #查找开始时间、结束时间在历史交易日上的位置
    start_date_index = trade_date_list.index(str(begin_date))
    end_date_index = trade_date_list.index(str(end_date))
    #根据查到找的位置进行切片
    a = trade_date_list[start_date_index:end_date_index:5]
    return a
#根集思录上可转债的所有代码,包括在市交易的,以及退市两部分。获得可转债代码清单;
def get_bon_lists():
    df = pd.read_excel('可转债清单.xlsx')        #集思录上找到所有可转债的代码,并且复制到EXCEL中
    bond_list = df["可转债代码"].astype(str).tolist()        #只取可转债代码列,并转换为list
    return bond_list

get_date_list = get_date_lists()
bond_list = get_bon_lists()

def combine_bond_history():
    Blank = {'日期': ['', ], '收盘价': ['', ], '纯债价值': ['', ],'转股价值': ['', ], '纯债溢价率': ['', ], '转股溢价率': ['', ],'symbol': ['', ],}
    dfx = pd.DataFrame(Blank)

    for i in bond_list:
        bond_zh_cov_value_analysis_df = ak.bond_zh_cov_value_analysis(symbol=i)     #导入这个接口的数据
        bond_zh_cov_value_analysis_df['symbol'] = i     #添加一列可转债代码名称
        dfx = pd.concat([dfx,bond_zh_cov_value_analysis_df], axis=0, join='inner')      #每遍历一个可转债代码历史数据,就合并在一起
    dfx['shuangdi'] = dfx.apply(lambda x: x["收盘价"] + x["转股溢价率"],axis=1)         #最后对于遍历出来的数据进行计算,得出双低值
    dfx["日期"] = pd.to_datetime(dfx["日期"])       #日期格式的转换
    dfj = dfx[dfx["日期"].isin(get_date_list)]     #目的是在所有交易日中筛选出列表里的几个日期
    dfj.to_excel("total_test.xlsx")      #导出为EXCEL格式
    return dfj

df_total = combine_bond_history()
df_date_index = df_total.set_index('日期', drop=True)

Blank = { '日期': ['1874-01-01', ],'收盘价': [9999, ],'纯债价值': ['0', ],'转股价值': [0, ],'纯债溢价率': [0, ],'转股溢价率': [0, ], 'symbol': [0, ],'shuangdi': [0, ],}
df_int64 = pd.DataFrame(Blank)
    #建一个for循环的起始的空白data.frame,用来合并下面遍历的每一个日期的data.frame

for everyday in get_date_list:
    df_filter = df_total.loc[df_total['日期'] == everyday]       #遍历每个日期
    sort_df = df_filter.sort_values(by='shuangdi')  # 对每个日期里面 shuangdi 数值进行升序排序
    df_qiepian = sort_df[0:10]  # 选取shuangdi排名前4的可转债
    df_int64 = pd.concat([df_int64, df_qiepian], axis=0, join='inner')

df_int64.to_excel("cov_final_test.xlsx")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值