最近花时间把“小市值可转债”策略做成了完全自动化的体系,包括数据更新、正股匹配、排序逻辑、轮动执行、强赎过滤、实盘交易等。
这里所有内容都是原理 经验 踩坑合集,不涉及任何特定平台或代码,大家完全可以复现。
声明:本贴没有任何利益相关,不是广告,纯粹个人分享。阅读此文需要一定的可转债基础知识和编程基础知识。本人不是可转债领域的专家,也不是量化交易专家,水平有限,发文可能错漏百出,欢迎大家指出问题帮助我改进提升,在此先表谢意!
(发图受限,纯文字表述)
希望这篇帖子能帮大家少走我踩过的那些弯路。
本策略主要分为两大部分:选债和 执行交易
一、选债逻辑
参考小市值股票策略构建小市值可转债轮动策略,选债规则来源于Fris,过滤条件示例:
未到期剩余年限 > 1 年(必须,否则强赎 到期风险极高)、可转债价格 < 140、溢价率 < 35%、剩余规模 < 10 亿、正股流通市值 < 30 亿(核心因子)、强赎触发要求不满足(即“安全区”)、最终取前 N(我一般取 10 或 20),以上条件大家可根据个人策略自行灵活调整。
对于大部分平台,可转债数据和股票数据是分开的,例如集思录可转债数据就缺少正股流通市值,我尝试了同花顺、东方财富、新浪、腾讯、迅投、Tushare数据等皆是如此。所以接下来的工作就很清楚了,拼接可转债数据和股票数据。
首先获取可转债数据,无论从哪获取都行,集思录、Tushare等都可以,注意有些地方是有反爬虫机制的。获取之后提取可转债对应正股代码,通过正股代码获取正股流通市值。
踩坑(1):有公司发行不止一个可转债
例如:
当前400只可转债对应只有395只股票,刚开始我并不知道怎么回事,导致可转债数据和股票数据无法拼接(一个是400行数据,一个是395行数据),这一点我当初纠结了很久,专门写出来避免别人再踩。
踩坑(2)不同数据源字段名称不一样,需要做统一映射
例如:
转股溢价率,premium, cb_premium
remain_amount, 余额, 剩余规模
正确拼接之后就可以进行排序,排序规则也是因人而异,每个人的侧重点不同,常见的有:
按剩余规模(稳健)
按正股流通市值(更敏感)
加权排序:例如0.7*(规模排名) 0.3*(市值排名)
加入风险惩罚项目:若剩余年限<1.5则加罚分、若价格>130则加罚分,若临近强赎价则加罚分。
以上工作做完就生成了排序前10 或 20的可转债列表,接下来就是数据更新频率,可转债每日更新,流通市值当然也可以每日更新,但是我建议此项每周更新即可。然后筛选结果可以每日或者每周更新(看个人的轮动频率),这里还做一个微信推送的,使用pushplus、钉钉机器人等都可以实现。
额外补充一点小技巧:如果只做选债的话,同花顺手机app可以快速实现,新建动态分组,输入条件,一秒给出结果。这个比可转债数据拼接股票数据简单多了,只不过我目前不知道怎么调用这个api,如果可以调用的话这个将是最快捷的方法,没有之一。
二、交易执行
在交易前首先要模拟盘进行,检查信号触发是否正确、排序是否一致、是否重复下单、强赎债是否过滤、无问题后再实盘。
选债工作可以在每天下午五六点的时候进行,各大平台基本都完成了数据更新,第二天开盘前检查可转债列表与持仓列表,买进列表前20的,卖出不在前20的,基本在9:30分即可完成交易。
交易客户端分为QMT和mini QMT,我尝试了两天发现图形客户端用来做回测很方便,用来做交易很不方便。摸索了一两天后,结合迅投的文档,最终发现通过vscode mini QMT是最方便的,是的你没有看错,直接在vscode里面下单交易。只需要额外安装迅投的包即可,名叫xtquant,与mini QMT进行通信。当然有的人喜欢用pycharm也是可以的,但是考虑到部署到服务器上的话,pycharm实在是太大了,并不适合。最后要注意,开户一定要选支持mini MQT的券商。
我走的这些弯路希望大家不要再走了,不要在QMT和mini QMT图形客户端上浪费时间了。
三、自动化与安全性
可以部署到远程服务器上,也可以在本机运行,我目前是在本地运行,有台闲置的电脑,8:30自动开启,9:00自动启动mini QMT服务,9:30执行轮动交易。
我目前的本地电脑,任何外部网络或者设备都无法连接进来的,很安全。但是部署到服务器运行就得考虑安全问题了,要防范黑客攻击,另外可转债是t 0,可以无限次交易,所以要防止出现bug导致无限次的高买低卖,耗尽本金。需要设定每天自动交易笔数上限为40(假定新买入20,之前20只全部轮动出局),达到40笔自动断开交易。
还可以在每天收盘后进行微信推送当天的成交情况与当前持仓情况。
除此之外还可以推送当前市场成交情况,例如这种:主流宽基指数中领涨的微盘股指数涨0.86%、北证50涨0.81%;领跌的上证50跌0.87%、沪深300跌0.65%。申万一级行业指数中领涨的计算机涨1.67%、国防军工涨1.59%、煤炭涨1.32%;领跌的医药生物跌1.73%、银行跌1.31%、非银金融跌1.11%。
这种推送是为了防止大家在实现完全自动化交易之后脱离了市场,缺少对市场的敏感。这样即实现了无需盯盘,也可以知道策略执行情况以及当前市场情况。
四、写在最后
这套“小市值可转债轮动策略”背后并不神秘,但真正能跑通全流程,需要:
数据逻辑完整
强赎过滤完备
排序方法清晰
轮动执行严格
程序自动化可靠
安全机制完善
我走过的弯路,希望大家不要再走一遍。
如果你对此策略有改进意见、或对某些步骤存疑,也欢迎随时讨论指正。
这里所有内容都是原理 经验 踩坑合集,不涉及任何特定平台或代码,大家完全可以复现。
声明:本贴没有任何利益相关,不是广告,纯粹个人分享。阅读此文需要一定的可转债基础知识和编程基础知识。本人不是可转债领域的专家,也不是量化交易专家,水平有限,发文可能错漏百出,欢迎大家指出问题帮助我改进提升,在此先表谢意!
(发图受限,纯文字表述)
希望这篇帖子能帮大家少走我踩过的那些弯路。
本策略主要分为两大部分:选债和 执行交易
一、选债逻辑
参考小市值股票策略构建小市值可转债轮动策略,选债规则来源于Fris,过滤条件示例:
未到期剩余年限 > 1 年(必须,否则强赎 到期风险极高)、可转债价格 < 140、溢价率 < 35%、剩余规模 < 10 亿、正股流通市值 < 30 亿(核心因子)、强赎触发要求不满足(即“安全区”)、最终取前 N(我一般取 10 或 20),以上条件大家可根据个人策略自行灵活调整。
对于大部分平台,可转债数据和股票数据是分开的,例如集思录可转债数据就缺少正股流通市值,我尝试了同花顺、东方财富、新浪、腾讯、迅投、Tushare数据等皆是如此。所以接下来的工作就很清楚了,拼接可转债数据和股票数据。
首先获取可转债数据,无论从哪获取都行,集思录、Tushare等都可以,注意有些地方是有反爬虫机制的。获取之后提取可转债对应正股代码,通过正股代码获取正股流通市值。
踩坑(1):有公司发行不止一个可转债
例如:
当前400只可转债对应只有395只股票,刚开始我并不知道怎么回事,导致可转债数据和股票数据无法拼接(一个是400行数据,一个是395行数据),这一点我当初纠结了很久,专门写出来避免别人再踩。
踩坑(2)不同数据源字段名称不一样,需要做统一映射
例如:
转股溢价率,premium, cb_premium
remain_amount, 余额, 剩余规模
正确拼接之后就可以进行排序,排序规则也是因人而异,每个人的侧重点不同,常见的有:
按剩余规模(稳健)
按正股流通市值(更敏感)
加权排序:例如0.7*(规模排名) 0.3*(市值排名)
加入风险惩罚项目:若剩余年限<1.5则加罚分、若价格>130则加罚分,若临近强赎价则加罚分。
以上工作做完就生成了排序前10 或 20的可转债列表,接下来就是数据更新频率,可转债每日更新,流通市值当然也可以每日更新,但是我建议此项每周更新即可。然后筛选结果可以每日或者每周更新(看个人的轮动频率),这里还做一个微信推送的,使用pushplus、钉钉机器人等都可以实现。
额外补充一点小技巧:如果只做选债的话,同花顺手机app可以快速实现,新建动态分组,输入条件,一秒给出结果。这个比可转债数据拼接股票数据简单多了,只不过我目前不知道怎么调用这个api,如果可以调用的话这个将是最快捷的方法,没有之一。
二、交易执行
在交易前首先要模拟盘进行,检查信号触发是否正确、排序是否一致、是否重复下单、强赎债是否过滤、无问题后再实盘。
选债工作可以在每天下午五六点的时候进行,各大平台基本都完成了数据更新,第二天开盘前检查可转债列表与持仓列表,买进列表前20的,卖出不在前20的,基本在9:30分即可完成交易。
交易客户端分为QMT和mini QMT,我尝试了两天发现图形客户端用来做回测很方便,用来做交易很不方便。摸索了一两天后,结合迅投的文档,最终发现通过vscode mini QMT是最方便的,是的你没有看错,直接在vscode里面下单交易。只需要额外安装迅投的包即可,名叫xtquant,与mini QMT进行通信。当然有的人喜欢用pycharm也是可以的,但是考虑到部署到服务器上的话,pycharm实在是太大了,并不适合。最后要注意,开户一定要选支持mini MQT的券商。
我走的这些弯路希望大家不要再走了,不要在QMT和mini QMT图形客户端上浪费时间了。
三、自动化与安全性
可以部署到远程服务器上,也可以在本机运行,我目前是在本地运行,有台闲置的电脑,8:30自动开启,9:00自动启动mini QMT服务,9:30执行轮动交易。
我目前的本地电脑,任何外部网络或者设备都无法连接进来的,很安全。但是部署到服务器运行就得考虑安全问题了,要防范黑客攻击,另外可转债是t 0,可以无限次交易,所以要防止出现bug导致无限次的高买低卖,耗尽本金。需要设定每天自动交易笔数上限为40(假定新买入20,之前20只全部轮动出局),达到40笔自动断开交易。
还可以在每天收盘后进行微信推送当天的成交情况与当前持仓情况。
除此之外还可以推送当前市场成交情况,例如这种:主流宽基指数中领涨的微盘股指数涨0.86%、北证50涨0.81%;领跌的上证50跌0.87%、沪深300跌0.65%。申万一级行业指数中领涨的计算机涨1.67%、国防军工涨1.59%、煤炭涨1.32%;领跌的医药生物跌1.73%、银行跌1.31%、非银金融跌1.11%。
这种推送是为了防止大家在实现完全自动化交易之后脱离了市场,缺少对市场的敏感。这样即实现了无需盯盘,也可以知道策略执行情况以及当前市场情况。
四、写在最后
这套“小市值可转债轮动策略”背后并不神秘,但真正能跑通全流程,需要:
数据逻辑完整
强赎过滤完备
排序方法清晰
轮动执行严格
程序自动化可靠
安全机制完善
我走过的弯路,希望大家不要再走一遍。
如果你对此策略有改进意见、或对某些步骤存疑,也欢迎随时讨论指正。
Edge
Chrome
Firefox


京公网安备 11010802031449号