小市值可转债策略的程序化实现(含踩坑经验)——全流程实战经验分享

最近花时间把“小市值可转债”策略做成了完全自动化的体系,包括数据更新、正股匹配、排序逻辑、轮动执行、强赎过滤、实盘交易等。
这里所有内容都是原理 经验 踩坑合集,不涉及任何特定平台或代码,大家完全可以复现。
声明:本贴没有任何利益相关,不是广告,纯粹个人分享。阅读此文需要一定的可转债基础知识和编程基础知识。本人不是可转债领域的专家,也不是量化交易专家,水平有限,发文可能错漏百出,欢迎大家指出问题帮助我改进提升,在此先表谢意!
(发图受限,纯文字表述)

希望这篇帖子能帮大家少走我踩过的那些弯路。

本策略主要分为两大部分:选债执行交易

一、选债逻辑
参考小市值股票策略构建小市值可转债轮动策略,选债规则来源于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%。
这种推送是为了防止大家在实现完全自动化交易之后脱离了市场,缺少对市场的敏感。这样即实现了无需盯盘,也可以知道策略执行情况以及当前市场情况。

四、写在最后
这套“小市值可转债轮动策略”背后并不神秘,但真正能跑通全流程,需要:
数据逻辑完整
强赎过滤完备
排序方法清晰
轮动执行严格
程序自动化可靠
安全机制完善

我走过的弯路,希望大家不要再走一遍。
如果你对此策略有改进意见、或对某些步骤存疑,也欢迎随时讨论指正。
发表时间 2025-11-18 14:12     来自湖北

赞同来自: 我丢了 可转二零二五 snowea 阿栗 mo莫莫mo 乐鱼之乐 adm1n aji008 目录 dongma 海浪9999 walkerdu pppppp 蜗牛田更多 »

0

醉虾

赞同来自:

集思录可转债数据有正股流通市值,在自定义列表里勾选就行了。
2025-11-19 13:59 来自河南 引用
0

江万福

赞同来自:

@Fris
集思录可转债数据里有一项“转债流通市值占比”,然后用转债余额很容易计算出流通市值,不用辛苦拼接。
我没有做复杂的打分机制,就是根据筛选条件选出来的转债然后选取流通市值最小的15只转债,然后在这15只转债里再选五六只做高抛低吸。
因为我个人觉得最近转债整体位置偏高,所以我尽量选的小于130的转债重仓;如果选130以上的话,就尽量选低溢价的转债。
我基本上就是这个操作思路,因为也有许多主观判断在里面,...
”转债占比“真是个好指标,之前没注意到,感谢提醒!我又可以少走一点弯路了。
2025-11-19 12:26 来自湖北 引用
0

老虎8668

赞同来自:

目前还看不懂,慢慢学习
2025-11-18 21:50 来自重庆 引用
8

Fris

赞同来自: wjeep 乐鱼之乐 好奇号 blank赵 风帆 YmoKing 江万福 aji008更多 »

集思录可转债数据里有一项“转债流通市值占比”,然后用转债余额很容易计算出流通市值,不用辛苦拼接。
我没有做复杂的打分机制,就是根据筛选条件选出来的转债然后选取流通市值最小的15只转债,然后在这15只转债里再选五六只做高抛低吸。
因为我个人觉得最近转债整体位置偏高,所以我尽量选的小于130的转债重仓;如果选130以上的话,就尽量选低溢价的转债。
我基本上就是这个操作思路,因为也有许多主观判断在里面,感觉能做出一些超额出来。程序化交易应该收益也不错,跑赢等权问题不大。
2025-11-18 17:02 来自北京 引用
0

江湖一阵风

赞同来自:

排序因子和选债因子不是一回事。
2025-11-18 15:50 来自广东 引用
0

江万福

赞同来自:

@江湖一阵风
你这个系统还缺少一个多因子综合打分的机制。这个机制应该在5-10的历史数据上进行回测,保证因子的效力。这个排序才是可行的啊。因为是全仓轮动,有时候低效转债的割肉卖出买入高效的转债对总体可能是好事。要从总体出发考虑。
确实存在多因子综合打分机制考虑不周的情况,感谢提醒!
2025-11-18 15:49 来自湖北 引用
0

江湖一阵风

赞同来自:

这个机制应该在5-10年的历史数据上进行回测,保证因子的效力。
2025-11-18 15:49 来自广东 引用
0

江湖一阵风

赞同来自:

fris只是给出了一个转债池,并没有给出多因子排序的设置。你还缺少一个对转债池进行多因子回测后的排序模型。
2025-11-18 15:48 来自广东 引用
0

江湖一阵风

赞同来自:

因子里面 波动率和换手率可能比价格更重要。
2025-11-18 15:45 来自广东 引用
0

江湖一阵风

赞同来自:

你这个系统还缺少一个多因子综合打分的机制。这个机制应该在5-10的历史数据上进行回测,保证因子的效力。这个排序才是可行的啊。因为是全仓轮动,有时候低效转债的割肉卖出买入高效的转债对总体可能是好事。要从总体出发考虑。
2025-11-18 15:44 来自广东 引用

要回复问题请先登录注册

发起人

问题状态

  • 最新活动: 2025-11-19 13:59
  • 浏览: 595
  • 关注: 60