爬虫获取的可转债数据以及初步处理1 $中证转债(SH000832)$ 1.获取原始数据:代码太多了,如果有人有兴趣我可以等有时间把python代码上传到云盘... |
您所在的位置:网站首页 › 可转债一览表 › 爬虫获取的可转债数据以及初步处理1 $中证转债(SH000832)$ 1.获取原始数据:代码太多了,如果有人有兴趣我可以等有时间把python代码上传到云盘... |
来源:雪球App,作者: 城里人会玩儿,(https://xueqiu.com/1658939783/138168996) $中证转债(SH000832)$ 1.获取原始数据:代码太多了,如果有人有兴趣我可以等有时间把python代码上传到云盘中在此文底部加链接 2.初步分析:目前主要从两个角度: 2.1:已经进入转股期的可转债转股套利价值 主要思路就是判断可转债是否进入转股期间,如果是,就计算((100/转股价*目前股价)-当前可转债)/当前可转债价格判断当前可转债是否值得套利。 这里目前有待优化的点是应该对于还没进入转股期的可转债也可以分析,只要对应的股票可以做空,就可以做空正股+买入可转债的方法锁定差价,下次进一步分析数据时候可以加上。 2.2:可转债长期持有价值 目前也是简单做了个图,横坐标是债券持有的年化回报率(没考虑利息税,以当前债券价格计算,可以提前赎回的按提前赎回与到期赎回收益高者计算),越往右回报率越大,纵坐标是对当前股价的溢价率,越往下溢价率越低。这里只有已上市的数据,没上市的可转债被故意排除了。绿色标记为可转债有担保,红色没有担保。 目前如何进一步分析还没有清晰思路。 (更新中) ---------------------更新一下,抱歉之前一直在摸鱼,没注意到有人看-------------- import urllib.request import json import xlwt import xlrd import os from datetime import datetime import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt def AppPath(): return(os.path.abspath(os.path.dirname(__file__))) #-------------- class excel(): __workbook='' __worksheet='' __filename='' def __init__(self, filename='myexcel.xls'): super(excel, self).__init__() self.__filename = filename def CreatSheet(self,name='sheet',encode='utf-8'): self.__workbook = xlwt.Workbook(encode) self.__worksheet = self.__workbook.add_sheet(name) def Write(self,x,y,s): self.__worksheet.write(x,y,s) def Save(self): self.__workbook.save(self.__filename) #------------- class analysis(object): Current_datetime='' def __init__(self, arg=''): super(analysis, self).__init__() self.arg = arg self.Current_datetime=datetime.now() def Discount(self,value,years,r=0.08):#计算折现价值,默认折现率8% return(value/((1+r)^years)) def Year_Different(self,year_after,year_before='now'):#year_after,year_before are date string like "2015-05-24" y1=datetime.strptime(str(year_after),"%Y-%m-%d") if(year_before=='now'): year_before=self.Current_datetime else: year_before=datetime.strptime(str(year_before),"%Y-%m-%d") d=y1-year_before return(d.days/365) def Year_Yield(self,return_rate,days):#计算days日对应retuen_rate的年化收益率(用于判断某些套利行为对应的年化收益率) return(return_rate*(days/365)) def isConvertible(self,convert_dt,now=''):#convert_dt,now are date string like "2019-09-15",判断可转债是否已经进入转股期,输入为转股日期 y2='' if (now==''): y2=self.Current_datetime else: y2=datetime.strptime(str(now),"%Y-%m-%d") y1=datetime.strptime(str(convert_dt),"%Y-%m-%d") if((y2-y1).days>=0): return True else: return False def PercentString2Float(s): return(float(s[0:-1])/100) #------------- def get_cb_list(): req = urllib.request.Request('网页链接) response = urllib.request.urlopen(req) the_page = response.read() page=the_page.decode('utf-8') page_data= json.loads(page) return(page_data['rows']) cb_data=get_cb_list() anls=analysis()#class analysis xls=excel(AppPath()+'\\data.xls') xls.CreatSheet() temp2=0 cb_arbitrage={'nm':'','return':''} cb_arbitrage_list=[]#用于存放值得套利投资的可转债,nm为可转债名称,return为可转债的转股收益,正数代表有套利机会(股价高于转股价) cb_holding_return={'nm':'','return':'','premium':''} cb_holding_return_list=[]#nm为可转债名称,return为可转债的持有收益,premium为可转债对股价溢价率 x1=[]#图1的两个坐标和坐标标签 and points color y1=[] points1=[] points_color=[] for key in cb_data[0]['cell']: xls.Write(0,temp2,key) temp2=temp2+1 for i in range(0,(len(cb_data)-1)): temp=0 for j in cb_data[i]['cell']: xls.Write(i+1,temp,cb_data[i]['cell'][j]) temp=temp+1 #上面的部分用于存放xls文件,下面的这一段求套利价值 cb=cb_data[i]['cell'] if(anls.isConvertible(cb['convert_dt'])): stock_value=100/float(cb['convert_price'])*float(cb['sprice']) quotient=(stock_value-float(cb['price']))/float(cb['price']) cb_arbitrage_list.append({'nm':cb['bond_nm'],'return':quotient}) #下面计算持有收益(return before tax) if(cb['price_tips']!='待上市'): cb_holding_return_list.append({'nm':cb['bond_nm'],'return':PercentString2Float(cb['ytm_rt']),'premium':PercentString2Float(cb['premium_rt'])}) x1.append(PercentString2Float(cb['ytm_rt'])) y1.append(PercentString2Float(cb['premium_rt'])) points1.append(cb['bond_id']) if(cb['guarantor']!='无担保'): points_color.append('r') else: points_color.append('g') xls.Save() pic=plt.subplots(figsize=(10, 10)) plt.scatter(x1,y1, color=points_color) for i,txt in enumerate(points1):#对每个散点打上坐标 plt.annotate(txt,(x1[i],y1[i])) plt.axhline(y=0, color='b')#plot-a-horizontal-line y=0 plt.axvline(x=0,color='b') plt.xlabel('yield to maturity return') plt.ylabel('premium') plt.show() print(cb_arbitrage_list) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |