本文编写于 769 天前,最后修改于 769 天前,其中某些信息可能已经过时。
基于Tushare的打新债可视化风险分析
最近的工作内容
回归了最本质最笨的工作方法,把工作任务写到笔记本(纸)上,然后对照着客户列表一个一个发送微信。。。提示打新
想了想为什么自己要如此笨拙的工作呢?之前学的什么RPA什么Seleium什么JS可视化还有没用啊
于是就有了今天的这个项目,是我花了一下午写好的,基于Python的tushare金融数据库,可以实现一定程度的可转债风险分析
理论何在?
- 转股溢价套利理论
- 可转债下修条款
- 金融心理学
如何实现
先上图,是在jupyter里面做的,是我的在线python终端哈哈,挂在服务器上哪里都能用,图上是瞎举例

困难点
- 获取前30交易日的日期
由于股市交易日一般在周一到周五,并且节假日也不开放,要获取向下修正股价的日期,需要前30个交易日的日期,获取今天日期很简单,但是获取前30交易日的话就要倒退,用到了chinese_calendar
这个库
from chinese_calendar import is_holiday,is_workday
from datetime import datetime, date, timedelta
today = datetime.today()
yesterday = today + timedelta(days = -1)
# print(yesterday.strftime('%Y%m%d'))
# 往回倒推30日交易日
n = 0
while n <29:
if is_workday(yesterday):
n = n + 1
yesterday = yesterday + timedelta(days = -1)
last30day = yesterday.strftime('%Y%m%d')
# 前30日交易日的那一天
## print(last30day)
- 获得可转债和正股信息
因为可转债是tushare高级权限,要花钱,所以只能自己手动查询输入,毕竟每天发债都比较少,工作量还能接受
正股的信息是可以通过tushare直接获取的,得到30日收盘价,正股名称即可
- matplotlib.pyplot画图
plt不支持中文,自己google一下就能修好了
全局代码
import tushare as ts
from chinese_calendar import is_holiday,is_workday
from datetime import datetime, date, timedelta
import matplotlib.pyplot as plt
today = datetime.today()
yesterday = today + timedelta(days = -1)
# print(yesterday.strftime('%Y%m%d'))
# 往回倒推交易日
n = 0
while n <29:
if is_workday(yesterday):
n = n + 1
yesterday = yesterday + timedelta(days = -1)
last30day = yesterday.strftime('%Y%m%d')
# 前30日交易日的那一天
## print(last30day)
# tushare登陆
ts.set_token('自己填写密钥')
pro = ts.pro_api()
# 正股代码
stock_code = input('输入正股代码') # '002714.SZ'
# 转股价格
bond_exchange = float(input('输入转股价格')) #47.91
# 今日日期
today_simple = today.strftime('%Y%m%d') #210816
today = today.strftime('%Y-%m-%d') #21-08-16
# print(is_holiday(datetime.today()))
data = pro.query('stock_basic',ts_code=stock_code)
stock_name = data['name'][0]
df = pro.query('daily', ts_code=stock_code, start_date=last30day, end_date=today_simple)
# 正股当前价格
price = df['close'][0]
# 转股价值
valueOfExchange = 100 / bond_exchange * price
# 溢价率
premiumRate = (100 - valueOfExchange)/valueOfExchange
bad = 0
loss = 0
close_price_array = []
for i in range(0,29):
close_price_array.append(df['close'][i])
if df['close'][i]< bond_exchange*0.85 :
# 转股下修条款
bad = bad + 1
if df['close'][i]< bond_exchange:
#
loss = loss + 1
# 开始画图
## 输入数据
x = df['trade_date']
y = df['close']
## 标题与图例
plt.xlabel('30 days')
plt.ylabel('close price')
plt.title("30 trade days price")
## 参考线
plt.axhline(y=bond_exchange*0.85, c="r", ls="--", lw=2)
plt.axhline(y=bond_exchange, c="g", ls="--", lw=2)
plt.gca().invert_xaxis()
##
plt.plot(x,y,marker='o')
plt.xticks(rotation=90) # 横坐标每个值旋转90度
plt.show()
print('可转债分析报告:')
print(stock_name,stock_code,"转债当前溢价率",round(premiumRate*100,2),'%')
print(stock_name,stock_code,"近30个交易日低于转股价日期数:",loss)
print(stock_name,stock_code,"近30个交易日低于转股价85%日期数:",bad)
print('---------------------------------------------------------')
print("注释:绿线为债券转股价,红线为转股价85%,转股溢价率为负则存在套利机会")
print('正股蓝色点低于转股价绿线越多投资风险越高,因为一旦债券转股即会存在亏损')
print('正股蓝点低于转股价85%红线日期数越接近15,由于可下修转股价,债券价值会越高')
后期目标
web端实现本服务,并且用js来进行截图拼接操作
索罗斯如何狙击泰铢,https://money1.us/530
马内 2021-09-25 18:18
大的撒啊(╯‵□′)╯︵┴─┴
飞飞 2021-09-18 10:37