废话不多说,直接上代码,主要是用于验证我看过的一本关于可转债的书《攻守》里面的策略,用回测去验证一下。 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")
可转债回测抓去数据工具
最新推荐文章于 2023-07-30 18:25:43 发布