可转债
Ptrade/QMT 可转债转股操作 python代码
量化交易 • 李魔佛 发表了文章 • 0 个评论 • 2061 次浏览 • 2023-06-19 18:14
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def before_trading_start(context, data):
g.count = 0
def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
主要是上面的函数,
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return
if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False
passorder 里面的 80是 普通账户可转债转股
更多Ptrade,qmt知识,可以关注公众号
查看全部
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def before_trading_start(context, data):
g.count = 0
def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
主要是上面的函数,
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return
if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False
passorder 里面的 80是 普通账户可转债转股
更多Ptrade,qmt知识,可以关注公众号
宁稳可转债全表数据 - 历史数据更新至2023年06-18日
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1532 次浏览 • 2023-06-19 11:16
转债代码 转债名称 满足 发行日期 股票代码 股票名称 行业 子行业 转债价格 本息 涨跌 日内套利 股价 正股涨跌 剩余本息 转股价格 转股溢价率 转股价值 距离转股日 剩余年限 回售年限 剩余余额 成交额(百万) 转债换手率 余额/市值 余额/股本 股票市值(亿) P/B 税前收益率 税后收益率 税前回售收益 税后回售收益 回售价值 纯债价值 弹性 信用 折现率 老式双低 老式排名 新式双低 新式排名 热门度
点击查看大图
点击查看大图
数据会定期更新,目前更新到本文发文日期,2023-06-18
查看全部
qmt 可转债 双低(阈值)轮动 实盘代码
QMT • 李魔佛 发表了文章 • 0 个评论 • 2397 次浏览 • 2023-02-26 15:18
用已有的ptrade的代码,然后部分获取行情和交易接口按照qmt的接口文档(http://qmt.ptradeapi.com )重写,就给了一版。(对,很早以前就有一版ptrade的转债双低的了)
无论是qmt还是ptrade,都只是一个工具,用熟悉了,都无所哪个好哪个不好。
完整代码在个人星球。
觉得之前星球太便宜了,不仅给了代码,还部署了接口免费使用,通过接口获取可转债的实时数据,强赎天数,规模,溢价率,评级等等一系列数据。 而且随着时间的推移,里面积累的数据,代码也越来越多,感觉这样对前面进去并不断续费的星友有点公平,尽管以后他们续费都直接打折扣。所以还是按照一些大v运营的意见,逐年涨价策略。
越往后的朋友,因为前面积累的内容越多,因此价格也随之增长。
当然有能力可以自己写接口,部署,实盘,获取三方数据的大v,就没必要加了。
查看全部
用已有的ptrade的代码,然后部分获取行情和交易接口按照qmt的接口文档(http://qmt.ptradeapi.com )重写,就给了一版。(对,很早以前就有一版ptrade的转债双低的了)
无论是qmt还是ptrade,都只是一个工具,用熟悉了,都无所哪个好哪个不好。
完整代码在个人星球。
觉得之前星球太便宜了,不仅给了代码,还部署了接口免费使用,通过接口获取可转债的实时数据,强赎天数,规模,溢价率,评级等等一系列数据。 而且随着时间的推移,里面积累的数据,代码也越来越多,感觉这样对前面进去并不断续费的星友有点公平,尽管以后他们续费都直接打折扣。所以还是按照一些大v运营的意见,逐年涨价策略。
越往后的朋友,因为前面积累的内容越多,因此价格也随之增长。
当然有能力可以自己写接口,部署,实盘,获取三方数据的大v,就没必要加了。
宁稳网可转债弹性因子 python回测
可转债 • 李魔佛 发表了文章 • 0 个评论 • 2355 次浏览 • 2022-12-04 18:43
https://t.zsxq.com/08779XPlk
的数据和代码,修改原来的代码
df=df.sort_values('税前收益率',ascending=False)
改为
df=df.sort_values('弹性',ascending=False) # 倒序
df=df.sort_values('弹性',ascending=True) # 正序
还有这里:
df = pd.read_excel(full_path)
df['税前收益率'] = df['税前收益率'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','税前收益率']]
改为:
df['弹性'] = df['弹性'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','弹性']]
如果修改持有个数,天数,修改HOLD_NUM ,和FREQ 即可
得到下面的图:
点击查看大图
"1天,大到小" 收益率 -30%,最大回撤34%
"1天,小到大" 收益率15.74%,最大回撤10.43%
'5天,大到小' 收益率-25%,最大回撤30.71%
'5天,小到大' 收益率7.36%, 最大回撤10.47%
可见弹性按照单天弹性值排名,买入最大的10只,无论按1天还是5天轮动,今天收益率是亏损的;
可见弹性按照单天弹性值排名,买入最小的10只,无论按1天还是5天轮动,今天收益率是盈利的;
如果对数据有疑问,可以到公众号后台留言~ 查看全部
https://t.zsxq.com/08779XPlk
的数据和代码,修改原来的代码
df=df.sort_values('税前收益率',ascending=False)
改为
df=df.sort_values('弹性',ascending=False) # 倒序
df=df.sort_values('弹性',ascending=True) # 正序
还有这里:
df = pd.read_excel(full_path)
df['税前收益率'] = df['税前收益率'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','税前收益率']]
改为:
df['弹性'] = df['弹性'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','弹性']]
如果修改持有个数,天数,修改HOLD_NUM ,和FREQ 即可
得到下面的图:
点击查看大图
"1天,大到小" 收益率 -30%,最大回撤34%
"1天,小到大" 收益率15.74%,最大回撤10.43%
'5天,大到小' 收益率-25%,最大回撤30.71%
'5天,小到大' 收益率7.36%, 最大回撤10.47%
可见弹性按照单天弹性值排名,买入最大的10只,无论按1天还是5天轮动,今天收益率是亏损的;
可见弹性按照单天弹性值排名,买入最小的10只,无论按1天还是5天轮动,今天收益率是盈利的;
如果对数据有疑问,可以到公众号后台留言~
可转债到期收益率因子回测 YTM回测 vs 双低 低溢价 低价策略
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1710 次浏览 • 2022-11-26 16:51
自从优矿转为收费后,基本就没有登录过了。现在的回测在本地进行了,宁稳网的可转债数据上有YTM这因子数据,所以这次使用宁稳网的数据回测。也不使用什么第三方框架了,直接手写回测,模拟交易过程。
逻辑就是按照交易日期,读取所有excel数据。保存到一个dataframe里面,然后按照日期对YTM排名。 选出排名N名的进行买入,掉出N名的进行卖出。
数据源
采用宁稳的全表数据,里面有YTM因子
YTM收益率曲线
本地使用python编写回测代码,纯手工,不使用第三方框架。 平时我也多次力荐大家手写,别依赖那些第三方框架,什么vnpy,backtrade,一是特别难用,数据要适配,二是不好调试,除非你对它们的源码特别熟悉。本回测代码和宁稳数据放在个人知识星球,大部分人其实只关心回测结果就够了。
下图是2022年1月1日至11月25日的回测数据。持有10个标的,红色的是1天调仓,蓝色的是5天调仓
5天轮动,2022年的收益率为4.29%,最大回撤6.98% 。
1天轮动,2022年的收益率为9.33%,最大回撤5.32% 。
1天轮动的整体收益率要比5天轮动的高5个点,并且最大回撤也小一点。
持仓日志
从持仓以及调仓日志来看,买入的大部分是低价转债,且部分也是之前有瑕疵,爆过雷的转债。
高YTM轮动 vs 双低,低溢价,低价
接着对比一下几个常规的转债策略,双低,低溢价,低价。
回测条件相同,起始时间2022-01-01,结束时间2022-11-25。
持有10只,5天轮动。
在今年的可转债偏弱的行情下,高YTM轮动在这4个策略里面的收益率是最高的。
低溢价一如既然的高波动,一会ICU,一会蹦迪。但笔者觉得跌到前期最大回撤的位置,低溢价可以考虑介入的。
YTM和低价格的今年回测收益率接近,YTM高了一个点左右,最大回撤接近。 而低溢价还在回撤的途中,目前今年的收益率为-25%,如果轮动频率高一些,低溢价收益率会高一些,强赎的转债基本会被轮入低溢价标的,因为最近半年强赎后的转债像进入了死亡螺旋一样,正股转债一起跌;因此排除强赎转债会对低溢价收益率有不少的提升。
完整代码以及数据请开通星球查收。
查看全部
自从优矿转为收费后,基本就没有登录过了。现在的回测在本地进行了,宁稳网的可转债数据上有YTM这因子数据,所以这次使用宁稳网的数据回测。也不使用什么第三方框架了,直接手写回测,模拟交易过程。
逻辑就是按照交易日期,读取所有excel数据。保存到一个dataframe里面,然后按照日期对YTM排名。 选出排名N名的进行买入,掉出N名的进行卖出。
数据源
采用宁稳的全表数据,里面有YTM因子
YTM收益率曲线
本地使用python编写回测代码,纯手工,不使用第三方框架。 平时我也多次力荐大家手写,别依赖那些第三方框架,什么vnpy,backtrade,一是特别难用,数据要适配,二是不好调试,除非你对它们的源码特别熟悉。本回测代码和宁稳数据放在个人知识星球,大部分人其实只关心回测结果就够了。
下图是2022年1月1日至11月25日的回测数据。持有10个标的,红色的是1天调仓,蓝色的是5天调仓
5天轮动,2022年的收益率为4.29%,最大回撤6.98% 。
1天轮动,2022年的收益率为9.33%,最大回撤5.32% 。
1天轮动的整体收益率要比5天轮动的高5个点,并且最大回撤也小一点。
持仓日志
从持仓以及调仓日志来看,买入的大部分是低价转债,且部分也是之前有瑕疵,爆过雷的转债。
高YTM轮动 vs 双低,低溢价,低价
接着对比一下几个常规的转债策略,双低,低溢价,低价。
回测条件相同,起始时间2022-01-01,结束时间2022-11-25。
持有10只,5天轮动。
在今年的可转债偏弱的行情下,高YTM轮动在这4个策略里面的收益率是最高的。
低溢价一如既然的高波动,一会ICU,一会蹦迪。但笔者觉得跌到前期最大回撤的位置,低溢价可以考虑介入的。
YTM和低价格的今年回测收益率接近,YTM高了一个点左右,最大回撤接近。 而低溢价还在回撤的途中,目前今年的收益率为-25%,如果轮动频率高一些,低溢价收益率会高一些,强赎的转债基本会被轮入低溢价标的,因为最近半年强赎后的转债像进入了死亡螺旋一样,正股转债一起跌;因此排除强赎转债会对低溢价收益率有不少的提升。
完整代码以及数据请开通星球查收。
可转债 最新的不下修转股价 名单 持续更新
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1444 次浏览 • 2022-09-28 11:24
数据更新至2022年9月24日。
如果可转债公布了某个时间段内的不下修转股价,在溢价率很高的情况下,那么在该时间段内,其溢价率回归的办法只剩拉正股了,而在这上涨阶段中,站在概率面,持有转债的涨幅是会大幅低于正股的。
现在市场的情况也是这样,如果可转债公布不下修,第二天的开盘会以低开反映出来。
数据来源:巨潮。
文末附获取原始数据方法。
点击查看大图
点击查看大图
点击查看大图
链接: https://pan.baidu.com/s/1TVAR3nftALTWR0VTnagVhg 提取码: 5wde
更多公众号文章代码与数据,可输入:帮助
查看全部
数据更新至2022年9月24日。
如果可转债公布了某个时间段内的不下修转股价,在溢价率很高的情况下,那么在该时间段内,其溢价率回归的办法只剩拉正股了,而在这上涨阶段中,站在概率面,持有转债的涨幅是会大幅低于正股的。
现在市场的情况也是这样,如果可转债公布不下修,第二天的开盘会以低开反映出来。
数据来源:巨潮。
文末附获取原始数据方法。
点击查看大图
点击查看大图
点击查看大图
链接: https://pan.baidu.com/s/1TVAR3nftALTWR0VTnagVhg 提取码: 5wde
更多公众号文章代码与数据,可输入:帮助
可转债新规后,可转债费率最低是多少?什么券商可以开
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 1538 次浏览 • 2022-09-14 17:00
另外,此次沪市还调整了可转债交易及其约定购回式债券交易经手费收费标准,由原来按成交金额的0.0001%双向收取、单笔最高不超过100元,调整为按成交金额的0.004%双向收取。
调整后,目前市场上 券商 可转债最低的费率是 沪市 十万分之4.1 , 深圳十万分之4。 然后就没有其他的费用了。
需要开户的可以扫码咨询:
备注:可转债
查看全部
可转债多因子回测 优矿代码
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 2500 次浏览 • 2022-08-06 18:00
实际运用里面,可以加入很多很多因子,比如正股涨跌幅,正股波动率,转债到期时间,正股ROE等等多大几十个因子。
之前写了一个多因子回测的优矿python代码,用户可以自己修改参数,
比如下面的正股波动率因子,Bond_Volatility_ENABLE = True
Bond_Volatility_DAYS = 30
TOP_RIPPLE = 50
Bond_Volatility_LOG_ENABLE = True # 波动率日志开关
Bond_Volatility_ENABLE = True 设为True,就是回测过程加入这个因子,设为False就忽略这个因子。
下面的
Bond_Volatility_DAYS 为N天内的正股波动率,一般设置30天,20天内就够了,因为一年之前的即使波动很大,那对当前转债的影响也很小。
TOP_RIPPLE 选择波动率最大的前面N只转债
举个例子,下面转债是根据其对应正股的30天里的波动率选出来的。(当前是8月5日,也就是7月5日到8月5日之间的数据)。
计算波动率具体代码如下;
每个因子写成一个类。
这样可以不用修改主代码,就可以无限地添加,修改因子。# 基类
class ConditionFilter:
def filters(self, *args, **kwargs):
if self.enable:
return self.fun(*args, **kwargs)
else:
return True
def fun(self, *args, **kwargs):
# 继承的实现这个函数
raise NotImplemented
上面是部分过滤因子,也就是不满足的都会被移除。 比如规模大于10亿的会移除。
然后得到的结果,进行因子评分。 # 权重 溢价率、转债价格、正股N天涨幅,正股ROE
weights = {'溢价率': 0, '转债价格': 1, '正股N天涨幅': 0, '正股ROE': 0, '规模': 0}
每个权重赋予一个权重分最高是1,最低是0,如果你想回测 低溢价率 策略,只需要把其他因子的权重全部设置为0,溢价率设置为1即可。双底的话就是 溢价率和价格各为0.5 就可以了。
设置好参数后,设置你要回测的时间,持仓周期,持有个数等可调参数。
稍等片刻就会有结果了。因子越多,运行时间会增加。一般几分钟就可以得到几年来的回测结果。
中途可以查看日志
完整代码以及运行流程可到知识星球咨询了解。
欢迎关注公众号 查看全部
实际运用里面,可以加入很多很多因子,比如正股涨跌幅,正股波动率,转债到期时间,正股ROE等等多大几十个因子。
之前写了一个多因子回测的优矿python代码,用户可以自己修改参数,
比如下面的正股波动率因子,
Bond_Volatility_ENABLE = True
Bond_Volatility_DAYS = 30
TOP_RIPPLE = 50
Bond_Volatility_LOG_ENABLE = True # 波动率日志开关
Bond_Volatility_ENABLE = True 设为True,就是回测过程加入这个因子,设为False就忽略这个因子。
下面的
Bond_Volatility_DAYS 为N天内的正股波动率,一般设置30天,20天内就够了,因为一年之前的即使波动很大,那对当前转债的影响也很小。
TOP_RIPPLE 选择波动率最大的前面N只转债
举个例子,下面转债是根据其对应正股的30天里的波动率选出来的。(当前是8月5日,也就是7月5日到8月5日之间的数据)。
计算波动率具体代码如下;
每个因子写成一个类。
这样可以不用修改主代码,就可以无限地添加,修改因子。
# 基类
class ConditionFilter:
def filters(self, *args, **kwargs):
if self.enable:
return self.fun(*args, **kwargs)
else:
return True
def fun(self, *args, **kwargs):
# 继承的实现这个函数
raise NotImplemented
上面是部分过滤因子,也就是不满足的都会被移除。 比如规模大于10亿的会移除。
然后得到的结果,进行因子评分。
# 权重 溢价率、转债价格、正股N天涨幅,正股ROE
weights = {'溢价率': 0, '转债价格': 1, '正股N天涨幅': 0, '正股ROE': 0, '规模': 0}
每个权重赋予一个权重分最高是1,最低是0,如果你想回测 低溢价率 策略,只需要把其他因子的权重全部设置为0,溢价率设置为1即可。双底的话就是 溢价率和价格各为0.5 就可以了。
设置好参数后,设置你要回测的时间,持仓周期,持有个数等可调参数。
稍等片刻就会有结果了。因子越多,运行时间会增加。一般几分钟就可以得到几年来的回测结果。
中途可以查看日志
完整代码以及运行流程可到知识星球咨询了解。
欢迎关注公众号
获取可转债历史分时tick数据 【python】
可转债 • 李魔佛 发表了文章 • 0 个评论 • 3199 次浏览 • 2022-06-25 12:29
对于想做日内回测的朋友,是一件很痛苦的事情。
那么,接下来,本文结束一种通过第三方平台的数据,来把可转债的分时tick数据获取下来,并保存到本地数据库。
2022-07-05 更新:
如果直接拿历史数据,可以拿到1分钟级别的数据,如上图所示。
如果要拿秒级别的,需要实时采集。
笔者使用sqlite做为内存缓存,盘后统一入到mysql中。
如果盘中每隔3秒使用mysql储存,显然会造成不必要的io阻塞(开个线程存数据也是一个方案)。
使用sqlite的时候,设置为memeory模式,速度比存文件要快很多倍。
待续 查看全部
对于想做日内回测的朋友,是一件很痛苦的事情。
那么,接下来,本文结束一种通过第三方平台的数据,来把可转债的分时tick数据获取下来,并保存到本地数据库。
2022-07-05 更新:
如果直接拿历史数据,可以拿到1分钟级别的数据,如上图所示。
如果要拿秒级别的,需要实时采集。
笔者使用sqlite做为内存缓存,盘后统一入到mysql中。
如果盘中每隔3秒使用mysql储存,显然会造成不必要的io阻塞(开个线程存数据也是一个方案)。
使用sqlite的时候,设置为memeory模式,速度比存文件要快很多倍。
待续
可转债交易新规什么时候实施,利好股市
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 1694 次浏览 • 2022-06-18 15:23
昨天才看到可转债投资新规 今日和券商确认就已落地实施了(6.18日前开户的不受影响)来势汹汹,没有任何时间缓冲
但如果已满2年交易年限的老铁们,现在还有如下最低可转债费率(新规),需要的赶紧,
即使可转债降温,那又将利好股票,需要股票万一免五的也赶紧,不然又不知道哪天新规突然杀到,再想要也没有了
广发可转债:沪十万分之4.1,深十万分之4.1
银河股票:万一免五 ;可转债:沪十万分之5,深十万分之5
需要开户请扫码联系,备注:开户
查看全部
上交所发布关于可转换公司债券适当性管理相关事项的通知,个人投资者参与向不特定对象发行的可转债申购、交易,应当同时符合下列条件:申请权限开通前20个交易日证券账户及资金账户内的资产日均不低于人民币10万元(不包括该投资者通过融资融券融入的资金和证券);参与证券交易24个月以上。
昨天才看到可转债投资新规 今日和券商确认就已落地实施了(6.18日前开户的不受影响)来势汹汹,没有任何时间缓冲
但如果已满2年交易年限的老铁们,现在还有如下最低可转债费率(新规),需要的赶紧,
即使可转债降温,那又将利好股票,需要股票万一免五的也赶紧,不然又不知道哪天新规突然杀到,再想要也没有了
广发可转债:沪十万分之4.1,深十万分之4.1
银河股票:万一免五 ;可转债:沪十万分之5,深十万分之5
需要开户请扫码联系,备注:开户
强赎日期计数 excel文件
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1725 次浏览 • 2022-06-04 22:54
代码 名称 当前满足天数 强赎目标数 周期 以公告
113568 新春转债 已公告强赎
127043 川恒转债 暂不强赎
123086 海兰转债 暂不强赎
113548 石英转债 暂不强赎
128107 交科转债 已公告强赎
110071 湖盐转债 12 15 30
128111 中矿转债 暂不强赎
127013 创维转债 14 15 30
123092 天壕转债 暂不强赎
128046 利尔转债 19 20 30
127027 靖远转债 暂不强赎
113541 荣晟转债 公告要强赎
123085 万顺转2 暂不强赎
123083 朗新转债 12 15 30
128128 齐翔转2 暂不强赎
128106 华统转债 暂不强赎
113537 文灿转债 暂不强赎
128095 恩捷转债 已满足强赎条件
127007 湖广转债 暂不强赎
123012 万顺转债 暂不强赎
123057 美联转债 暂不强赎
113585 寿仙转债 暂不强赎
110061 川投转债 暂不强赎
113626 伯特转债 暂不强赎
113025 明泰转债 暂不强赎
123078 飞凯转债 暂不强赎
113567 君禾转债 暂不强赎
128017 金禾转债 暂不强赎
128040 华通转债 暂不强赎
128029 太阳转债 暂不强赎
123073 同和转债 暂不强赎
110055 伊力转债 暂不强赎
113525 台华转债 暂不强赎
123060 苏试转债 暂不强赎
127038 国微转债 暂不强赎
123046 天铁转债 暂不强赎
123098 一品转债 暂不强赎
110074 精达转债 暂不强赎
123114 三角转债 暂不强赎
113051 节能转债 暂不强赎
128140 润建转债 暂不强赎
123071 天能转债 暂不强赎
113027 华钰转债 暂不强赎
128091 新天转债 暂不强赎
128085 鸿达转债 暂不强赎
113620 傲农转债 暂不强赎
123052 飞鹿转债 暂不强赎
118000 嘉元转债 暂不强赎
128082 华锋转债 暂不强赎
128109 楚江转债 暂不强赎
113016 小康转债 暂不强赎
123027 蓝晓转债 暂不强赎
128137 洁美转债 暂不强赎
128101 联创转债 暂不强赎
123031 晶瑞转债 暂不强赎
128078 太极转债 暂不强赎
128030 天康转债 暂不强赎
123034 通光转债 暂不强赎
excel原文件:
http://xximg.30daydo.com/webupload/2022-06-04-redeem-info.xlsx
或者关注公众号:可转债量化分析
后台回复:
强赎20220604 查看全部
代码 名称 当前满足天数 强赎目标数 周期 以公告
113568 新春转债 已公告强赎
127043 川恒转债 暂不强赎
123086 海兰转债 暂不强赎
113548 石英转债 暂不强赎
128107 交科转债 已公告强赎
110071 湖盐转债 12 15 30
128111 中矿转债 暂不强赎
127013 创维转债 14 15 30
123092 天壕转债 暂不强赎
128046 利尔转债 19 20 30
127027 靖远转债 暂不强赎
113541 荣晟转债 公告要强赎
123085 万顺转2 暂不强赎
123083 朗新转债 12 15 30
128128 齐翔转2 暂不强赎
128106 华统转债 暂不强赎
113537 文灿转债 暂不强赎
128095 恩捷转债 已满足强赎条件
127007 湖广转债 暂不强赎
123012 万顺转债 暂不强赎
123057 美联转债 暂不强赎
113585 寿仙转债 暂不强赎
110061 川投转债 暂不强赎
113626 伯特转债 暂不强赎
113025 明泰转债 暂不强赎
123078 飞凯转债 暂不强赎
113567 君禾转债 暂不强赎
128017 金禾转债 暂不强赎
128040 华通转债 暂不强赎
128029 太阳转债 暂不强赎
123073 同和转债 暂不强赎
110055 伊力转债 暂不强赎
113525 台华转债 暂不强赎
123060 苏试转债 暂不强赎
127038 国微转债 暂不强赎
123046 天铁转债 暂不强赎
123098 一品转债 暂不强赎
110074 精达转债 暂不强赎
123114 三角转债 暂不强赎
113051 节能转债 暂不强赎
128140 润建转债 暂不强赎
123071 天能转债 暂不强赎
113027 华钰转债 暂不强赎
128091 新天转债 暂不强赎
128085 鸿达转债 暂不强赎
113620 傲农转债 暂不强赎
123052 飞鹿转债 暂不强赎
118000 嘉元转债 暂不强赎
128082 华锋转债 暂不强赎
128109 楚江转债 暂不强赎
113016 小康转债 暂不强赎
123027 蓝晓转债 暂不强赎
128137 洁美转债 暂不强赎
128101 联创转债 暂不强赎
123031 晶瑞转债 暂不强赎
128078 太极转债 暂不强赎
128030 天康转债 暂不强赎
123034 通光转债 暂不强赎
excel原文件:
http://xximg.30daydo.com/webupload/2022-06-04-redeem-info.xlsx
或者关注公众号:可转债量化分析
后台回复:
强赎20220604
这种拿别人代码和数据改点东西 还弄错结果,挺搞笑的
股票 • 绫波丽 发表了文章 • 0 个评论 • 2555 次浏览 • 2021-08-31 23:25
这个ylxwyj纯属一个装逼犯。 简单的道理,洋洋洒洒写一大篇八股文,什么alpha,信息比率,对,很专业。 实际对文中的结论有任何作用吗? 提出来就是装逼用的。
更为搞笑的是自己结论弄错了,还不谦虚。
这种人就像项目组里面,把你代码剽窃了,然后去外面跟别人说一通大道理。 然后最后发现无法自圆其说。 然后他说,哦 是xxx的代码有问题,是xxx的数据有问题。
查看全部
这个ylxwyj纯属一个装逼犯。 简单的道理,洋洋洒洒写一大篇八股文,什么alpha,信息比率,对,很专业。 实际对文中的结论有任何作用吗? 提出来就是装逼用的。
更为搞笑的是自己结论弄错了,还不谦虚。
这种人就像项目组里面,把你代码剽窃了,然后去外面跟别人说一通大道理。 然后最后发现无法自圆其说。 然后他说,哦 是xxx的代码有问题,是xxx的数据有问题。
敬畏市场 市场里没有永恒的圣杯
可转债 • 绫波丽 发表了文章 • 0 个评论 • 2375 次浏览 • 2021-08-27 19:59
实际上发力时间是在6月中旬
实际上发力时间是在6月中旬
通达信无法导入或者监控到可转债的代码
股票 • 绫波丽 发表了文章 • 0 个评论 • 2309 次浏览 • 2021-08-06 13:02
原来本身就不支持导入可转债代码
只能导入正股代码
原来本身就不支持导入可转债代码
只能导入正股代码
可转债转股套利 收益率统计 只做大于-5%折价率以上
股票 • 李魔佛 发表了文章 • 0 个评论 • 1949 次浏览 • 2021-07-19 00:11
平均收益是 0.014%
总收益率是0.225%
量化交易接口python A股
股票 • 绫波丽 发表了文章 • 0 个评论 • 7549 次浏览 • 2021-07-01 11:22
实际操作也好,几乎没见几个人教你怎么用程序下单,实盘交易。
稍微好点的easytrader使用的是模拟点击交易软件进行点击下单,基本无法判断下单后是否成交,也无法实时获取行情数据。别跟我说用tushare或者新浪这些接口数据,除非你做的是低频交易。
试试扫描一次全市场的行情看看用时多少?等得到满足条件了,再下单,此时价格可能已经在涨停板上封住了。
笔者使用的是券商提供的量化软件:Ptrade。
是恒生电子研发的提供给券商机构使用的程序化交易软件。提供策略回测,自动下单功能,使用的开发语言python。
策略回测与实盘交易
研究页面
研究页面,熟悉python jupyter notebook的朋友对这个界面肯定很熟悉。
研究的页面实际就运行你逐行输出调试程序,了解每个函数的具体使用,或者你策略的中途结果调试。
回测策略
实际代码需要在回测策略里面写,写完后确定无误,就可以放在仿真环境下真实运行。
如果你运行得到的结果很满意,那么就可以直接部署到实盘服务器上。
实盘服务器是在券商那边,不需要个人购买服务器,也不需要本地开着这个Ptrade,就是说不需要在个人电脑上一直开着跑,你的最终代码和程序是在券商服务器上部署与运行,除非有报错异常停止,不然在你不暂停或者停止的前提下,可以一直运行下去。
条件满足后下单
可视化量化
同时也提供一些常见的现成的量化策略,选中后只要鼠标点点点也能够自动化跑这些策略了,当然里面很多参数都可以用鼠标点点点修改。
接口文档也非常详细:
一些常见策略代码:
双均线策略 def initialize(context):
2 # 初始化此策略
3 # 设置我们要操作的股票池, 这里我们只操作一支股票
4 g.security = '600570.SS'
5 set_universe(g.security)
6 pass
7
8 #当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
9 def handle_data(context, data):
10 security = g.security
11
12 #得到十日历史价格
13 df = get_history(10, '1d', 'close', security, fq=None, include=False)
14
15 # 得到五日均线价格
16 ma5 = round(df['close'][-5:].mean(), 3)
17
18 # 得到十日均线价格
19 ma10 = round(df['close'][-10:].mean(), 3)
20
21 # 取得昨天收盘价
22 price = data[security]['close']
23
24 # 得到当前资金余额
25 cash = context.portfolio.cash
26
27 # 如果当前有余额,并且五日均线大于十日均线
28 if ma5 > ma10:
29 # 用所有 cash 买入股票
30 order_value(security, cash)
31 # 记录这次买入
32 log.info("Buying %s" % (security))
33
34 # 如果五日均线小于十日均线,并且目前有头寸
35 elif ma5 < ma10 and get_position(security).amount > 0:
36 # 全部卖出
37 order_target(security, 0)
38 # 记录这次卖出
39 log.info("Selling %s" % (security))
macd策略
指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值 def f_expma(N,m,EXPMA1,price):
2 a = m/(N+1)
3 EXPMA2 = a * price + (1 - a)*EXPMA1
4 return EXPMA2 #2为后一天值
5
6 #定义macd函数,输入平滑系数参数、前一日值,输出当日值
7 def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
8 EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
9 EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
10 DIF2 = EXPMA12_2 - EXPMA26_2
11 a = m/(N3+1)
12 DEA2 = a * DIF2 + (1 - a)*DEA1
13 BAR2=2*(DIF2-DEA2)
14 return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2
15
16 def initialize(context):
17 global init_price
18 init_price = None
19 # 获取沪深300股票
20 g.security = get_index_stocks('000300.SS')
21 #g.security = ['600570.SS']
22 # 设置我们要操作的股票池, 这里我们只操作一支股票
23 set_universe(g.security)
24
25 def handle_data(context, data):
26 # 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
27 # 从股票上市至今的所有历史数据,即增加获取的天数
28 close_price = get_history(2, '1d', field='close', security_list=g.security)
29 #如果是停牌不进行计算
30 for security in g.security:
31 if data[security].is_open >0:
32 global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
33 if init_price is None:
34 init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
35 EXPMA12_1 = init_price
36 EXPMA26_1 = init_price
37 DIF1 = init_price
38 DEA1 = init_price
39 # m用于计算平滑系数a=m/(N+1)
40 m = 2.0
41 #设定指数平滑基期数
42 N1 = 12
43 N2 = 26
44 N3 = 9
45 EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
46 # 取得当前价格
47 current_price = data[security].price
48 # 取得当前的现金
49 cash = context.portfolio.cash
50 # DIF、DEA均为正,DIF向上突破DEA,买入信号参考
51 if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
52 # 计算可以买多少只股票
53 number_of_shares = int(cash/current_price)
54 # 购买量大于0时,下单
55 if number_of_shares > 0:
56 # 以市单价买入股票,日回测时即是开盘价
57 order(security, +number_of_shares)
58 # 记录这次买入
59 log.info("Buying %s" % (security))
60 # DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
61 elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
62 # 卖出所有股票,使这只股票的最终持有量为0
63 order_target(security, 0)
64 # 记录这次卖出
65 log.info("Selling %s" % (security))
66 # 将今日的值赋给全局变量作为下一次前一日的值
67 DEA1 = DEA2
68 DIF1 = DIF2
69 EXPMA12_1 = EXPMA12_2
70 EXPMA26_1 = EXPMA26_2
同时也支持可转债T+0交易,笔者平时也主要是进行的可转债的交易。
软件与交易接口开通条件,
开通改券商后,存入资金50W放2周即可开通,开通后可取出。
本身券商的交易费率为股票万一免五,可转债百万分之二,非常厚道,因为不少面向机构的量化交易软件的佣金是万2.5的,笔者之前在国金渠道开的就是,坑的一比。所以笔者还是很推荐目前该券商的量化交易接口。
需要可以关注公众号获取开通链接: 查看全部
实际操作也好,几乎没见几个人教你怎么用程序下单,实盘交易。
稍微好点的easytrader使用的是模拟点击交易软件进行点击下单,基本无法判断下单后是否成交,也无法实时获取行情数据。别跟我说用tushare或者新浪这些接口数据,除非你做的是低频交易。
试试扫描一次全市场的行情看看用时多少?等得到满足条件了,再下单,此时价格可能已经在涨停板上封住了。
笔者使用的是券商提供的量化软件:Ptrade。
是恒生电子研发的提供给券商机构使用的程序化交易软件。提供策略回测,自动下单功能,使用的开发语言python。
策略回测与实盘交易
研究页面
研究页面,熟悉python jupyter notebook的朋友对这个界面肯定很熟悉。
研究的页面实际就运行你逐行输出调试程序,了解每个函数的具体使用,或者你策略的中途结果调试。
回测策略
实际代码需要在回测策略里面写,写完后确定无误,就可以放在仿真环境下真实运行。
如果你运行得到的结果很满意,那么就可以直接部署到实盘服务器上。
实盘服务器是在券商那边,不需要个人购买服务器,也不需要本地开着这个Ptrade,就是说不需要在个人电脑上一直开着跑,你的最终代码和程序是在券商服务器上部署与运行,除非有报错异常停止,不然在你不暂停或者停止的前提下,可以一直运行下去。
条件满足后下单
可视化量化
同时也提供一些常见的现成的量化策略,选中后只要鼠标点点点也能够自动化跑这些策略了,当然里面很多参数都可以用鼠标点点点修改。
接口文档也非常详细:
一些常见策略代码:
双均线策略
def initialize(context):
2 # 初始化此策略
3 # 设置我们要操作的股票池, 这里我们只操作一支股票
4 g.security = '600570.SS'
5 set_universe(g.security)
6 pass
7
8 #当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
9 def handle_data(context, data):
10 security = g.security
11
12 #得到十日历史价格
13 df = get_history(10, '1d', 'close', security, fq=None, include=False)
14
15 # 得到五日均线价格
16 ma5 = round(df['close'][-5:].mean(), 3)
17
18 # 得到十日均线价格
19 ma10 = round(df['close'][-10:].mean(), 3)
20
21 # 取得昨天收盘价
22 price = data[security]['close']
23
24 # 得到当前资金余额
25 cash = context.portfolio.cash
26
27 # 如果当前有余额,并且五日均线大于十日均线
28 if ma5 > ma10:
29 # 用所有 cash 买入股票
30 order_value(security, cash)
31 # 记录这次买入
32 log.info("Buying %s" % (security))
33
34 # 如果五日均线小于十日均线,并且目前有头寸
35 elif ma5 < ma10 and get_position(security).amount > 0:
36 # 全部卖出
37 order_target(security, 0)
38 # 记录这次卖出
39 log.info("Selling %s" % (security))
macd策略
指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值
def f_expma(N,m,EXPMA1,price):
2 a = m/(N+1)
3 EXPMA2 = a * price + (1 - a)*EXPMA1
4 return EXPMA2 #2为后一天值
5
6 #定义macd函数,输入平滑系数参数、前一日值,输出当日值
7 def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
8 EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
9 EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
10 DIF2 = EXPMA12_2 - EXPMA26_2
11 a = m/(N3+1)
12 DEA2 = a * DIF2 + (1 - a)*DEA1
13 BAR2=2*(DIF2-DEA2)
14 return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2
15
16 def initialize(context):
17 global init_price
18 init_price = None
19 # 获取沪深300股票
20 g.security = get_index_stocks('000300.SS')
21 #g.security = ['600570.SS']
22 # 设置我们要操作的股票池, 这里我们只操作一支股票
23 set_universe(g.security)
24
25 def handle_data(context, data):
26 # 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
27 # 从股票上市至今的所有历史数据,即增加获取的天数
28 close_price = get_history(2, '1d', field='close', security_list=g.security)
29 #如果是停牌不进行计算
30 for security in g.security:
31 if data[security].is_open >0:
32 global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
33 if init_price is None:
34 init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
35 EXPMA12_1 = init_price
36 EXPMA26_1 = init_price
37 DIF1 = init_price
38 DEA1 = init_price
39 # m用于计算平滑系数a=m/(N+1)
40 m = 2.0
41 #设定指数平滑基期数
42 N1 = 12
43 N2 = 26
44 N3 = 9
45 EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
46 # 取得当前价格
47 current_price = data[security].price
48 # 取得当前的现金
49 cash = context.portfolio.cash
50 # DIF、DEA均为正,DIF向上突破DEA,买入信号参考
51 if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
52 # 计算可以买多少只股票
53 number_of_shares = int(cash/current_price)
54 # 购买量大于0时,下单
55 if number_of_shares > 0:
56 # 以市单价买入股票,日回测时即是开盘价
57 order(security, +number_of_shares)
58 # 记录这次买入
59 log.info("Buying %s" % (security))
60 # DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
61 elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
62 # 卖出所有股票,使这只股票的最终持有量为0
63 order_target(security, 0)
64 # 记录这次卖出
65 log.info("Selling %s" % (security))
66 # 将今日的值赋给全局变量作为下一次前一日的值
67 DEA1 = DEA2
68 DIF1 = DIF2
69 EXPMA12_1 = EXPMA12_2
70 EXPMA26_1 = EXPMA26_2
同时也支持可转债T+0交易,笔者平时也主要是进行的可转债的交易。
软件与交易接口开通条件,
开通改券商后,存入资金50W放2周即可开通,开通后可取出。
本身券商的交易费率为股票万一免五,可转债百万分之二,非常厚道,因为不少面向机构的量化交易软件的佣金是万2.5的,笔者之前在国金渠道开的就是,坑的一比。所以笔者还是很推荐目前该券商的量化交易接口。
需要可以关注公众号获取开通链接:
高考结束有什么兼职适合没有经验的高中生
闲聊 • 绫波丽 发表了文章 • 0 个评论 • 1827 次浏览 • 2021-06-28 17:09
1. 做写手写软文。一个是付出收益比太低。并且市面上有很多骗子,写完稿是不给费用的。
2. 淘宝客推广商品。现在线上推广已经成了红海。如果你到处在论坛,贴吧之类的发广告,效果很差的。基本没有出路。为啥? 因为已经有不少平台级别的推广,比如什么值得买,还有很多程序员自己写的微信小程序,做推广下单返佣的。 人家的流量比新起的个人开始做的要大很多。
3. 麦当劳,肯德基类的兼职。 这个完全是出卖个人的时间。不过对于一些内向的同学,我倒是建议他们可以去尝试一下,锻炼你们的胆量。
建议你们去做的:
1. 直播领域的探索。 目前这个行业,颜值就是流量。对于很高年少青春的同学来说,这个是最大的资本。 并且,成本不大,就一个手机即可。人人皆可做。
2. 证券市场上的无风险套利: 比如可转债打新,或者港股,美股打新。不过后者会有一定破发风险。并且入金有一定的门槛。
对于可转债打新,你只需要开通一个证券账户,然后就可以每天都打,如果当天有新债可打。 打中后才给钱。并且这个转债,一般情况下,破发的概率比较小,即使破发了,后面也会来到100元以上。这个可以放心。历史上没有哪一只转债没有上过100元。
不过对于打新族来说,正确的做法就是上市就卖。不然就没有剩余资金来已经下一只转债了。
目前如果需要开户,可以联系wx:
可转债交易费率目前全市场最低,达到百万分之二,对于学生而言,每一分都值得节约。百万分之二的费率,意味着一百万的交易,收费只有2元,而1万元的交易额,费用就只有2分钱。 而卖出的1000元转债,那么收费只有0.是的,不用钱哦。
查看全部
1. 做写手写软文。一个是付出收益比太低。并且市面上有很多骗子,写完稿是不给费用的。
2. 淘宝客推广商品。现在线上推广已经成了红海。如果你到处在论坛,贴吧之类的发广告,效果很差的。基本没有出路。为啥? 因为已经有不少平台级别的推广,比如什么值得买,还有很多程序员自己写的微信小程序,做推广下单返佣的。 人家的流量比新起的个人开始做的要大很多。
3. 麦当劳,肯德基类的兼职。 这个完全是出卖个人的时间。不过对于一些内向的同学,我倒是建议他们可以去尝试一下,锻炼你们的胆量。
建议你们去做的:
1. 直播领域的探索。 目前这个行业,颜值就是流量。对于很高年少青春的同学来说,这个是最大的资本。 并且,成本不大,就一个手机即可。人人皆可做。
2. 证券市场上的无风险套利: 比如可转债打新,或者港股,美股打新。不过后者会有一定破发风险。并且入金有一定的门槛。
对于可转债打新,你只需要开通一个证券账户,然后就可以每天都打,如果当天有新债可打。 打中后才给钱。并且这个转债,一般情况下,破发的概率比较小,即使破发了,后面也会来到100元以上。这个可以放心。历史上没有哪一只转债没有上过100元。
不过对于打新族来说,正确的做法就是上市就卖。不然就没有剩余资金来已经下一只转债了。
目前如果需要开户,可以联系wx:
可转债交易费率目前全市场最低,达到百万分之二,对于学生而言,每一分都值得节约。百万分之二的费率,意味着一百万的交易,收费只有2元,而1万元的交易额,费用就只有2分钱。 而卖出的1000元转债,那么收费只有0.是的,不用钱哦。
可转债T+0 零手续费 零费率 免佣金
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 3361 次浏览 • 2021-04-06 18:26
可转债新规后,佣金沪深市十万分之五
那么如果你是很抠的人,这里并不是贬义词,在菜市场,你会比较价格,而在证券市场上,为什么不挑选便宜的佣金的券商呢?
看交割单
以前看到一个案例,发现低佣是多么难得:
券商交割单只是统计到分,也就是一分钱以下是不会收取的,那么买入转债的时候,如果你的交易金额较大,那么可以使用拆单功能,就是把一个大单拆分为多个小单,如果你每个小单小于5千元,那么券商的交割费用系统就会舍弃分钱后面的金额,也就是交易费用原来是 0.003元,但只能取到分钱位置,也就是0.00,后面的3就被舍弃了,这样手续费就是为0了。
所以你要做的就是找一个可转债低佣的券商,越低越好
需要可以扫描开户:
备注:开户
非诚勿扰。
查看全部
可转债新规后,佣金沪深市十万分之五
那么如果你是很抠的人,这里并不是贬义词,在菜市场,你会比较价格,而在证券市场上,为什么不挑选便宜的佣金的券商呢?
看交割单
以前看到一个案例,发现低佣是多么难得:
券商交割单只是统计到分,也就是一分钱以下是不会收取的,那么买入转债的时候,如果你的交易金额较大,那么可以使用拆单功能,就是把一个大单拆分为多个小单,如果你每个小单小于5千元,那么券商的交割费用系统就会舍弃分钱后面的金额,也就是交易费用原来是 0.003元,但只能取到分钱位置,也就是0.00,后面的3就被舍弃了,这样手续费就是为0了。
所以你要做的就是找一个可转债低佣的券商,越低越好
需要可以扫描开户:
备注:开户
非诚勿扰。
python判断可转债是否强赎
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 2498 次浏览 • 2021-04-02 13:41
更新:
制作好了一个接口,用户可以直接调用。
数据来源与集思录。
获取 排除满足强赎天数剩余N天的可转债,排除强赎可转债。
比如:DAY=4 ,那么假设强赎满足天数为15天,那么返回市场上强赎强赎倒数天数大于4天的可转债,即返回小于或者等于11天以下的转债。把满足条件还差4天的转债排除掉了,当然,已经公告强赎的也会被排除。
import requests
URL = 'http://11.11.11.11/api/redeem/'
# DAY 强赎倒数剩余天数小于 DAY (4)天, 已经公告强赎的也是被排除的
DAY = 4
SIGN = '私信星主获取' # sign和以前一致
data = {'day': DAY,
'sign': SIGN}
r = requests.post(URL, data=data)
print(r.json())
具体用户可以关注知识星球: 查看全部
更新:
制作好了一个接口,用户可以直接调用。
数据来源与集思录。
获取 排除满足强赎天数剩余N天的可转债,排除强赎可转债。
比如:DAY=4 ,那么假设强赎满足天数为15天,那么返回市场上强赎强赎倒数天数大于4天的可转债,即返回小于或者等于11天以下的转债。把满足条件还差4天的转债排除掉了,当然,已经公告强赎的也会被排除。
import requests
URL = 'http://11.11.11.11/api/redeem/'
# DAY 强赎倒数剩余天数小于 DAY (4)天, 已经公告强赎的也是被排除的
DAY = 4
SIGN = '私信星主获取' # sign和以前一致
data = {'day': DAY,
'sign': SIGN}
r = requests.post(URL, data=data)
print(r.json())
具体用户可以关注知识星球:
可转债费率百分之二 全市场最便宜
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 3719 次浏览 • 2021-03-14 02:03
目前根据可转债新规 沪市十万分之4.1,深市十万分之4。支持同花顺交易
没有最低5元限制,也没有任何最低限制。
以前旧的费率可转债 沪市 百万分之二已经不复存在了。大部分券商把存量的用户也提高了。
需要的朋友欢迎扫码加我开户吧
备注:开户
非诚勿扰!
查看全部
目前根据可转债新规 沪市十万分之4.1,深市十万分之4。支持同花顺交易
没有最低5元限制,也没有任何最低限制。
以前旧的费率可转债 沪市 百万分之二已经不复存在了。大部分券商把存量的用户也提高了。
需要的朋友欢迎扫码加我开户吧
备注:开户
非诚勿扰!
2020-10-20 可转债市场成交量较昨天多一倍
股票 • 绫波丽 发表了文章 • 0 个评论 • 2444 次浏览 • 2020-10-20 17:51
最近的策略就是减仓。
最近的策略就是减仓。
深圳转债转股后不可以撤单
股票 • 李魔佛 发表了文章 • 0 个评论 • 3352 次浏览 • 2019-06-25 09:12
说明转股后也是不能撤单的。
说明转股后也是不能撤单的。
【可转债剩余转股比例数据排序】【2019-05-06】
股票 • 李魔佛 发表了文章 • 0 个评论 • 5998 次浏览 • 2019-05-06 15:28
剩余的比例越少,上市公司下调转股价的欲望就越少。 也就是会任由可转债在那里晾着,不会积极拉正股。
数据定期更新。
原创文章,
转载请注明出处:
http://30daydo.com/article/472
查看全部
剩余的比例越少,上市公司下调转股价的欲望就越少。 也就是会任由可转债在那里晾着,不会积极拉正股。
数据定期更新。
原创文章,
转载请注明出处:
http://30daydo.com/article/472
可转债如何配债
股票 • 李魔佛 发表了文章 • 0 个评论 • 12687 次浏览 • 2019-03-29 16:24
1、如果你在登记日也就是12月11日收盘时还持有一定数量歌尔声学正股的话,那么你在配债日也就是12月12日就会看到账户里有相应数量的歌尔配债。注意这里的单位是张,如图,
由于我只有800股歌尔声学,因此获得了13张配债,1张对应100元,这时双击它,左侧出现了卖出菜单,价格和配债代码都自动填好了,输入13张或者点击全部,然后点“卖出”。(需要注意的是:有些券商这里是买入。)
2、不管是卖出还是买入,然后检查下委托情况和扣款情况,如下图:
可以看到我已经被扣款1300元,这样就算成功完成了这次的13张配债.
可转债低佣金开户,沪市转债费率百分之二,全市场最低。
有兴趣的朋友可以扫描开户:
查看全部
1、如果你在登记日也就是12月11日收盘时还持有一定数量歌尔声学正股的话,那么你在配债日也就是12月12日就会看到账户里有相应数量的歌尔配债。注意这里的单位是张,如图,
由于我只有800股歌尔声学,因此获得了13张配债,1张对应100元,这时双击它,左侧出现了卖出菜单,价格和配债代码都自动填好了,输入13张或者点击全部,然后点“卖出”。(需要注意的是:有些券商这里是买入。)
2、不管是卖出还是买入,然后检查下委托情况和扣款情况,如下图:
可以看到我已经被扣款1300元,这样就算成功完成了这次的13张配债.
可转债低佣金开户,沪市转债费率百分之二,全市场最低。
有兴趣的朋友可以扫描开户:
可转债价格分布堆叠图 绘制 可视化 python+pyecharts
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 7662 次浏览 • 2019-01-30 10:59
即使你有很多数据,可是,你无法直观地看到数据的总体趋势。使用可视化的绘图,可以帮助我们看到数据背后看不到的数据。 比如我已经有每一个可转债的价格,评级。数据如下:
点击查看大图
如果我用下面的图形就可以看出规律:
点击查看大图
横坐标是价格,纵坐标是落在该价格的可转债数量,不同颜色代表不同评级的可转债。
可以看到大部分AA-评级(浅橙色)的可转债价格都在100元以下,而AA(浅蓝色)的可转债价格分布较为平均,从90到110都有。而AA+和AAA的一般都在100以上。
那么如何使用代码实现呢?from setting import get_mysql_conn,get_engine
import pandas as pd
import pymongo
from pyecharts import Geo,Style,Map
engine = get_engine('db_stock',local='local')
# 堆叠图
from pyecharts import Bar
df = pd.read_sql('tb_bond_jisilu',con=engine)
result ={}
for name,grades in df.groupby('评级'):
# print(name,grades[['可转债名称','可转债价格']])
for each in grades['可转债价格']:
result.setdefault(name,)
result[name].append(each)
# 确定价格的范围
value = [str(i) for i in range(85,140)]
ret = [0]*len(value)
ret1 = dict(zip(value,ret))
ret_A_add = ret1.copy()
for item in result['A+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
ret_A_add[k]+=1
retAA_ = ret1.copy()
for item in result['']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_[k]+=1
retAA = ret1.copy()
for item in result['AA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA[k]+=1
retAA_add = ret1.copy()
for item in result['AA+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_add[k]+=1
retAAA = ret1.copy()
for item in result['AAA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAAA[k]+=1
bar = Bar('可转债价格分布')
bar.add('A+',value,list(ret_A_add.values()),is_stack=True,yaxis_max=11)
bar.add('',value,list(retAA_.values()),is_stack=True,yaxis_max=11)
bar.add('AA',value,list(retAA.values()),is_stack=True,yaxis_max=11)
bar.add('AA+',value,list(retAA_add.values()),is_stack=True,yaxis_max=11)
bar.add('AAA',value,list(retAAA.values()),is_stack=True,yaxis_max=11)
如果没有安装pyecharts,需要用pip安装即可。
原创文章
转载请注明出处:
http://30daydo.com/article/400
查看全部
即使你有很多数据,可是,你无法直观地看到数据的总体趋势。使用可视化的绘图,可以帮助我们看到数据背后看不到的数据。 比如我已经有每一个可转债的价格,评级。数据如下:
点击查看大图
如果我用下面的图形就可以看出规律:
点击查看大图
横坐标是价格,纵坐标是落在该价格的可转债数量,不同颜色代表不同评级的可转债。
可以看到大部分AA-评级(浅橙色)的可转债价格都在100元以下,而AA(浅蓝色)的可转债价格分布较为平均,从90到110都有。而AA+和AAA的一般都在100以上。
那么如何使用代码实现呢?
from setting import get_mysql_conn,get_engine
import pandas as pd
import pymongo
from pyecharts import Geo,Style,Map
engine = get_engine('db_stock',local='local')
# 堆叠图
from pyecharts import Bar
df = pd.read_sql('tb_bond_jisilu',con=engine)
result ={}
for name,grades in df.groupby('评级'):
# print(name,grades[['可转债名称','可转债价格']])
for each in grades['可转债价格']:
result.setdefault(name,)
result[name].append(each)
# 确定价格的范围
value = [str(i) for i in range(85,140)]
ret = [0]*len(value)
ret1 = dict(zip(value,ret))
ret_A_add = ret1.copy()
for item in result['A+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
ret_A_add[k]+=1
retAA_ = ret1.copy()
for item in result['']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_[k]+=1
retAA = ret1.copy()
for item in result['AA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA[k]+=1
retAA_add = ret1.copy()
for item in result['AA+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_add[k]+=1
retAAA = ret1.copy()
for item in result['AAA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAAA[k]+=1
bar = Bar('可转债价格分布')
bar.add('A+',value,list(ret_A_add.values()),is_stack=True,yaxis_max=11)
bar.add('',value,list(retAA_.values()),is_stack=True,yaxis_max=11)
bar.add('AA',value,list(retAA.values()),is_stack=True,yaxis_max=11)
bar.add('AA+',value,list(retAA_add.values()),is_stack=True,yaxis_max=11)
bar.add('AAA',value,list(retAAA.values()),is_stack=True,yaxis_max=11)
如果没有安装pyecharts,需要用pip安装即可。
原创文章
转载请注明出处:
http://30daydo.com/article/400
可转债正股的PB<1时,可转债不可以下调转股价
量化交易 • 李魔佛 发表了文章 • 0 个评论 • 5578 次浏览 • 2018-11-26 14:17
这是大部分转债“转股价格特别修正条款”的标准表述。
这是大部分转债“转股价格特别修正条款”的标准表述。
Ptrade/QMT 可转债转股操作 python代码
量化交易 • 李魔佛 发表了文章 • 0 个评论 • 2061 次浏览 • 2023-06-19 18:14
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def before_trading_start(context, data):
g.count = 0
def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
主要是上面的函数,
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return
if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False
passorder 里面的 80是 普通账户可转债转股
更多Ptrade,qmt知识,可以关注公众号
查看全部
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def before_trading_start(context, data):
g.count = 0
def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
主要是上面的函数,
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return
if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False
passorder 里面的 80是 普通账户可转债转股
更多Ptrade,qmt知识,可以关注公众号
qmt 可转债 双低(阈值)轮动 实盘代码
QMT • 李魔佛 发表了文章 • 0 个评论 • 2397 次浏览 • 2023-02-26 15:18
用已有的ptrade的代码,然后部分获取行情和交易接口按照qmt的接口文档(http://qmt.ptradeapi.com )重写,就给了一版。(对,很早以前就有一版ptrade的转债双低的了)
无论是qmt还是ptrade,都只是一个工具,用熟悉了,都无所哪个好哪个不好。
完整代码在个人星球。
觉得之前星球太便宜了,不仅给了代码,还部署了接口免费使用,通过接口获取可转债的实时数据,强赎天数,规模,溢价率,评级等等一系列数据。 而且随着时间的推移,里面积累的数据,代码也越来越多,感觉这样对前面进去并不断续费的星友有点公平,尽管以后他们续费都直接打折扣。所以还是按照一些大v运营的意见,逐年涨价策略。
越往后的朋友,因为前面积累的内容越多,因此价格也随之增长。
当然有能力可以自己写接口,部署,实盘,获取三方数据的大v,就没必要加了。
查看全部
用已有的ptrade的代码,然后部分获取行情和交易接口按照qmt的接口文档(http://qmt.ptradeapi.com )重写,就给了一版。(对,很早以前就有一版ptrade的转债双低的了)
无论是qmt还是ptrade,都只是一个工具,用熟悉了,都无所哪个好哪个不好。
完整代码在个人星球。
觉得之前星球太便宜了,不仅给了代码,还部署了接口免费使用,通过接口获取可转债的实时数据,强赎天数,规模,溢价率,评级等等一系列数据。 而且随着时间的推移,里面积累的数据,代码也越来越多,感觉这样对前面进去并不断续费的星友有点公平,尽管以后他们续费都直接打折扣。所以还是按照一些大v运营的意见,逐年涨价策略。
越往后的朋友,因为前面积累的内容越多,因此价格也随之增长。
当然有能力可以自己写接口,部署,实盘,获取三方数据的大v,就没必要加了。
量化交易接口python A股
股票 • 绫波丽 发表了文章 • 0 个评论 • 7549 次浏览 • 2021-07-01 11:22
实际操作也好,几乎没见几个人教你怎么用程序下单,实盘交易。
稍微好点的easytrader使用的是模拟点击交易软件进行点击下单,基本无法判断下单后是否成交,也无法实时获取行情数据。别跟我说用tushare或者新浪这些接口数据,除非你做的是低频交易。
试试扫描一次全市场的行情看看用时多少?等得到满足条件了,再下单,此时价格可能已经在涨停板上封住了。
笔者使用的是券商提供的量化软件:Ptrade。
是恒生电子研发的提供给券商机构使用的程序化交易软件。提供策略回测,自动下单功能,使用的开发语言python。
策略回测与实盘交易
研究页面
研究页面,熟悉python jupyter notebook的朋友对这个界面肯定很熟悉。
研究的页面实际就运行你逐行输出调试程序,了解每个函数的具体使用,或者你策略的中途结果调试。
回测策略
实际代码需要在回测策略里面写,写完后确定无误,就可以放在仿真环境下真实运行。
如果你运行得到的结果很满意,那么就可以直接部署到实盘服务器上。
实盘服务器是在券商那边,不需要个人购买服务器,也不需要本地开着这个Ptrade,就是说不需要在个人电脑上一直开着跑,你的最终代码和程序是在券商服务器上部署与运行,除非有报错异常停止,不然在你不暂停或者停止的前提下,可以一直运行下去。
条件满足后下单
可视化量化
同时也提供一些常见的现成的量化策略,选中后只要鼠标点点点也能够自动化跑这些策略了,当然里面很多参数都可以用鼠标点点点修改。
接口文档也非常详细:
一些常见策略代码:
双均线策略 def initialize(context):
2 # 初始化此策略
3 # 设置我们要操作的股票池, 这里我们只操作一支股票
4 g.security = '600570.SS'
5 set_universe(g.security)
6 pass
7
8 #当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
9 def handle_data(context, data):
10 security = g.security
11
12 #得到十日历史价格
13 df = get_history(10, '1d', 'close', security, fq=None, include=False)
14
15 # 得到五日均线价格
16 ma5 = round(df['close'][-5:].mean(), 3)
17
18 # 得到十日均线价格
19 ma10 = round(df['close'][-10:].mean(), 3)
20
21 # 取得昨天收盘价
22 price = data[security]['close']
23
24 # 得到当前资金余额
25 cash = context.portfolio.cash
26
27 # 如果当前有余额,并且五日均线大于十日均线
28 if ma5 > ma10:
29 # 用所有 cash 买入股票
30 order_value(security, cash)
31 # 记录这次买入
32 log.info("Buying %s" % (security))
33
34 # 如果五日均线小于十日均线,并且目前有头寸
35 elif ma5 < ma10 and get_position(security).amount > 0:
36 # 全部卖出
37 order_target(security, 0)
38 # 记录这次卖出
39 log.info("Selling %s" % (security))
macd策略
指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值 def f_expma(N,m,EXPMA1,price):
2 a = m/(N+1)
3 EXPMA2 = a * price + (1 - a)*EXPMA1
4 return EXPMA2 #2为后一天值
5
6 #定义macd函数,输入平滑系数参数、前一日值,输出当日值
7 def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
8 EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
9 EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
10 DIF2 = EXPMA12_2 - EXPMA26_2
11 a = m/(N3+1)
12 DEA2 = a * DIF2 + (1 - a)*DEA1
13 BAR2=2*(DIF2-DEA2)
14 return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2
15
16 def initialize(context):
17 global init_price
18 init_price = None
19 # 获取沪深300股票
20 g.security = get_index_stocks('000300.SS')
21 #g.security = ['600570.SS']
22 # 设置我们要操作的股票池, 这里我们只操作一支股票
23 set_universe(g.security)
24
25 def handle_data(context, data):
26 # 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
27 # 从股票上市至今的所有历史数据,即增加获取的天数
28 close_price = get_history(2, '1d', field='close', security_list=g.security)
29 #如果是停牌不进行计算
30 for security in g.security:
31 if data[security].is_open >0:
32 global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
33 if init_price is None:
34 init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
35 EXPMA12_1 = init_price
36 EXPMA26_1 = init_price
37 DIF1 = init_price
38 DEA1 = init_price
39 # m用于计算平滑系数a=m/(N+1)
40 m = 2.0
41 #设定指数平滑基期数
42 N1 = 12
43 N2 = 26
44 N3 = 9
45 EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
46 # 取得当前价格
47 current_price = data[security].price
48 # 取得当前的现金
49 cash = context.portfolio.cash
50 # DIF、DEA均为正,DIF向上突破DEA,买入信号参考
51 if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
52 # 计算可以买多少只股票
53 number_of_shares = int(cash/current_price)
54 # 购买量大于0时,下单
55 if number_of_shares > 0:
56 # 以市单价买入股票,日回测时即是开盘价
57 order(security, +number_of_shares)
58 # 记录这次买入
59 log.info("Buying %s" % (security))
60 # DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
61 elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
62 # 卖出所有股票,使这只股票的最终持有量为0
63 order_target(security, 0)
64 # 记录这次卖出
65 log.info("Selling %s" % (security))
66 # 将今日的值赋给全局变量作为下一次前一日的值
67 DEA1 = DEA2
68 DIF1 = DIF2
69 EXPMA12_1 = EXPMA12_2
70 EXPMA26_1 = EXPMA26_2
同时也支持可转债T+0交易,笔者平时也主要是进行的可转债的交易。
软件与交易接口开通条件,
开通改券商后,存入资金50W放2周即可开通,开通后可取出。
本身券商的交易费率为股票万一免五,可转债百万分之二,非常厚道,因为不少面向机构的量化交易软件的佣金是万2.5的,笔者之前在国金渠道开的就是,坑的一比。所以笔者还是很推荐目前该券商的量化交易接口。
需要可以关注公众号获取开通链接: 查看全部
实际操作也好,几乎没见几个人教你怎么用程序下单,实盘交易。
稍微好点的easytrader使用的是模拟点击交易软件进行点击下单,基本无法判断下单后是否成交,也无法实时获取行情数据。别跟我说用tushare或者新浪这些接口数据,除非你做的是低频交易。
试试扫描一次全市场的行情看看用时多少?等得到满足条件了,再下单,此时价格可能已经在涨停板上封住了。
笔者使用的是券商提供的量化软件:Ptrade。
是恒生电子研发的提供给券商机构使用的程序化交易软件。提供策略回测,自动下单功能,使用的开发语言python。
策略回测与实盘交易
研究页面
研究页面,熟悉python jupyter notebook的朋友对这个界面肯定很熟悉。
研究的页面实际就运行你逐行输出调试程序,了解每个函数的具体使用,或者你策略的中途结果调试。
回测策略
实际代码需要在回测策略里面写,写完后确定无误,就可以放在仿真环境下真实运行。
如果你运行得到的结果很满意,那么就可以直接部署到实盘服务器上。
实盘服务器是在券商那边,不需要个人购买服务器,也不需要本地开着这个Ptrade,就是说不需要在个人电脑上一直开着跑,你的最终代码和程序是在券商服务器上部署与运行,除非有报错异常停止,不然在你不暂停或者停止的前提下,可以一直运行下去。
条件满足后下单
可视化量化
同时也提供一些常见的现成的量化策略,选中后只要鼠标点点点也能够自动化跑这些策略了,当然里面很多参数都可以用鼠标点点点修改。
接口文档也非常详细:
一些常见策略代码:
双均线策略
def initialize(context):
2 # 初始化此策略
3 # 设置我们要操作的股票池, 这里我们只操作一支股票
4 g.security = '600570.SS'
5 set_universe(g.security)
6 pass
7
8 #当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
9 def handle_data(context, data):
10 security = g.security
11
12 #得到十日历史价格
13 df = get_history(10, '1d', 'close', security, fq=None, include=False)
14
15 # 得到五日均线价格
16 ma5 = round(df['close'][-5:].mean(), 3)
17
18 # 得到十日均线价格
19 ma10 = round(df['close'][-10:].mean(), 3)
20
21 # 取得昨天收盘价
22 price = data[security]['close']
23
24 # 得到当前资金余额
25 cash = context.portfolio.cash
26
27 # 如果当前有余额,并且五日均线大于十日均线
28 if ma5 > ma10:
29 # 用所有 cash 买入股票
30 order_value(security, cash)
31 # 记录这次买入
32 log.info("Buying %s" % (security))
33
34 # 如果五日均线小于十日均线,并且目前有头寸
35 elif ma5 < ma10 and get_position(security).amount > 0:
36 # 全部卖出
37 order_target(security, 0)
38 # 记录这次卖出
39 log.info("Selling %s" % (security))
macd策略
指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值
def f_expma(N,m,EXPMA1,price):
2 a = m/(N+1)
3 EXPMA2 = a * price + (1 - a)*EXPMA1
4 return EXPMA2 #2为后一天值
5
6 #定义macd函数,输入平滑系数参数、前一日值,输出当日值
7 def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
8 EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
9 EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
10 DIF2 = EXPMA12_2 - EXPMA26_2
11 a = m/(N3+1)
12 DEA2 = a * DIF2 + (1 - a)*DEA1
13 BAR2=2*(DIF2-DEA2)
14 return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2
15
16 def initialize(context):
17 global init_price
18 init_price = None
19 # 获取沪深300股票
20 g.security = get_index_stocks('000300.SS')
21 #g.security = ['600570.SS']
22 # 设置我们要操作的股票池, 这里我们只操作一支股票
23 set_universe(g.security)
24
25 def handle_data(context, data):
26 # 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
27 # 从股票上市至今的所有历史数据,即增加获取的天数
28 close_price = get_history(2, '1d', field='close', security_list=g.security)
29 #如果是停牌不进行计算
30 for security in g.security:
31 if data[security].is_open >0:
32 global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
33 if init_price is None:
34 init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
35 EXPMA12_1 = init_price
36 EXPMA26_1 = init_price
37 DIF1 = init_price
38 DEA1 = init_price
39 # m用于计算平滑系数a=m/(N+1)
40 m = 2.0
41 #设定指数平滑基期数
42 N1 = 12
43 N2 = 26
44 N3 = 9
45 EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
46 # 取得当前价格
47 current_price = data[security].price
48 # 取得当前的现金
49 cash = context.portfolio.cash
50 # DIF、DEA均为正,DIF向上突破DEA,买入信号参考
51 if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
52 # 计算可以买多少只股票
53 number_of_shares = int(cash/current_price)
54 # 购买量大于0时,下单
55 if number_of_shares > 0:
56 # 以市单价买入股票,日回测时即是开盘价
57 order(security, +number_of_shares)
58 # 记录这次买入
59 log.info("Buying %s" % (security))
60 # DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
61 elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
62 # 卖出所有股票,使这只股票的最终持有量为0
63 order_target(security, 0)
64 # 记录这次卖出
65 log.info("Selling %s" % (security))
66 # 将今日的值赋给全局变量作为下一次前一日的值
67 DEA1 = DEA2
68 DIF1 = DIF2
69 EXPMA12_1 = EXPMA12_2
70 EXPMA26_1 = EXPMA26_2
同时也支持可转债T+0交易,笔者平时也主要是进行的可转债的交易。
软件与交易接口开通条件,
开通改券商后,存入资金50W放2周即可开通,开通后可取出。
本身券商的交易费率为股票万一免五,可转债百万分之二,非常厚道,因为不少面向机构的量化交易软件的佣金是万2.5的,笔者之前在国金渠道开的就是,坑的一比。所以笔者还是很推荐目前该券商的量化交易接口。
需要可以关注公众号获取开通链接:
python判断可转债是否强赎
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 2498 次浏览 • 2021-04-02 13:41
更新:
制作好了一个接口,用户可以直接调用。
数据来源与集思录。
获取 排除满足强赎天数剩余N天的可转债,排除强赎可转债。
比如:DAY=4 ,那么假设强赎满足天数为15天,那么返回市场上强赎强赎倒数天数大于4天的可转债,即返回小于或者等于11天以下的转债。把满足条件还差4天的转债排除掉了,当然,已经公告强赎的也会被排除。
import requests
URL = 'http://11.11.11.11/api/redeem/'
# DAY 强赎倒数剩余天数小于 DAY (4)天, 已经公告强赎的也是被排除的
DAY = 4
SIGN = '私信星主获取' # sign和以前一致
data = {'day': DAY,
'sign': SIGN}
r = requests.post(URL, data=data)
print(r.json())
具体用户可以关注知识星球: 查看全部
更新:
制作好了一个接口,用户可以直接调用。
数据来源与集思录。
获取 排除满足强赎天数剩余N天的可转债,排除强赎可转债。
比如:DAY=4 ,那么假设强赎满足天数为15天,那么返回市场上强赎强赎倒数天数大于4天的可转债,即返回小于或者等于11天以下的转债。把满足条件还差4天的转债排除掉了,当然,已经公告强赎的也会被排除。
import requests
URL = 'http://11.11.11.11/api/redeem/'
# DAY 强赎倒数剩余天数小于 DAY (4)天, 已经公告强赎的也是被排除的
DAY = 4
SIGN = '私信星主获取' # sign和以前一致
data = {'day': DAY,
'sign': SIGN}
r = requests.post(URL, data=data)
print(r.json())
具体用户可以关注知识星球:
可转债费率百分之二 全市场最便宜
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 3719 次浏览 • 2021-03-14 02:03
目前根据可转债新规 沪市十万分之4.1,深市十万分之4。支持同花顺交易
没有最低5元限制,也没有任何最低限制。
以前旧的费率可转债 沪市 百万分之二已经不复存在了。大部分券商把存量的用户也提高了。
需要的朋友欢迎扫码加我开户吧
备注:开户
非诚勿扰!
查看全部
目前根据可转债新规 沪市十万分之4.1,深市十万分之4。支持同花顺交易
没有最低5元限制,也没有任何最低限制。
以前旧的费率可转债 沪市 百万分之二已经不复存在了。大部分券商把存量的用户也提高了。
需要的朋友欢迎扫码加我开户吧
备注:开户
非诚勿扰!
可转债如何配债
股票 • 李魔佛 发表了文章 • 0 个评论 • 12687 次浏览 • 2019-03-29 16:24
1、如果你在登记日也就是12月11日收盘时还持有一定数量歌尔声学正股的话,那么你在配债日也就是12月12日就会看到账户里有相应数量的歌尔配债。注意这里的单位是张,如图,
由于我只有800股歌尔声学,因此获得了13张配债,1张对应100元,这时双击它,左侧出现了卖出菜单,价格和配债代码都自动填好了,输入13张或者点击全部,然后点“卖出”。(需要注意的是:有些券商这里是买入。)
2、不管是卖出还是买入,然后检查下委托情况和扣款情况,如下图:
可以看到我已经被扣款1300元,这样就算成功完成了这次的13张配债.
可转债低佣金开户,沪市转债费率百分之二,全市场最低。
有兴趣的朋友可以扫描开户:
查看全部
1、如果你在登记日也就是12月11日收盘时还持有一定数量歌尔声学正股的话,那么你在配债日也就是12月12日就会看到账户里有相应数量的歌尔配债。注意这里的单位是张,如图,
由于我只有800股歌尔声学,因此获得了13张配债,1张对应100元,这时双击它,左侧出现了卖出菜单,价格和配债代码都自动填好了,输入13张或者点击全部,然后点“卖出”。(需要注意的是:有些券商这里是买入。)
2、不管是卖出还是买入,然后检查下委托情况和扣款情况,如下图:
可以看到我已经被扣款1300元,这样就算成功完成了这次的13张配债.
可转债低佣金开户,沪市转债费率百分之二,全市场最低。
有兴趣的朋友可以扫描开户:
可转债价格分布堆叠图 绘制 可视化 python+pyecharts
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 7662 次浏览 • 2019-01-30 10:59
即使你有很多数据,可是,你无法直观地看到数据的总体趋势。使用可视化的绘图,可以帮助我们看到数据背后看不到的数据。 比如我已经有每一个可转债的价格,评级。数据如下:
点击查看大图
如果我用下面的图形就可以看出规律:
点击查看大图
横坐标是价格,纵坐标是落在该价格的可转债数量,不同颜色代表不同评级的可转债。
可以看到大部分AA-评级(浅橙色)的可转债价格都在100元以下,而AA(浅蓝色)的可转债价格分布较为平均,从90到110都有。而AA+和AAA的一般都在100以上。
那么如何使用代码实现呢?from setting import get_mysql_conn,get_engine
import pandas as pd
import pymongo
from pyecharts import Geo,Style,Map
engine = get_engine('db_stock',local='local')
# 堆叠图
from pyecharts import Bar
df = pd.read_sql('tb_bond_jisilu',con=engine)
result ={}
for name,grades in df.groupby('评级'):
# print(name,grades[['可转债名称','可转债价格']])
for each in grades['可转债价格']:
result.setdefault(name,)
result[name].append(each)
# 确定价格的范围
value = [str(i) for i in range(85,140)]
ret = [0]*len(value)
ret1 = dict(zip(value,ret))
ret_A_add = ret1.copy()
for item in result['A+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
ret_A_add[k]+=1
retAA_ = ret1.copy()
for item in result['']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_[k]+=1
retAA = ret1.copy()
for item in result['AA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA[k]+=1
retAA_add = ret1.copy()
for item in result['AA+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_add[k]+=1
retAAA = ret1.copy()
for item in result['AAA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAAA[k]+=1
bar = Bar('可转债价格分布')
bar.add('A+',value,list(ret_A_add.values()),is_stack=True,yaxis_max=11)
bar.add('',value,list(retAA_.values()),is_stack=True,yaxis_max=11)
bar.add('AA',value,list(retAA.values()),is_stack=True,yaxis_max=11)
bar.add('AA+',value,list(retAA_add.values()),is_stack=True,yaxis_max=11)
bar.add('AAA',value,list(retAAA.values()),is_stack=True,yaxis_max=11)
如果没有安装pyecharts,需要用pip安装即可。
原创文章
转载请注明出处:
http://30daydo.com/article/400
查看全部
即使你有很多数据,可是,你无法直观地看到数据的总体趋势。使用可视化的绘图,可以帮助我们看到数据背后看不到的数据。 比如我已经有每一个可转债的价格,评级。数据如下:
点击查看大图
如果我用下面的图形就可以看出规律:
点击查看大图
横坐标是价格,纵坐标是落在该价格的可转债数量,不同颜色代表不同评级的可转债。
可以看到大部分AA-评级(浅橙色)的可转债价格都在100元以下,而AA(浅蓝色)的可转债价格分布较为平均,从90到110都有。而AA+和AAA的一般都在100以上。
那么如何使用代码实现呢?
from setting import get_mysql_conn,get_engine
import pandas as pd
import pymongo
from pyecharts import Geo,Style,Map
engine = get_engine('db_stock',local='local')
# 堆叠图
from pyecharts import Bar
df = pd.read_sql('tb_bond_jisilu',con=engine)
result ={}
for name,grades in df.groupby('评级'):
# print(name,grades[['可转债名称','可转债价格']])
for each in grades['可转债价格']:
result.setdefault(name,)
result[name].append(each)
# 确定价格的范围
value = [str(i) for i in range(85,140)]
ret = [0]*len(value)
ret1 = dict(zip(value,ret))
ret_A_add = ret1.copy()
for item in result['A+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
ret_A_add[k]+=1
retAA_ = ret1.copy()
for item in result['']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_[k]+=1
retAA = ret1.copy()
for item in result['AA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA[k]+=1
retAA_add = ret1.copy()
for item in result['AA+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_add[k]+=1
retAAA = ret1.copy()
for item in result['AAA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAAA[k]+=1
bar = Bar('可转债价格分布')
bar.add('A+',value,list(ret_A_add.values()),is_stack=True,yaxis_max=11)
bar.add('',value,list(retAA_.values()),is_stack=True,yaxis_max=11)
bar.add('AA',value,list(retAA.values()),is_stack=True,yaxis_max=11)
bar.add('AA+',value,list(retAA_add.values()),is_stack=True,yaxis_max=11)
bar.add('AAA',value,list(retAAA.values()),is_stack=True,yaxis_max=11)
如果没有安装pyecharts,需要用pip安装即可。
原创文章
转载请注明出处:
http://30daydo.com/article/400
Ptrade/QMT 可转债转股操作 python代码
量化交易 • 李魔佛 发表了文章 • 0 个评论 • 2061 次浏览 • 2023-06-19 18:14
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def before_trading_start(context, data):
g.count = 0
def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
主要是上面的函数,
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return
if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False
passorder 里面的 80是 普通账户可转债转股
更多Ptrade,qmt知识,可以关注公众号
查看全部
而这个转股操作是要在交易时间,也就是盘中时间下一个债转股的命令,然后盘后交易所会更会你盘中下的转股指令,将对应的可转债转为对应的股票,这是,持仓里面的可转债会消失,变成该可转债对应的正股。
(当然这是在全部转股的前提下的情况,也有可能有部分人转债只转一部分,这样持仓里面还仍然会有部分可转债没有被转为股票)
那么在Ptrade和QMT里面,如何调用API接口进行可转债转股呢?
Ptrade:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
def before_trading_start(context, data):
g.count = 0
def handle_data(context, data):
if g.count == 0:
# 对持仓内的贝斯进行转股操作
debt_to_stock_order("123075.SZ", -1000)
g.count += 1
# 查看委托状态
log.info(get_orders())
g.count += 1
主要是上面的函数,
debt_to_stock_order 传入可转债代码和转股的数量,注意数量用加一个负号。
QMT可转债转股操作
#coding:gbk
c = True
account = '11111111' # 个人账户
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
#历史k线不应该发出实盘信号 跳过
return
if c:
passorder(80,1101,account,s,5,0,-100,'1',2,'tzbz',ContextInfo)
c=False
passorder 里面的 80是 普通账户可转债转股
更多Ptrade,qmt知识,可以关注公众号
宁稳可转债全表数据 - 历史数据更新至2023年06-18日
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1532 次浏览 • 2023-06-19 11:16
转债代码 转债名称 满足 发行日期 股票代码 股票名称 行业 子行业 转债价格 本息 涨跌 日内套利 股价 正股涨跌 剩余本息 转股价格 转股溢价率 转股价值 距离转股日 剩余年限 回售年限 剩余余额 成交额(百万) 转债换手率 余额/市值 余额/股本 股票市值(亿) P/B 税前收益率 税后收益率 税前回售收益 税后回售收益 回售价值 纯债价值 弹性 信用 折现率 老式双低 老式排名 新式双低 新式排名 热门度
点击查看大图
点击查看大图
数据会定期更新,目前更新到本文发文日期,2023-06-18
查看全部
qmt 可转债 双低(阈值)轮动 实盘代码
QMT • 李魔佛 发表了文章 • 0 个评论 • 2397 次浏览 • 2023-02-26 15:18
用已有的ptrade的代码,然后部分获取行情和交易接口按照qmt的接口文档(http://qmt.ptradeapi.com )重写,就给了一版。(对,很早以前就有一版ptrade的转债双低的了)
无论是qmt还是ptrade,都只是一个工具,用熟悉了,都无所哪个好哪个不好。
完整代码在个人星球。
觉得之前星球太便宜了,不仅给了代码,还部署了接口免费使用,通过接口获取可转债的实时数据,强赎天数,规模,溢价率,评级等等一系列数据。 而且随着时间的推移,里面积累的数据,代码也越来越多,感觉这样对前面进去并不断续费的星友有点公平,尽管以后他们续费都直接打折扣。所以还是按照一些大v运营的意见,逐年涨价策略。
越往后的朋友,因为前面积累的内容越多,因此价格也随之增长。
当然有能力可以自己写接口,部署,实盘,获取三方数据的大v,就没必要加了。
查看全部
用已有的ptrade的代码,然后部分获取行情和交易接口按照qmt的接口文档(http://qmt.ptradeapi.com )重写,就给了一版。(对,很早以前就有一版ptrade的转债双低的了)
无论是qmt还是ptrade,都只是一个工具,用熟悉了,都无所哪个好哪个不好。
完整代码在个人星球。
觉得之前星球太便宜了,不仅给了代码,还部署了接口免费使用,通过接口获取可转债的实时数据,强赎天数,规模,溢价率,评级等等一系列数据。 而且随着时间的推移,里面积累的数据,代码也越来越多,感觉这样对前面进去并不断续费的星友有点公平,尽管以后他们续费都直接打折扣。所以还是按照一些大v运营的意见,逐年涨价策略。
越往后的朋友,因为前面积累的内容越多,因此价格也随之增长。
当然有能力可以自己写接口,部署,实盘,获取三方数据的大v,就没必要加了。
宁稳网可转债弹性因子 python回测
可转债 • 李魔佛 发表了文章 • 0 个评论 • 2355 次浏览 • 2022-12-04 18:43
https://t.zsxq.com/08779XPlk
的数据和代码,修改原来的代码
df=df.sort_values('税前收益率',ascending=False)
改为
df=df.sort_values('弹性',ascending=False) # 倒序
df=df.sort_values('弹性',ascending=True) # 正序
还有这里:
df = pd.read_excel(full_path)
df['税前收益率'] = df['税前收益率'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','税前收益率']]
改为:
df['弹性'] = df['弹性'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','弹性']]
如果修改持有个数,天数,修改HOLD_NUM ,和FREQ 即可
得到下面的图:
点击查看大图
"1天,大到小" 收益率 -30%,最大回撤34%
"1天,小到大" 收益率15.74%,最大回撤10.43%
'5天,大到小' 收益率-25%,最大回撤30.71%
'5天,小到大' 收益率7.36%, 最大回撤10.47%
可见弹性按照单天弹性值排名,买入最大的10只,无论按1天还是5天轮动,今天收益率是亏损的;
可见弹性按照单天弹性值排名,买入最小的10只,无论按1天还是5天轮动,今天收益率是盈利的;
如果对数据有疑问,可以到公众号后台留言~ 查看全部
https://t.zsxq.com/08779XPlk
的数据和代码,修改原来的代码
df=df.sort_values('税前收益率',ascending=False)
改为
df=df.sort_values('弹性',ascending=False) # 倒序
df=df.sort_values('弹性',ascending=True) # 正序
还有这里:
df = pd.read_excel(full_path)
df['税前收益率'] = df['税前收益率'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','税前收益率']]
改为:
df['弹性'] = df['弹性'].map(convert_float)
df['转股价格']=df['转股价格'].astype(float)
df=df[['转债代码','转债名称','转债价格','弹性']]
如果修改持有个数,天数,修改HOLD_NUM ,和FREQ 即可
得到下面的图:
点击查看大图
"1天,大到小" 收益率 -30%,最大回撤34%
"1天,小到大" 收益率15.74%,最大回撤10.43%
'5天,大到小' 收益率-25%,最大回撤30.71%
'5天,小到大' 收益率7.36%, 最大回撤10.47%
可见弹性按照单天弹性值排名,买入最大的10只,无论按1天还是5天轮动,今天收益率是亏损的;
可见弹性按照单天弹性值排名,买入最小的10只,无论按1天还是5天轮动,今天收益率是盈利的;
如果对数据有疑问,可以到公众号后台留言~
可转债到期收益率因子回测 YTM回测 vs 双低 低溢价 低价策略
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1710 次浏览 • 2022-11-26 16:51
自从优矿转为收费后,基本就没有登录过了。现在的回测在本地进行了,宁稳网的可转债数据上有YTM这因子数据,所以这次使用宁稳网的数据回测。也不使用什么第三方框架了,直接手写回测,模拟交易过程。
逻辑就是按照交易日期,读取所有excel数据。保存到一个dataframe里面,然后按照日期对YTM排名。 选出排名N名的进行买入,掉出N名的进行卖出。
数据源
采用宁稳的全表数据,里面有YTM因子
YTM收益率曲线
本地使用python编写回测代码,纯手工,不使用第三方框架。 平时我也多次力荐大家手写,别依赖那些第三方框架,什么vnpy,backtrade,一是特别难用,数据要适配,二是不好调试,除非你对它们的源码特别熟悉。本回测代码和宁稳数据放在个人知识星球,大部分人其实只关心回测结果就够了。
下图是2022年1月1日至11月25日的回测数据。持有10个标的,红色的是1天调仓,蓝色的是5天调仓
5天轮动,2022年的收益率为4.29%,最大回撤6.98% 。
1天轮动,2022年的收益率为9.33%,最大回撤5.32% 。
1天轮动的整体收益率要比5天轮动的高5个点,并且最大回撤也小一点。
持仓日志
从持仓以及调仓日志来看,买入的大部分是低价转债,且部分也是之前有瑕疵,爆过雷的转债。
高YTM轮动 vs 双低,低溢价,低价
接着对比一下几个常规的转债策略,双低,低溢价,低价。
回测条件相同,起始时间2022-01-01,结束时间2022-11-25。
持有10只,5天轮动。
在今年的可转债偏弱的行情下,高YTM轮动在这4个策略里面的收益率是最高的。
低溢价一如既然的高波动,一会ICU,一会蹦迪。但笔者觉得跌到前期最大回撤的位置,低溢价可以考虑介入的。
YTM和低价格的今年回测收益率接近,YTM高了一个点左右,最大回撤接近。 而低溢价还在回撤的途中,目前今年的收益率为-25%,如果轮动频率高一些,低溢价收益率会高一些,强赎的转债基本会被轮入低溢价标的,因为最近半年强赎后的转债像进入了死亡螺旋一样,正股转债一起跌;因此排除强赎转债会对低溢价收益率有不少的提升。
完整代码以及数据请开通星球查收。
查看全部
自从优矿转为收费后,基本就没有登录过了。现在的回测在本地进行了,宁稳网的可转债数据上有YTM这因子数据,所以这次使用宁稳网的数据回测。也不使用什么第三方框架了,直接手写回测,模拟交易过程。
逻辑就是按照交易日期,读取所有excel数据。保存到一个dataframe里面,然后按照日期对YTM排名。 选出排名N名的进行买入,掉出N名的进行卖出。
数据源
采用宁稳的全表数据,里面有YTM因子
YTM收益率曲线
本地使用python编写回测代码,纯手工,不使用第三方框架。 平时我也多次力荐大家手写,别依赖那些第三方框架,什么vnpy,backtrade,一是特别难用,数据要适配,二是不好调试,除非你对它们的源码特别熟悉。本回测代码和宁稳数据放在个人知识星球,大部分人其实只关心回测结果就够了。
下图是2022年1月1日至11月25日的回测数据。持有10个标的,红色的是1天调仓,蓝色的是5天调仓
5天轮动,2022年的收益率为4.29%,最大回撤6.98% 。
1天轮动,2022年的收益率为9.33%,最大回撤5.32% 。
1天轮动的整体收益率要比5天轮动的高5个点,并且最大回撤也小一点。
持仓日志
从持仓以及调仓日志来看,买入的大部分是低价转债,且部分也是之前有瑕疵,爆过雷的转债。
高YTM轮动 vs 双低,低溢价,低价
接着对比一下几个常规的转债策略,双低,低溢价,低价。
回测条件相同,起始时间2022-01-01,结束时间2022-11-25。
持有10只,5天轮动。
在今年的可转债偏弱的行情下,高YTM轮动在这4个策略里面的收益率是最高的。
低溢价一如既然的高波动,一会ICU,一会蹦迪。但笔者觉得跌到前期最大回撤的位置,低溢价可以考虑介入的。
YTM和低价格的今年回测收益率接近,YTM高了一个点左右,最大回撤接近。 而低溢价还在回撤的途中,目前今年的收益率为-25%,如果轮动频率高一些,低溢价收益率会高一些,强赎的转债基本会被轮入低溢价标的,因为最近半年强赎后的转债像进入了死亡螺旋一样,正股转债一起跌;因此排除强赎转债会对低溢价收益率有不少的提升。
完整代码以及数据请开通星球查收。
可转债 最新的不下修转股价 名单 持续更新
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1444 次浏览 • 2022-09-28 11:24
数据更新至2022年9月24日。
如果可转债公布了某个时间段内的不下修转股价,在溢价率很高的情况下,那么在该时间段内,其溢价率回归的办法只剩拉正股了,而在这上涨阶段中,站在概率面,持有转债的涨幅是会大幅低于正股的。
现在市场的情况也是这样,如果可转债公布不下修,第二天的开盘会以低开反映出来。
数据来源:巨潮。
文末附获取原始数据方法。
点击查看大图
点击查看大图
点击查看大图
链接: https://pan.baidu.com/s/1TVAR3nftALTWR0VTnagVhg 提取码: 5wde
更多公众号文章代码与数据,可输入:帮助
查看全部
数据更新至2022年9月24日。
如果可转债公布了某个时间段内的不下修转股价,在溢价率很高的情况下,那么在该时间段内,其溢价率回归的办法只剩拉正股了,而在这上涨阶段中,站在概率面,持有转债的涨幅是会大幅低于正股的。
现在市场的情况也是这样,如果可转债公布不下修,第二天的开盘会以低开反映出来。
数据来源:巨潮。
文末附获取原始数据方法。
点击查看大图
点击查看大图
点击查看大图
链接: https://pan.baidu.com/s/1TVAR3nftALTWR0VTnagVhg 提取码: 5wde
更多公众号文章代码与数据,可输入:帮助
可转债新规后,可转债费率最低是多少?什么券商可以开
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 1538 次浏览 • 2022-09-14 17:00
另外,此次沪市还调整了可转债交易及其约定购回式债券交易经手费收费标准,由原来按成交金额的0.0001%双向收取、单笔最高不超过100元,调整为按成交金额的0.004%双向收取。
调整后,目前市场上 券商 可转债最低的费率是 沪市 十万分之4.1 , 深圳十万分之4。 然后就没有其他的费用了。
需要开户的可以扫码咨询:
备注:可转债
查看全部
可转债多因子回测 优矿代码
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 2500 次浏览 • 2022-08-06 18:00
实际运用里面,可以加入很多很多因子,比如正股涨跌幅,正股波动率,转债到期时间,正股ROE等等多大几十个因子。
之前写了一个多因子回测的优矿python代码,用户可以自己修改参数,
比如下面的正股波动率因子,Bond_Volatility_ENABLE = True
Bond_Volatility_DAYS = 30
TOP_RIPPLE = 50
Bond_Volatility_LOG_ENABLE = True # 波动率日志开关
Bond_Volatility_ENABLE = True 设为True,就是回测过程加入这个因子,设为False就忽略这个因子。
下面的
Bond_Volatility_DAYS 为N天内的正股波动率,一般设置30天,20天内就够了,因为一年之前的即使波动很大,那对当前转债的影响也很小。
TOP_RIPPLE 选择波动率最大的前面N只转债
举个例子,下面转债是根据其对应正股的30天里的波动率选出来的。(当前是8月5日,也就是7月5日到8月5日之间的数据)。
计算波动率具体代码如下;
每个因子写成一个类。
这样可以不用修改主代码,就可以无限地添加,修改因子。# 基类
class ConditionFilter:
def filters(self, *args, **kwargs):
if self.enable:
return self.fun(*args, **kwargs)
else:
return True
def fun(self, *args, **kwargs):
# 继承的实现这个函数
raise NotImplemented
上面是部分过滤因子,也就是不满足的都会被移除。 比如规模大于10亿的会移除。
然后得到的结果,进行因子评分。 # 权重 溢价率、转债价格、正股N天涨幅,正股ROE
weights = {'溢价率': 0, '转债价格': 1, '正股N天涨幅': 0, '正股ROE': 0, '规模': 0}
每个权重赋予一个权重分最高是1,最低是0,如果你想回测 低溢价率 策略,只需要把其他因子的权重全部设置为0,溢价率设置为1即可。双底的话就是 溢价率和价格各为0.5 就可以了。
设置好参数后,设置你要回测的时间,持仓周期,持有个数等可调参数。
稍等片刻就会有结果了。因子越多,运行时间会增加。一般几分钟就可以得到几年来的回测结果。
中途可以查看日志
完整代码以及运行流程可到知识星球咨询了解。
欢迎关注公众号 查看全部
实际运用里面,可以加入很多很多因子,比如正股涨跌幅,正股波动率,转债到期时间,正股ROE等等多大几十个因子。
之前写了一个多因子回测的优矿python代码,用户可以自己修改参数,
比如下面的正股波动率因子,
Bond_Volatility_ENABLE = True
Bond_Volatility_DAYS = 30
TOP_RIPPLE = 50
Bond_Volatility_LOG_ENABLE = True # 波动率日志开关
Bond_Volatility_ENABLE = True 设为True,就是回测过程加入这个因子,设为False就忽略这个因子。
下面的
Bond_Volatility_DAYS 为N天内的正股波动率,一般设置30天,20天内就够了,因为一年之前的即使波动很大,那对当前转债的影响也很小。
TOP_RIPPLE 选择波动率最大的前面N只转债
举个例子,下面转债是根据其对应正股的30天里的波动率选出来的。(当前是8月5日,也就是7月5日到8月5日之间的数据)。
计算波动率具体代码如下;
每个因子写成一个类。
这样可以不用修改主代码,就可以无限地添加,修改因子。
# 基类
class ConditionFilter:
def filters(self, *args, **kwargs):
if self.enable:
return self.fun(*args, **kwargs)
else:
return True
def fun(self, *args, **kwargs):
# 继承的实现这个函数
raise NotImplemented
上面是部分过滤因子,也就是不满足的都会被移除。 比如规模大于10亿的会移除。
然后得到的结果,进行因子评分。
# 权重 溢价率、转债价格、正股N天涨幅,正股ROE
weights = {'溢价率': 0, '转债价格': 1, '正股N天涨幅': 0, '正股ROE': 0, '规模': 0}
每个权重赋予一个权重分最高是1,最低是0,如果你想回测 低溢价率 策略,只需要把其他因子的权重全部设置为0,溢价率设置为1即可。双底的话就是 溢价率和价格各为0.5 就可以了。
设置好参数后,设置你要回测的时间,持仓周期,持有个数等可调参数。
稍等片刻就会有结果了。因子越多,运行时间会增加。一般几分钟就可以得到几年来的回测结果。
中途可以查看日志
完整代码以及运行流程可到知识星球咨询了解。
欢迎关注公众号
获取可转债历史分时tick数据 【python】
可转债 • 李魔佛 发表了文章 • 0 个评论 • 3199 次浏览 • 2022-06-25 12:29
对于想做日内回测的朋友,是一件很痛苦的事情。
那么,接下来,本文结束一种通过第三方平台的数据,来把可转债的分时tick数据获取下来,并保存到本地数据库。
2022-07-05 更新:
如果直接拿历史数据,可以拿到1分钟级别的数据,如上图所示。
如果要拿秒级别的,需要实时采集。
笔者使用sqlite做为内存缓存,盘后统一入到mysql中。
如果盘中每隔3秒使用mysql储存,显然会造成不必要的io阻塞(开个线程存数据也是一个方案)。
使用sqlite的时候,设置为memeory模式,速度比存文件要快很多倍。
待续 查看全部
对于想做日内回测的朋友,是一件很痛苦的事情。
那么,接下来,本文结束一种通过第三方平台的数据,来把可转债的分时tick数据获取下来,并保存到本地数据库。
2022-07-05 更新:
如果直接拿历史数据,可以拿到1分钟级别的数据,如上图所示。
如果要拿秒级别的,需要实时采集。
笔者使用sqlite做为内存缓存,盘后统一入到mysql中。
如果盘中每隔3秒使用mysql储存,显然会造成不必要的io阻塞(开个线程存数据也是一个方案)。
使用sqlite的时候,设置为memeory模式,速度比存文件要快很多倍。
待续
可转债交易新规什么时候实施,利好股市
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 1694 次浏览 • 2022-06-18 15:23
昨天才看到可转债投资新规 今日和券商确认就已落地实施了(6.18日前开户的不受影响)来势汹汹,没有任何时间缓冲
但如果已满2年交易年限的老铁们,现在还有如下最低可转债费率(新规),需要的赶紧,
即使可转债降温,那又将利好股票,需要股票万一免五的也赶紧,不然又不知道哪天新规突然杀到,再想要也没有了
广发可转债:沪十万分之4.1,深十万分之4.1
银河股票:万一免五 ;可转债:沪十万分之5,深十万分之5
需要开户请扫码联系,备注:开户
查看全部
上交所发布关于可转换公司债券适当性管理相关事项的通知,个人投资者参与向不特定对象发行的可转债申购、交易,应当同时符合下列条件:申请权限开通前20个交易日证券账户及资金账户内的资产日均不低于人民币10万元(不包括该投资者通过融资融券融入的资金和证券);参与证券交易24个月以上。
昨天才看到可转债投资新规 今日和券商确认就已落地实施了(6.18日前开户的不受影响)来势汹汹,没有任何时间缓冲
但如果已满2年交易年限的老铁们,现在还有如下最低可转债费率(新规),需要的赶紧,
即使可转债降温,那又将利好股票,需要股票万一免五的也赶紧,不然又不知道哪天新规突然杀到,再想要也没有了
广发可转债:沪十万分之4.1,深十万分之4.1
银河股票:万一免五 ;可转债:沪十万分之5,深十万分之5
需要开户请扫码联系,备注:开户
强赎日期计数 excel文件
可转债 • 李魔佛 发表了文章 • 0 个评论 • 1725 次浏览 • 2022-06-04 22:54
代码 名称 当前满足天数 强赎目标数 周期 以公告
113568 新春转债 已公告强赎
127043 川恒转债 暂不强赎
123086 海兰转债 暂不强赎
113548 石英转债 暂不强赎
128107 交科转债 已公告强赎
110071 湖盐转债 12 15 30
128111 中矿转债 暂不强赎
127013 创维转债 14 15 30
123092 天壕转债 暂不强赎
128046 利尔转债 19 20 30
127027 靖远转债 暂不强赎
113541 荣晟转债 公告要强赎
123085 万顺转2 暂不强赎
123083 朗新转债 12 15 30
128128 齐翔转2 暂不强赎
128106 华统转债 暂不强赎
113537 文灿转债 暂不强赎
128095 恩捷转债 已满足强赎条件
127007 湖广转债 暂不强赎
123012 万顺转债 暂不强赎
123057 美联转债 暂不强赎
113585 寿仙转债 暂不强赎
110061 川投转债 暂不强赎
113626 伯特转债 暂不强赎
113025 明泰转债 暂不强赎
123078 飞凯转债 暂不强赎
113567 君禾转债 暂不强赎
128017 金禾转债 暂不强赎
128040 华通转债 暂不强赎
128029 太阳转债 暂不强赎
123073 同和转债 暂不强赎
110055 伊力转债 暂不强赎
113525 台华转债 暂不强赎
123060 苏试转债 暂不强赎
127038 国微转债 暂不强赎
123046 天铁转债 暂不强赎
123098 一品转债 暂不强赎
110074 精达转债 暂不强赎
123114 三角转债 暂不强赎
113051 节能转债 暂不强赎
128140 润建转债 暂不强赎
123071 天能转债 暂不强赎
113027 华钰转债 暂不强赎
128091 新天转债 暂不强赎
128085 鸿达转债 暂不强赎
113620 傲农转债 暂不强赎
123052 飞鹿转债 暂不强赎
118000 嘉元转债 暂不强赎
128082 华锋转债 暂不强赎
128109 楚江转债 暂不强赎
113016 小康转债 暂不强赎
123027 蓝晓转债 暂不强赎
128137 洁美转债 暂不强赎
128101 联创转债 暂不强赎
123031 晶瑞转债 暂不强赎
128078 太极转债 暂不强赎
128030 天康转债 暂不强赎
123034 通光转债 暂不强赎
excel原文件:
http://xximg.30daydo.com/webupload/2022-06-04-redeem-info.xlsx
或者关注公众号:可转债量化分析
后台回复:
强赎20220604 查看全部
代码 名称 当前满足天数 强赎目标数 周期 以公告
113568 新春转债 已公告强赎
127043 川恒转债 暂不强赎
123086 海兰转债 暂不强赎
113548 石英转债 暂不强赎
128107 交科转债 已公告强赎
110071 湖盐转债 12 15 30
128111 中矿转债 暂不强赎
127013 创维转债 14 15 30
123092 天壕转债 暂不强赎
128046 利尔转债 19 20 30
127027 靖远转债 暂不强赎
113541 荣晟转债 公告要强赎
123085 万顺转2 暂不强赎
123083 朗新转债 12 15 30
128128 齐翔转2 暂不强赎
128106 华统转债 暂不强赎
113537 文灿转债 暂不强赎
128095 恩捷转债 已满足强赎条件
127007 湖广转债 暂不强赎
123012 万顺转债 暂不强赎
123057 美联转债 暂不强赎
113585 寿仙转债 暂不强赎
110061 川投转债 暂不强赎
113626 伯特转债 暂不强赎
113025 明泰转债 暂不强赎
123078 飞凯转债 暂不强赎
113567 君禾转债 暂不强赎
128017 金禾转债 暂不强赎
128040 华通转债 暂不强赎
128029 太阳转债 暂不强赎
123073 同和转债 暂不强赎
110055 伊力转债 暂不强赎
113525 台华转债 暂不强赎
123060 苏试转债 暂不强赎
127038 国微转债 暂不强赎
123046 天铁转债 暂不强赎
123098 一品转债 暂不强赎
110074 精达转债 暂不强赎
123114 三角转债 暂不强赎
113051 节能转债 暂不强赎
128140 润建转债 暂不强赎
123071 天能转债 暂不强赎
113027 华钰转债 暂不强赎
128091 新天转债 暂不强赎
128085 鸿达转债 暂不强赎
113620 傲农转债 暂不强赎
123052 飞鹿转债 暂不强赎
118000 嘉元转债 暂不强赎
128082 华锋转债 暂不强赎
128109 楚江转债 暂不强赎
113016 小康转债 暂不强赎
123027 蓝晓转债 暂不强赎
128137 洁美转债 暂不强赎
128101 联创转债 暂不强赎
123031 晶瑞转债 暂不强赎
128078 太极转债 暂不强赎
128030 天康转债 暂不强赎
123034 通光转债 暂不强赎
excel原文件:
http://xximg.30daydo.com/webupload/2022-06-04-redeem-info.xlsx
或者关注公众号:可转债量化分析
后台回复:
强赎20220604
这种拿别人代码和数据改点东西 还弄错结果,挺搞笑的
股票 • 绫波丽 发表了文章 • 0 个评论 • 2555 次浏览 • 2021-08-31 23:25
这个ylxwyj纯属一个装逼犯。 简单的道理,洋洋洒洒写一大篇八股文,什么alpha,信息比率,对,很专业。 实际对文中的结论有任何作用吗? 提出来就是装逼用的。
更为搞笑的是自己结论弄错了,还不谦虚。
这种人就像项目组里面,把你代码剽窃了,然后去外面跟别人说一通大道理。 然后最后发现无法自圆其说。 然后他说,哦 是xxx的代码有问题,是xxx的数据有问题。
查看全部
这个ylxwyj纯属一个装逼犯。 简单的道理,洋洋洒洒写一大篇八股文,什么alpha,信息比率,对,很专业。 实际对文中的结论有任何作用吗? 提出来就是装逼用的。
更为搞笑的是自己结论弄错了,还不谦虚。
这种人就像项目组里面,把你代码剽窃了,然后去外面跟别人说一通大道理。 然后最后发现无法自圆其说。 然后他说,哦 是xxx的代码有问题,是xxx的数据有问题。
敬畏市场 市场里没有永恒的圣杯
可转债 • 绫波丽 发表了文章 • 0 个评论 • 2375 次浏览 • 2021-08-27 19:59
实际上发力时间是在6月中旬
实际上发力时间是在6月中旬
通达信无法导入或者监控到可转债的代码
股票 • 绫波丽 发表了文章 • 0 个评论 • 2309 次浏览 • 2021-08-06 13:02
原来本身就不支持导入可转债代码
只能导入正股代码
原来本身就不支持导入可转债代码
只能导入正股代码
可转债转股套利 收益率统计 只做大于-5%折价率以上
股票 • 李魔佛 发表了文章 • 0 个评论 • 1949 次浏览 • 2021-07-19 00:11
平均收益是 0.014%
总收益率是0.225%
量化交易接口python A股
股票 • 绫波丽 发表了文章 • 0 个评论 • 7549 次浏览 • 2021-07-01 11:22
实际操作也好,几乎没见几个人教你怎么用程序下单,实盘交易。
稍微好点的easytrader使用的是模拟点击交易软件进行点击下单,基本无法判断下单后是否成交,也无法实时获取行情数据。别跟我说用tushare或者新浪这些接口数据,除非你做的是低频交易。
试试扫描一次全市场的行情看看用时多少?等得到满足条件了,再下单,此时价格可能已经在涨停板上封住了。
笔者使用的是券商提供的量化软件:Ptrade。
是恒生电子研发的提供给券商机构使用的程序化交易软件。提供策略回测,自动下单功能,使用的开发语言python。
策略回测与实盘交易
研究页面
研究页面,熟悉python jupyter notebook的朋友对这个界面肯定很熟悉。
研究的页面实际就运行你逐行输出调试程序,了解每个函数的具体使用,或者你策略的中途结果调试。
回测策略
实际代码需要在回测策略里面写,写完后确定无误,就可以放在仿真环境下真实运行。
如果你运行得到的结果很满意,那么就可以直接部署到实盘服务器上。
实盘服务器是在券商那边,不需要个人购买服务器,也不需要本地开着这个Ptrade,就是说不需要在个人电脑上一直开着跑,你的最终代码和程序是在券商服务器上部署与运行,除非有报错异常停止,不然在你不暂停或者停止的前提下,可以一直运行下去。
条件满足后下单
可视化量化
同时也提供一些常见的现成的量化策略,选中后只要鼠标点点点也能够自动化跑这些策略了,当然里面很多参数都可以用鼠标点点点修改。
接口文档也非常详细:
一些常见策略代码:
双均线策略 def initialize(context):
2 # 初始化此策略
3 # 设置我们要操作的股票池, 这里我们只操作一支股票
4 g.security = '600570.SS'
5 set_universe(g.security)
6 pass
7
8 #当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
9 def handle_data(context, data):
10 security = g.security
11
12 #得到十日历史价格
13 df = get_history(10, '1d', 'close', security, fq=None, include=False)
14
15 # 得到五日均线价格
16 ma5 = round(df['close'][-5:].mean(), 3)
17
18 # 得到十日均线价格
19 ma10 = round(df['close'][-10:].mean(), 3)
20
21 # 取得昨天收盘价
22 price = data[security]['close']
23
24 # 得到当前资金余额
25 cash = context.portfolio.cash
26
27 # 如果当前有余额,并且五日均线大于十日均线
28 if ma5 > ma10:
29 # 用所有 cash 买入股票
30 order_value(security, cash)
31 # 记录这次买入
32 log.info("Buying %s" % (security))
33
34 # 如果五日均线小于十日均线,并且目前有头寸
35 elif ma5 < ma10 and get_position(security).amount > 0:
36 # 全部卖出
37 order_target(security, 0)
38 # 记录这次卖出
39 log.info("Selling %s" % (security))
macd策略
指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值 def f_expma(N,m,EXPMA1,price):
2 a = m/(N+1)
3 EXPMA2 = a * price + (1 - a)*EXPMA1
4 return EXPMA2 #2为后一天值
5
6 #定义macd函数,输入平滑系数参数、前一日值,输出当日值
7 def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
8 EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
9 EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
10 DIF2 = EXPMA12_2 - EXPMA26_2
11 a = m/(N3+1)
12 DEA2 = a * DIF2 + (1 - a)*DEA1
13 BAR2=2*(DIF2-DEA2)
14 return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2
15
16 def initialize(context):
17 global init_price
18 init_price = None
19 # 获取沪深300股票
20 g.security = get_index_stocks('000300.SS')
21 #g.security = ['600570.SS']
22 # 设置我们要操作的股票池, 这里我们只操作一支股票
23 set_universe(g.security)
24
25 def handle_data(context, data):
26 # 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
27 # 从股票上市至今的所有历史数据,即增加获取的天数
28 close_price = get_history(2, '1d', field='close', security_list=g.security)
29 #如果是停牌不进行计算
30 for security in g.security:
31 if data[security].is_open >0:
32 global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
33 if init_price is None:
34 init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
35 EXPMA12_1 = init_price
36 EXPMA26_1 = init_price
37 DIF1 = init_price
38 DEA1 = init_price
39 # m用于计算平滑系数a=m/(N+1)
40 m = 2.0
41 #设定指数平滑基期数
42 N1 = 12
43 N2 = 26
44 N3 = 9
45 EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
46 # 取得当前价格
47 current_price = data[security].price
48 # 取得当前的现金
49 cash = context.portfolio.cash
50 # DIF、DEA均为正,DIF向上突破DEA,买入信号参考
51 if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
52 # 计算可以买多少只股票
53 number_of_shares = int(cash/current_price)
54 # 购买量大于0时,下单
55 if number_of_shares > 0:
56 # 以市单价买入股票,日回测时即是开盘价
57 order(security, +number_of_shares)
58 # 记录这次买入
59 log.info("Buying %s" % (security))
60 # DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
61 elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
62 # 卖出所有股票,使这只股票的最终持有量为0
63 order_target(security, 0)
64 # 记录这次卖出
65 log.info("Selling %s" % (security))
66 # 将今日的值赋给全局变量作为下一次前一日的值
67 DEA1 = DEA2
68 DIF1 = DIF2
69 EXPMA12_1 = EXPMA12_2
70 EXPMA26_1 = EXPMA26_2
同时也支持可转债T+0交易,笔者平时也主要是进行的可转债的交易。
软件与交易接口开通条件,
开通改券商后,存入资金50W放2周即可开通,开通后可取出。
本身券商的交易费率为股票万一免五,可转债百万分之二,非常厚道,因为不少面向机构的量化交易软件的佣金是万2.5的,笔者之前在国金渠道开的就是,坑的一比。所以笔者还是很推荐目前该券商的量化交易接口。
需要可以关注公众号获取开通链接: 查看全部
实际操作也好,几乎没见几个人教你怎么用程序下单,实盘交易。
稍微好点的easytrader使用的是模拟点击交易软件进行点击下单,基本无法判断下单后是否成交,也无法实时获取行情数据。别跟我说用tushare或者新浪这些接口数据,除非你做的是低频交易。
试试扫描一次全市场的行情看看用时多少?等得到满足条件了,再下单,此时价格可能已经在涨停板上封住了。
笔者使用的是券商提供的量化软件:Ptrade。
是恒生电子研发的提供给券商机构使用的程序化交易软件。提供策略回测,自动下单功能,使用的开发语言python。
策略回测与实盘交易
研究页面
研究页面,熟悉python jupyter notebook的朋友对这个界面肯定很熟悉。
研究的页面实际就运行你逐行输出调试程序,了解每个函数的具体使用,或者你策略的中途结果调试。
回测策略
实际代码需要在回测策略里面写,写完后确定无误,就可以放在仿真环境下真实运行。
如果你运行得到的结果很满意,那么就可以直接部署到实盘服务器上。
实盘服务器是在券商那边,不需要个人购买服务器,也不需要本地开着这个Ptrade,就是说不需要在个人电脑上一直开着跑,你的最终代码和程序是在券商服务器上部署与运行,除非有报错异常停止,不然在你不暂停或者停止的前提下,可以一直运行下去。
条件满足后下单
可视化量化
同时也提供一些常见的现成的量化策略,选中后只要鼠标点点点也能够自动化跑这些策略了,当然里面很多参数都可以用鼠标点点点修改。
接口文档也非常详细:
一些常见策略代码:
双均线策略
def initialize(context):
2 # 初始化此策略
3 # 设置我们要操作的股票池, 这里我们只操作一支股票
4 g.security = '600570.SS'
5 set_universe(g.security)
6 pass
7
8 #当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
9 def handle_data(context, data):
10 security = g.security
11
12 #得到十日历史价格
13 df = get_history(10, '1d', 'close', security, fq=None, include=False)
14
15 # 得到五日均线价格
16 ma5 = round(df['close'][-5:].mean(), 3)
17
18 # 得到十日均线价格
19 ma10 = round(df['close'][-10:].mean(), 3)
20
21 # 取得昨天收盘价
22 price = data[security]['close']
23
24 # 得到当前资金余额
25 cash = context.portfolio.cash
26
27 # 如果当前有余额,并且五日均线大于十日均线
28 if ma5 > ma10:
29 # 用所有 cash 买入股票
30 order_value(security, cash)
31 # 记录这次买入
32 log.info("Buying %s" % (security))
33
34 # 如果五日均线小于十日均线,并且目前有头寸
35 elif ma5 < ma10 and get_position(security).amount > 0:
36 # 全部卖出
37 order_target(security, 0)
38 # 记录这次卖出
39 log.info("Selling %s" % (security))
macd策略
指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值
def f_expma(N,m,EXPMA1,price):
2 a = m/(N+1)
3 EXPMA2 = a * price + (1 - a)*EXPMA1
4 return EXPMA2 #2为后一天值
5
6 #定义macd函数,输入平滑系数参数、前一日值,输出当日值
7 def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
8 EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
9 EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
10 DIF2 = EXPMA12_2 - EXPMA26_2
11 a = m/(N3+1)
12 DEA2 = a * DIF2 + (1 - a)*DEA1
13 BAR2=2*(DIF2-DEA2)
14 return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2
15
16 def initialize(context):
17 global init_price
18 init_price = None
19 # 获取沪深300股票
20 g.security = get_index_stocks('000300.SS')
21 #g.security = ['600570.SS']
22 # 设置我们要操作的股票池, 这里我们只操作一支股票
23 set_universe(g.security)
24
25 def handle_data(context, data):
26 # 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
27 # 从股票上市至今的所有历史数据,即增加获取的天数
28 close_price = get_history(2, '1d', field='close', security_list=g.security)
29 #如果是停牌不进行计算
30 for security in g.security:
31 if data[security].is_open >0:
32 global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
33 if init_price is None:
34 init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
35 EXPMA12_1 = init_price
36 EXPMA26_1 = init_price
37 DIF1 = init_price
38 DEA1 = init_price
39 # m用于计算平滑系数a=m/(N+1)
40 m = 2.0
41 #设定指数平滑基期数
42 N1 = 12
43 N2 = 26
44 N3 = 9
45 EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
46 # 取得当前价格
47 current_price = data[security].price
48 # 取得当前的现金
49 cash = context.portfolio.cash
50 # DIF、DEA均为正,DIF向上突破DEA,买入信号参考
51 if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
52 # 计算可以买多少只股票
53 number_of_shares = int(cash/current_price)
54 # 购买量大于0时,下单
55 if number_of_shares > 0:
56 # 以市单价买入股票,日回测时即是开盘价
57 order(security, +number_of_shares)
58 # 记录这次买入
59 log.info("Buying %s" % (security))
60 # DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
61 elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
62 # 卖出所有股票,使这只股票的最终持有量为0
63 order_target(security, 0)
64 # 记录这次卖出
65 log.info("Selling %s" % (security))
66 # 将今日的值赋给全局变量作为下一次前一日的值
67 DEA1 = DEA2
68 DIF1 = DIF2
69 EXPMA12_1 = EXPMA12_2
70 EXPMA26_1 = EXPMA26_2
同时也支持可转债T+0交易,笔者平时也主要是进行的可转债的交易。
软件与交易接口开通条件,
开通改券商后,存入资金50W放2周即可开通,开通后可取出。
本身券商的交易费率为股票万一免五,可转债百万分之二,非常厚道,因为不少面向机构的量化交易软件的佣金是万2.5的,笔者之前在国金渠道开的就是,坑的一比。所以笔者还是很推荐目前该券商的量化交易接口。
需要可以关注公众号获取开通链接:
高考结束有什么兼职适合没有经验的高中生
闲聊 • 绫波丽 发表了文章 • 0 个评论 • 1827 次浏览 • 2021-06-28 17:09
1. 做写手写软文。一个是付出收益比太低。并且市面上有很多骗子,写完稿是不给费用的。
2. 淘宝客推广商品。现在线上推广已经成了红海。如果你到处在论坛,贴吧之类的发广告,效果很差的。基本没有出路。为啥? 因为已经有不少平台级别的推广,比如什么值得买,还有很多程序员自己写的微信小程序,做推广下单返佣的。 人家的流量比新起的个人开始做的要大很多。
3. 麦当劳,肯德基类的兼职。 这个完全是出卖个人的时间。不过对于一些内向的同学,我倒是建议他们可以去尝试一下,锻炼你们的胆量。
建议你们去做的:
1. 直播领域的探索。 目前这个行业,颜值就是流量。对于很高年少青春的同学来说,这个是最大的资本。 并且,成本不大,就一个手机即可。人人皆可做。
2. 证券市场上的无风险套利: 比如可转债打新,或者港股,美股打新。不过后者会有一定破发风险。并且入金有一定的门槛。
对于可转债打新,你只需要开通一个证券账户,然后就可以每天都打,如果当天有新债可打。 打中后才给钱。并且这个转债,一般情况下,破发的概率比较小,即使破发了,后面也会来到100元以上。这个可以放心。历史上没有哪一只转债没有上过100元。
不过对于打新族来说,正确的做法就是上市就卖。不然就没有剩余资金来已经下一只转债了。
目前如果需要开户,可以联系wx:
可转债交易费率目前全市场最低,达到百万分之二,对于学生而言,每一分都值得节约。百万分之二的费率,意味着一百万的交易,收费只有2元,而1万元的交易额,费用就只有2分钱。 而卖出的1000元转债,那么收费只有0.是的,不用钱哦。
查看全部
1. 做写手写软文。一个是付出收益比太低。并且市面上有很多骗子,写完稿是不给费用的。
2. 淘宝客推广商品。现在线上推广已经成了红海。如果你到处在论坛,贴吧之类的发广告,效果很差的。基本没有出路。为啥? 因为已经有不少平台级别的推广,比如什么值得买,还有很多程序员自己写的微信小程序,做推广下单返佣的。 人家的流量比新起的个人开始做的要大很多。
3. 麦当劳,肯德基类的兼职。 这个完全是出卖个人的时间。不过对于一些内向的同学,我倒是建议他们可以去尝试一下,锻炼你们的胆量。
建议你们去做的:
1. 直播领域的探索。 目前这个行业,颜值就是流量。对于很高年少青春的同学来说,这个是最大的资本。 并且,成本不大,就一个手机即可。人人皆可做。
2. 证券市场上的无风险套利: 比如可转债打新,或者港股,美股打新。不过后者会有一定破发风险。并且入金有一定的门槛。
对于可转债打新,你只需要开通一个证券账户,然后就可以每天都打,如果当天有新债可打。 打中后才给钱。并且这个转债,一般情况下,破发的概率比较小,即使破发了,后面也会来到100元以上。这个可以放心。历史上没有哪一只转债没有上过100元。
不过对于打新族来说,正确的做法就是上市就卖。不然就没有剩余资金来已经下一只转债了。
目前如果需要开户,可以联系wx:
可转债交易费率目前全市场最低,达到百万分之二,对于学生而言,每一分都值得节约。百万分之二的费率,意味着一百万的交易,收费只有2元,而1万元的交易额,费用就只有2分钱。 而卖出的1000元转债,那么收费只有0.是的,不用钱哦。
可转债T+0 零手续费 零费率 免佣金
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 3361 次浏览 • 2021-04-06 18:26
可转债新规后,佣金沪深市十万分之五
那么如果你是很抠的人,这里并不是贬义词,在菜市场,你会比较价格,而在证券市场上,为什么不挑选便宜的佣金的券商呢?
看交割单
以前看到一个案例,发现低佣是多么难得:
券商交割单只是统计到分,也就是一分钱以下是不会收取的,那么买入转债的时候,如果你的交易金额较大,那么可以使用拆单功能,就是把一个大单拆分为多个小单,如果你每个小单小于5千元,那么券商的交割费用系统就会舍弃分钱后面的金额,也就是交易费用原来是 0.003元,但只能取到分钱位置,也就是0.00,后面的3就被舍弃了,这样手续费就是为0了。
所以你要做的就是找一个可转债低佣的券商,越低越好
需要可以扫描开户:
备注:开户
非诚勿扰。
查看全部
可转债新规后,佣金沪深市十万分之五
那么如果你是很抠的人,这里并不是贬义词,在菜市场,你会比较价格,而在证券市场上,为什么不挑选便宜的佣金的券商呢?
看交割单
以前看到一个案例,发现低佣是多么难得:
券商交割单只是统计到分,也就是一分钱以下是不会收取的,那么买入转债的时候,如果你的交易金额较大,那么可以使用拆单功能,就是把一个大单拆分为多个小单,如果你每个小单小于5千元,那么券商的交割费用系统就会舍弃分钱后面的金额,也就是交易费用原来是 0.003元,但只能取到分钱位置,也就是0.00,后面的3就被舍弃了,这样手续费就是为0了。
所以你要做的就是找一个可转债低佣的券商,越低越好
需要可以扫描开户:
备注:开户
非诚勿扰。
python判断可转债是否强赎
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 2498 次浏览 • 2021-04-02 13:41
更新:
制作好了一个接口,用户可以直接调用。
数据来源与集思录。
获取 排除满足强赎天数剩余N天的可转债,排除强赎可转债。
比如:DAY=4 ,那么假设强赎满足天数为15天,那么返回市场上强赎强赎倒数天数大于4天的可转债,即返回小于或者等于11天以下的转债。把满足条件还差4天的转债排除掉了,当然,已经公告强赎的也会被排除。
import requests
URL = 'http://11.11.11.11/api/redeem/'
# DAY 强赎倒数剩余天数小于 DAY (4)天, 已经公告强赎的也是被排除的
DAY = 4
SIGN = '私信星主获取' # sign和以前一致
data = {'day': DAY,
'sign': SIGN}
r = requests.post(URL, data=data)
print(r.json())
具体用户可以关注知识星球: 查看全部
更新:
制作好了一个接口,用户可以直接调用。
数据来源与集思录。
获取 排除满足强赎天数剩余N天的可转债,排除强赎可转债。
比如:DAY=4 ,那么假设强赎满足天数为15天,那么返回市场上强赎强赎倒数天数大于4天的可转债,即返回小于或者等于11天以下的转债。把满足条件还差4天的转债排除掉了,当然,已经公告强赎的也会被排除。
import requests
URL = 'http://11.11.11.11/api/redeem/'
# DAY 强赎倒数剩余天数小于 DAY (4)天, 已经公告强赎的也是被排除的
DAY = 4
SIGN = '私信星主获取' # sign和以前一致
data = {'day': DAY,
'sign': SIGN}
r = requests.post(URL, data=data)
print(r.json())
具体用户可以关注知识星球:
可转债费率百分之二 全市场最便宜
券商万一免五 • 绫波丽 发表了文章 • 0 个评论 • 3719 次浏览 • 2021-03-14 02:03
目前根据可转债新规 沪市十万分之4.1,深市十万分之4。支持同花顺交易
没有最低5元限制,也没有任何最低限制。
以前旧的费率可转债 沪市 百万分之二已经不复存在了。大部分券商把存量的用户也提高了。
需要的朋友欢迎扫码加我开户吧
备注:开户
非诚勿扰!
查看全部
目前根据可转债新规 沪市十万分之4.1,深市十万分之4。支持同花顺交易
没有最低5元限制,也没有任何最低限制。
以前旧的费率可转债 沪市 百万分之二已经不复存在了。大部分券商把存量的用户也提高了。
需要的朋友欢迎扫码加我开户吧
备注:开户
非诚勿扰!
2020-10-20 可转债市场成交量较昨天多一倍
股票 • 绫波丽 发表了文章 • 0 个评论 • 2444 次浏览 • 2020-10-20 17:51
最近的策略就是减仓。
最近的策略就是减仓。
深圳转债转股后不可以撤单
股票 • 李魔佛 发表了文章 • 0 个评论 • 3352 次浏览 • 2019-06-25 09:12
说明转股后也是不能撤单的。
说明转股后也是不能撤单的。
【可转债剩余转股比例数据排序】【2019-05-06】
股票 • 李魔佛 发表了文章 • 0 个评论 • 5998 次浏览 • 2019-05-06 15:28
剩余的比例越少,上市公司下调转股价的欲望就越少。 也就是会任由可转债在那里晾着,不会积极拉正股。
数据定期更新。
原创文章,
转载请注明出处:
http://30daydo.com/article/472
查看全部
剩余的比例越少,上市公司下调转股价的欲望就越少。 也就是会任由可转债在那里晾着,不会积极拉正股。
数据定期更新。
原创文章,
转载请注明出处:
http://30daydo.com/article/472
可转债如何配债
股票 • 李魔佛 发表了文章 • 0 个评论 • 12687 次浏览 • 2019-03-29 16:24
1、如果你在登记日也就是12月11日收盘时还持有一定数量歌尔声学正股的话,那么你在配债日也就是12月12日就会看到账户里有相应数量的歌尔配债。注意这里的单位是张,如图,
由于我只有800股歌尔声学,因此获得了13张配债,1张对应100元,这时双击它,左侧出现了卖出菜单,价格和配债代码都自动填好了,输入13张或者点击全部,然后点“卖出”。(需要注意的是:有些券商这里是买入。)
2、不管是卖出还是买入,然后检查下委托情况和扣款情况,如下图:
可以看到我已经被扣款1300元,这样就算成功完成了这次的13张配债.
可转债低佣金开户,沪市转债费率百分之二,全市场最低。
有兴趣的朋友可以扫描开户:
查看全部
1、如果你在登记日也就是12月11日收盘时还持有一定数量歌尔声学正股的话,那么你在配债日也就是12月12日就会看到账户里有相应数量的歌尔配债。注意这里的单位是张,如图,
由于我只有800股歌尔声学,因此获得了13张配债,1张对应100元,这时双击它,左侧出现了卖出菜单,价格和配债代码都自动填好了,输入13张或者点击全部,然后点“卖出”。(需要注意的是:有些券商这里是买入。)
2、不管是卖出还是买入,然后检查下委托情况和扣款情况,如下图:
可以看到我已经被扣款1300元,这样就算成功完成了这次的13张配债.
可转债低佣金开户,沪市转债费率百分之二,全市场最低。
有兴趣的朋友可以扫描开户:
可转债价格分布堆叠图 绘制 可视化 python+pyecharts
量化交易-Ptrade-QMT • 李魔佛 发表了文章 • 0 个评论 • 7662 次浏览 • 2019-01-30 10:59
即使你有很多数据,可是,你无法直观地看到数据的总体趋势。使用可视化的绘图,可以帮助我们看到数据背后看不到的数据。 比如我已经有每一个可转债的价格,评级。数据如下:
点击查看大图
如果我用下面的图形就可以看出规律:
点击查看大图
横坐标是价格,纵坐标是落在该价格的可转债数量,不同颜色代表不同评级的可转债。
可以看到大部分AA-评级(浅橙色)的可转债价格都在100元以下,而AA(浅蓝色)的可转债价格分布较为平均,从90到110都有。而AA+和AAA的一般都在100以上。
那么如何使用代码实现呢?from setting import get_mysql_conn,get_engine
import pandas as pd
import pymongo
from pyecharts import Geo,Style,Map
engine = get_engine('db_stock',local='local')
# 堆叠图
from pyecharts import Bar
df = pd.read_sql('tb_bond_jisilu',con=engine)
result ={}
for name,grades in df.groupby('评级'):
# print(name,grades[['可转债名称','可转债价格']])
for each in grades['可转债价格']:
result.setdefault(name,)
result[name].append(each)
# 确定价格的范围
value = [str(i) for i in range(85,140)]
ret = [0]*len(value)
ret1 = dict(zip(value,ret))
ret_A_add = ret1.copy()
for item in result['A+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
ret_A_add[k]+=1
retAA_ = ret1.copy()
for item in result['']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_[k]+=1
retAA = ret1.copy()
for item in result['AA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA[k]+=1
retAA_add = ret1.copy()
for item in result['AA+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_add[k]+=1
retAAA = ret1.copy()
for item in result['AAA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAAA[k]+=1
bar = Bar('可转债价格分布')
bar.add('A+',value,list(ret_A_add.values()),is_stack=True,yaxis_max=11)
bar.add('',value,list(retAA_.values()),is_stack=True,yaxis_max=11)
bar.add('AA',value,list(retAA.values()),is_stack=True,yaxis_max=11)
bar.add('AA+',value,list(retAA_add.values()),is_stack=True,yaxis_max=11)
bar.add('AAA',value,list(retAAA.values()),is_stack=True,yaxis_max=11)
如果没有安装pyecharts,需要用pip安装即可。
原创文章
转载请注明出处:
http://30daydo.com/article/400
查看全部
即使你有很多数据,可是,你无法直观地看到数据的总体趋势。使用可视化的绘图,可以帮助我们看到数据背后看不到的数据。 比如我已经有每一个可转债的价格,评级。数据如下:
点击查看大图
如果我用下面的图形就可以看出规律:
点击查看大图
横坐标是价格,纵坐标是落在该价格的可转债数量,不同颜色代表不同评级的可转债。
可以看到大部分AA-评级(浅橙色)的可转债价格都在100元以下,而AA(浅蓝色)的可转债价格分布较为平均,从90到110都有。而AA+和AAA的一般都在100以上。
那么如何使用代码实现呢?
from setting import get_mysql_conn,get_engine
import pandas as pd
import pymongo
from pyecharts import Geo,Style,Map
engine = get_engine('db_stock',local='local')
# 堆叠图
from pyecharts import Bar
df = pd.read_sql('tb_bond_jisilu',con=engine)
result ={}
for name,grades in df.groupby('评级'):
# print(name,grades[['可转债名称','可转债价格']])
for each in grades['可转债价格']:
result.setdefault(name,)
result[name].append(each)
# 确定价格的范围
value = [str(i) for i in range(85,140)]
ret = [0]*len(value)
ret1 = dict(zip(value,ret))
ret_A_add = ret1.copy()
for item in result['A+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
ret_A_add[k]+=1
retAA_ = ret1.copy()
for item in result['']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_[k]+=1
retAA = ret1.copy()
for item in result['AA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA[k]+=1
retAA_add = ret1.copy()
for item in result['AA+']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAA_add[k]+=1
retAAA = ret1.copy()
for item in result['AAA']:
for k in ret1:
if float(k)+0.5>item and float(k)-0.5<=item:
retAAA[k]+=1
bar = Bar('可转债价格分布')
bar.add('A+',value,list(ret_A_add.values()),is_stack=True,yaxis_max=11)
bar.add('',value,list(retAA_.values()),is_stack=True,yaxis_max=11)
bar.add('AA',value,list(retAA.values()),is_stack=True,yaxis_max=11)
bar.add('AA+',value,list(retAA_add.values()),is_stack=True,yaxis_max=11)
bar.add('AAA',value,list(retAAA.values()),is_stack=True,yaxis_max=11)
如果没有安装pyecharts,需要用pip安装即可。
原创文章
转载请注明出处:
http://30daydo.com/article/400
可转债正股的PB<1时,可转债不可以下调转股价
量化交易 • 李魔佛 发表了文章 • 0 个评论 • 5578 次浏览 • 2018-11-26 14:17
这是大部分转债“转股价格特别修正条款”的标准表述。
这是大部分转债“转股价格特别修正条款”的标准表述。