如何用12行代码获取到所有可转债的历史数据呢?
老实说,我之前为了拿到可转债的历史数据可以说是翻遍了全网,居然都没有看到一个讲具体操作的,也罢,求人不如求己,就自己来吧。
分析过程
编写代码首先要理清楚思路。获取可转债历史数据其实可以分为以下几个步骤,这里又要安利一波优矿,每个步骤都有对应的api可以直接拿来用。
1,获取历史上的每个交易日;
2,获取每个交易日的可转债指数组成,也就是每个可转债的名称;
3,根据可转债名称获得对应的信息。
然后把这三部分组合起来就好了,是不是很简单。
为了方便大家学习,还是把完整代码列出来,其实写出来一共也就12行,我已经写了注释,很简单易懂。
但是很可惜,优矿的可转债历史数据项目不如集思录的数据丰富,有些正股相关的数据需要进一步编写代码才能获得。
以下是优矿可以直接得到的数据字段:
可转债通用交易代码
可转债简称
正般通用交易代码
正股简称
交易日期
发行额(亿元)
剩余规模(亿元)
转债价格
转股价格
正股价格
赎回价格
可转债今日涨跌
可转债最近一周涨幅
转股溢价率
纯债价值
纯债溢价率
特别向下修正条款
到期赎回条款
有条件赎回条款
今年的数据2分钟就能跑完,想获取其他时间的数据只需要更改最后一行的起始日期就可以了。
拿到数据之后可以做的事情就多了,可以拿来随心所欲搭建各种策略并回测。
老实说,我之前为了拿到可转债的历史数据可以说是翻遍了全网,居然都没有看到一个讲具体操作的,也罢,求人不如求己,就自己来吧。
分析过程
编写代码首先要理清楚思路。获取可转债历史数据其实可以分为以下几个步骤,这里又要安利一波优矿,每个步骤都有对应的api可以直接拿来用。
1,获取历史上的每个交易日;
cal=DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=start_date,endDate=end_date,isOpen=u"1",field=u"calendarDate",pandas="1")['calendarDate']
2,获取每个交易日的可转债指数组成,也就是每个可转债的名称;
bond=DataAPI.IdxConsGet(ticker=u"000832",intoDate=date,field=u"",pandas="1")['consID']
3,根据可转债名称获得对应的信息。
cb=DataAPI.MktConsBondPerfGet(beginDate=date,endDate=date,secID=tmp_ID,tickerBond=u"",tickerEqu=u"",field=u"",pandas="1")
然后把这三部分组合起来就好了,是不是很简单。
为了方便大家学习,还是把完整代码列出来,其实写出来一共也就12行,我已经写了注释,很简单易懂。
import pandas as pd
def get_bond(date):# 获取某日可转债指数000832所有成分
bond=DataAPI.IdxConsGet(ticker=u"000832",intoDate=date,field=u"",pandas="1")['consID']
tmp_ID=list(bond.values)
cb=DataAPI.MktConsBondPerfGet(beginDate=date,endDate=date,secID=tmp_ID,tickerBond=u"",tickerEqu=u"",field=u"",pandas="1")
print(cb)
def get_tradeDate(start_date,end_date):# 获取开始和结束日期中的交易日
cal=DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=start_date,endDate=end_date,isOpen=u"1",field=u"calendarDate",pandas="1")['calendarDate']
for date in cal:
print(date)
get_bond(date)
cal=get_tradeDate('20220722','20220722')# 开始和结束日期
但是很可惜,优矿的可转债历史数据项目不如集思录的数据丰富,有些正股相关的数据需要进一步编写代码才能获得。
以下是优矿可以直接得到的数据字段:
可转债通用交易代码
可转债简称
正般通用交易代码
正股简称
交易日期
发行额(亿元)
剩余规模(亿元)
转债价格
转股价格
正股价格
赎回价格
可转债今日涨跌
可转债最近一周涨幅
转股溢价率
纯债价值
纯债溢价率
特别向下修正条款
到期赎回条款
有条件赎回条款
今年的数据2分钟就能跑完,想获取其他时间的数据只需要更改最后一行的起始日期就可以了。
拿到数据之后可以做的事情就多了,可以拿来随心所欲搭建各种策略并回测。
0
@dhzwcnm1000c
感谢分享,用 cal.to_csv('archive') 保存数据,会显示AttributeError: 'NoneType' object has no attribute 'to_csv' 请问要怎么解决,万分感谢cal.to_csv('archive.csv')
0
感谢分享,用 cal.to_csv('archive') 保存数据,会显示AttributeError: 'NoneType' object has no attribute 'to_csv' 请问要怎么解决,万分感谢