从正股冲板到转债成交:一个事件驱动的可转债 Tick 策略
由bqi2tg8b创建,最终由bqi2tg8b 被浏览 4 用户
从正股冲板到转债成交:一个事件驱动的可转债 Tick 策略
标签:可转债、Tick 回测、BigTrader、事件驱动、日内交易 本文仅用于量化研究与策略开发交流,不构成任何投资建议。
一、策略简介
传统可转债策略通常从转债本身出发,例如低价、低溢价率、低余额或者多因子选债。
本文尝试从另一个角度构建策略:
使用正股的涨停事件作为交易信号,在正股盘中触及涨停时,买入与其对应的可转债,并在当日收盘前清仓。
策略使用 BigQuant 的 BigTrader 交易引擎进行 Tick 级回测,同时订阅正股和可转债的 Level 2 快照行情。
完整策略代码:
https://bigquant.com/codesharev3/4db9f615-1684-424c-9ff0-d29f74ffcfe6
需要说明的是,本次回测结果并不理想。本文的重点不是展示一条已经稳定盈利的策略,而是完整说明:
- 如何将正股事件映射到对应可转债;
- 如何在 Tick 行情中识别正股首次触板;
- 如何根据转债卖一价买入、买一价卖出;
- 如何处理未成交、部分成交和日内强制平仓;
- 如何通过日志还原每一笔交易的触发原因。
二、策略研究思路
2.1 正股与可转债的价格联动
可转债同时具有债券属性和股票期权属性。
当正股价格快速上涨时,可转债的转股价值通常也会提高。普通文本表达为:
转股价值 = 100 ÷ 转股价 × 正股价格
正股涨停通常意味着短时间内出现了较强的买入需求和市场关注度。
但正股与可转债属于两个独立交易标的,二者在投资者结构、盘口深度、交易速度和流动性方面存在差异。因此,可以提出一个待检验的研究假设:
当正股突然触及涨停时,对应可转债的价格可能存在短暂的反应过程。
本文策略尝试捕捉这一过程。
需要强调,这只是策略假设,并不代表正股涨停后买入可转债一定能够获得正收益,最终仍然需要通过历史回测和样本外检验进行判断。
2.2 为什么筛选近期曾经涨停的正股
策略并不是对全部正股的涨停事件进行交易,而是要求:
正股在今日之前的 10 个交易日中,至少有 1 个交易日盘中曾经触及涨停。
这一条件主要用于筛选近期交易较活跃、容易受到市场关注的正股。
这里判断的是“盘中曾经触及涨停”,而不是“收盘仍然封住涨停”。只要当日最高价达到涨停价,就记为一次历史触板事件。
2.3 为什么排除开盘直接封板
默认情况下,策略要求正股在当日必须先出现低于涨停价的成交,随后再从涨停价下方触及涨停。
也就是说,策略默认排除:
开盘直接封住涨停,并且全天没有出现开板交易的股票。
原因在于,这类股票虽然处于涨停状态,但很难确定具体的盘中冲板时点,也不符合本文研究的“从下方首次触板”事件定义。
三、完整交易流程
策略的整体流程如下:
读取正股与可转债对应关系
↓
统计正股过去10个交易日的触板次数
↓
筛选满足历史触板条件的正股
↓
同一正股存在多只转债时
选择上一交易日成交额最大的转债
↓
盘前订阅正股与可转债Level 2行情
↓
监控正股Tick价格
↓
正股首次从涨停价下方触及涨停价
↓
生成对应可转债买入信号
↓
在转债下一笔有效Tick按卖一价下单
↓
当日14:55开始强制平仓
↓
未完全成交则撤单、让价并重新下单
四、策略参数
本次回测使用的主要参数如下:
| 参数 | 设置 |
|---|---|
| 回测区间 | 2026-06-01 至 2026-06-30 |
| 初始资金 | 100万元 |
| 回测频率 | Tick |
| 交易市场 | 可转债 |
| 历史观察窗口 | 10个交易日 |
| 最少历史触板次数 | 1次 |
| 最多同时持仓 | 3只 |
| 单只目标仓位 | 30% |
| 最早入场时间 | 09:31 |
| 停止产生新信号 | 14:45 |
| 强制平仓时间 | 14:55 |
| 买入成本 | 0.03% |
| 卖出成本 | 0.03% |
| 是否持仓过夜 | 否 |
| 是否允许开盘直接封板 | 否 |
组合最多使用约 90% 的资金:
最大目标仓位 = 3 × 30% = 90%
剩余资金可以为价格变化、订单取整和交易费用提供一定缓冲。
五、候选正股与可转债映射
5.1 获取正股和转债对应关系
策略首先读取可转债基础信息,获得以下字段:
- 可转债代码;
- 可转债名称;
- 对应正股代码;
- 正股名称;
- 转债上市日期;
- 转债退市日期。
随后根据回测日期,排除尚未上市或已经退市的转债。
5.2 计算历史触板次数
策略使用正股未复权日行情中的:
- 最高价;
- 收盘价;
- 涨停价。
如果当日最高价达到涨停价,则认为该正股当天盘中曾经触板。
随后对每只正股计算:
今日之前10个交易日内的触板次数。
代码中使用了 shift(1),将当天数据严格排除在历史窗口之外,避免把今天正在发生的涨停事件提前用于候选股筛选。
5.3 一只正股对应多只转债时如何处理
部分上市公司可能同时存在多只尚未退市的可转债。
如果全部订阅和交易,可能产生重复持仓。因此,策略采用一个简单的流动性规则:
选择上一交易日成交额最大的可转债。
这里的成交额使用上一交易日数据,而不是当天尚未完整结束的数据。
这一处理同时解决了两个问题:
- 避免同一正股触板后重复买入多只转债;
- 优先选择相对活跃、盘口流动性可能更好的转债。
六、盘前行情订阅
Tick 数据量较大,因此策略不会直接回放全部股票和全部可转债行情。
每天开盘前,策略只订阅:
- 当天符合条件的候选正股;
- 候选正股对应的可转债;
- 账户中可能存在的历史遗留持仓。
核心逻辑可以概括为:
subscriptions = (
set(context.today_candidates.keys())
| set(context.cbond_to_stock.keys())
| set(context.carryover_bonds)
)
context.subscribe(
sorted(subscriptions),
bigtrader.SubscribeFlag.L2Snapshot
)
显式订阅 Level 2 快照的原因是,策略需要读取:
- 正股最新成交价;
- 转债卖一价;
- 转债买一价。
如果只订阅普通行情,部分环境下可能无法取得买一价和卖一价字段。
七、正股触板信号
7.1 记录正股是否曾低于涨停价
对每一笔正股 Tick,策略先判断最新成交价是否低于当日涨停价。
如果低于涨停价,则记录:
context.seen_below_limit.add(instrument)
这个状态表示:
该正股今天至少曾经在涨停价下方成交。
7.2 识别首次触板
当正股最新成交价达到涨停价,并且此前已经在涨停价下方成交时,策略确认发生首次冲板事件。
普通文本表达为:
触板条件 = 最新成交价 ≥ 涨停价 ×(1 - 容差)
代码中设置了很小的价格容差,主要用于处理浮点数比较误差。
同一只正股每天只触发一次,触发后会被加入:
context.triggered_stocks
从而避免正股反复开板、回封时重复产生买入信号。
八、可转债买入执行
正股触板后,策略不会直接使用正股 Tick 给转债下单,因为此时不一定已经收到对应转债的最新盘口。
策略会先把转债加入待买入列表:
context.pending_cbonds[cbond] = stock
随后分为两种情况:
- 已经收到过该转债当日 Tick:立即尝试买入;
- 尚未收到转债 Tick:等待下一笔转债行情。
当取得有效卖一价后,策略按照卖一价提交限价买单。
ask1 = tick_ask1(tick)
context.order_target_percent(
instrument,
POSITION_PCT,
limit_price=ask1
)
这里没有直接使用最新成交价,而是使用卖一价,目的是让回测中的买入价格更加接近实际可成交价格。
同时,策略限制:
- 最多持有3只转债;
- 每只目标仓位30%;
- 同一只转债不重复下单;
- 已经持有的转债不再买入。
九、日内平仓与订单追价
9.1 14:55强制清仓
策略不持仓过夜。
当时间达到14:55后,系统停止处理新的买入信号,并对全部持仓发起清仓。
首次卖出使用转债买一价:
bid1 = tick_bid1(tick)
与直接使用最新成交价相比,买一价更接近当时能够主动卖出的盘口价格。
9.2 为什么需要撤单追价
可转债的盘口深度可能不足。
即使按照买一价卖出,也可能只成交一部分,订单状态变为部分成交。如果策略只发送一次卖单,剩余仓位可能无法在收盘前卖出。
因此,本策略增加了清仓追价机制:
- 首次按照买一价挂出卖单;
- 20秒后仍未完全成交,则撤销旧订单;
- 将卖出限价向下调整0.003元;
- 最多进行3次限价重试;
- 仍未完全平仓时,使用市价单兜底。
这一部分的主要目的并不是提高收益,而是避免回测中出现异常隔夜持仓。
9.3 处理历史遗留持仓
如果因为行情中断、回测结束或者其他异常情况留下隔夜仓位,策略会在下一个交易日开盘后自动启动清仓流程。
因此,日内平仓和异常持仓使用的是同一套订单处理机制。
十、交易日志与可审计性
高频策略仅查看最终收益曲线通常是不够的。
为了判断策略是否按照预期执行,代码会记录以下信息:
- 哪只正股在什么时间触及涨停;
- 正股的涨停价;
- 过去10个交易日触板次数;
- 正股对应多少只候选转债;
- 最终选择了哪只转债;
- 转债上一交易日成交额;
- 买入挂单价格;
- 实际成交价格和成交数量;
- 当前账户可用资金;
- 当前持仓数量;
- 卖出原因;
- 实际平仓盈亏;
- 是否发生撤单和让价重试。
例如,一笔买入日志会同时记录:
正股触及涨停价;
过去10个交易日满足历史触板条件;
同一正股对应的候选转债数量;
选中上一交易日成交额最大的转债;
买入成交价格、数量、手续费和账户状态。
这些日志可以帮助排查以下常见问题:
- 信号是否确实由正股首次触板产生;
- 买入的是不是正确的对应转债;
- 是否发生重复下单;
- 是否使用了有效卖一价;
- 平仓订单是否出现部分成交;
- 是否存在隔夜持仓。
十一、回测结果
建议在此处插入 BigTrader 的“收益概况”截图。
【插入图1:策略累计收益曲线和回测指标】
本次回测区间为2026年6月1日至2026年6月30日,初始资金为100万元。
主要结果如下:
| 指标 | 回测结果 |
|---|---|
| 累计收益率 | -6.58% |
| 年化收益率 | -55.83% |
| 基准收益率 | 2.79% |
| 阿尔法 | -0.58 |
| 贝塔 | 0.11 |
| 夏普比率 | -4.86 |
| 胜率 | 28.06% |
| 盈亏比 | 0.53 |
| 收益波动率 | 17.10% |
| 信息比率 | -4.13 |
| 最大回撤 | 8.04% |
从结果看,这一版策略在当前样本中没有获得正收益。
累计收益率为-6.58%,夏普比率为-4.86,说明策略承担波动后并没有获得相应的风险补偿。
胜率只有28.06%,盈亏比为0.53,意味着策略不仅盈利交易比例较低,而且平均盈利也不足以覆盖平均亏损。
需要注意,回测区间只有一个月,因此年化收益率、阿尔法和夏普比率都会受到短样本的明显影响。相比单纯关注年化指标,更应该检查每笔交易的收益分布、入场延迟和盘口成交情况。
十二、如何理解这次负收益
12.1 正股涨停不等于转债继续上涨
正股触及涨停时,可转债可能已经提前上涨。
如果转债价格在正股冲板之前已经充分反映预期,那么触板后再买入就可能处于短期高位。
因此,策略可能面临:
正股信号出现时,可转债价格反应已经基本完成。
12.2 只判断触板,没有判断封板质量
当前策略只判断正股是否达到涨停价,没有进一步判断:
- 涨停封单金额;
- 封单持续时间;
- 开板次数;
- 买一队列变化;
- 触板前短期成交量;
- 触板速度;
- 是否属于快速回封。
因此,普通的触板、弱势冲板和强势封板都会被同等处理。
12.3 没有判断转债是否已经过度上涨
当前版本没有加入转债端的价格过滤条件,例如:
- 转股溢价率;
- 当日涨幅;
- 转债相对正股的涨幅差;
- 买卖价差;
- 当前盘口深度;
- 转债成交额;
- 转债短期波动率。
如果转债在买入前已经大幅上涨,后续出现回落的概率可能提高。
12.4 收盘前统一平仓可能不是最佳退出方式
策略在正股触板后买入,并统一持有到14:55。
但不同事件的有效持续时间可能不同。
有些转债可能在触板后的几十秒内完成价格反应,继续持有反而会暴露于:
- 正股开板;
- 转债溢价率回落;
- 日内资金撤离;
- 尾盘流动性下降。
因此,固定尾盘平仓可能没有利用信号的实际半衰期。
十三、当前策略的主要优点
虽然回测结果为负,但这一版策略仍然完成了较完整的事件驱动交易框架。
13.1 严格使用历史信息
过去10个交易日的触板次数通过滞后处理计算,严格排除了当天数据。
转债筛选使用上一交易日成交额,也没有使用当天收盘后才能获得的信息。
13.2 正股信号与转债执行分离
策略分别处理:
- 正股触板事件;
- 转债盘口更新;
- 可转债订单执行。
这比在正股 Tick 回调中直接使用未知的转债价格下单更合理。
13.3 使用买一价和卖一价
买入使用卖一价,卖出使用买一价,使回测价格比直接使用最新成交价更加保守。
13.4 处理部分成交
通过撤单、让价重试和市价兜底,降低了未成交订单导致异常隔夜持仓的概率。
13.5 日志较为完整
每一笔交易都能够追溯到对应正股、历史筛选条件、转债选择依据和实际成交情况,便于后续诊断。
十四、下一步优化方向
14.1 加入封板质量过滤
可以在正股触板后继续观察数秒,而不是立即买入。
例如要求:
正股价格达到涨停价
+
连续若干秒没有开板
+
涨停买一队列保持稳定
+
封单金额达到最低标准
这样可以减少弱势冲板和瞬间触板信号。
14.2 加入转债相对滞后指标
策略真正需要捕捉的不是“正股涨停”,而是:
正股已经出现强势事件,但转债尚未完全反应。
可以构造以下指标:
正股短期涨幅 - 转债短期涨幅
或者比较正股冲板前后,转债相对于理论转股价值的变化。
如果转债已经同步大涨,则不再追入;只有转债反应明显落后时才产生买入信号。
14.3 加入流动性硬过滤
可以进一步要求:
- 上一交易日成交额达到最低标准;
- 当日买卖价差不超过指定比例;
- 卖一档挂单数量足够;
- 转债价格处于合理区间;
- 排除长期没有有效盘口的转债。
14.4 使用事件退出而不是固定尾盘退出
后续可以比较多种退出规则:
- 正股开板后立即退出;
- 转债达到止盈比例后退出;
- 转债达到止损比例后退出;
- 持有超过一定分钟数后退出;
- 转债相对正股的价格差收敛后退出;
- 14:55仅作为最后的强制平仓条件。
14.5 延长回测区间
一个月的数据不足以评价策略稳定性。
更严谨的检验应覆盖:
- 上涨市场;
- 下跌市场;
- 可转债活跃阶段;
- 可转债低迷阶段;
- 不同涨停制度和不同流动性环境。
同时可以按照年份或者月份输出:
- 触发事件数量;
- 实际成交数量;
- 平均持有时间;
- 单笔平均收益;
- 胜率;
- 盈亏比;
- 最大单笔亏损;
- 不同时间段的策略表现。
十五、总结
本文构建了一套基于正股涨停事件的可转债 Tick 策略。
策略的核心逻辑是:
先使用历史触板条件筛选活跃正股,再监控正股当日首次冲板事件,随后按照对应可转债的实际盘口价格完成日内交易。
相较于传统可转债双低或者多因子轮动策略,这套方法具有明显的事件驱动特征,交易信号来自正股,交易标的是可转债。
从本次回测看,简单地在正股触板后买入可转债,并不能直接形成有效策略。当前版本在2026年6月取得-6.58%的累计收益,说明信号定义、买入时点和退出机制仍需要继续优化。
但负收益结果同样具有研究价值。它说明:
- 正股触板并不代表转债随后一定继续上涨;
- 需要识别转债是否已经提前反应;
- 需要区分强势封板和普通触板;
- 高频策略必须重视盘口、价差、部分成交和订单管理;
- 完整交易日志比单纯观察收益曲线更有助于发现问题。
欢迎大家从信号定义、盘口执行和风险控制等角度提出修改建议。