前言
国内期货不少品种有涨跌停板制度:价格触及上限时卖盘稀少,触及下限时买盘稀少。程序化若仍按平时习惯用 TargetPosTask(..., price="ACTIVE") 对价吃单,可能成交在极端价、滑点巨大,或单子长期挂着不动。更麻烦的是在流动性枯竭时反复撤单报单,占满报单频率额度、拉高 CPU,夜盘小品种尤其明显。
天勤 quote = api.get_quote(symbol) 在 wait_update 后更新,常见字段包括 upper_limit(涨停价)、lower_limit(跌停价)、last_price(最新价)、bid_price1/ask_price1(买一卖一价)、bid_volume1/ask_volume1(买一卖一量)、price_tick(最小变动价位)。下面说明如何用这些字段识别"临近涨跌停"和"盘口变薄",分级写熔断规则,以及和 set_target_volume 如何配合。交易所与期货公司风控优先级更高,程序规则是策略自保。
一、名词对照:quote 上常用字段
| 字段 | 含义 | 熔断里干什么 |
|---|---|---|
| upper_limit | 当日涨停价 | 判断是否封板或临近 |
| lower_limit | 当日跌停价 | 同上 |
| last_price | 最新成交价 | 与涨跌停价比较距离 |
| price_tick | 一跳的价格间隔 | 用"几个 tick"定义临近 |
| bid/ask_price1 | 买一卖一价 | 算点差 |
| bid/ask_volume1 | 买一卖一量 | 判断盘口厚度 |
| circuit_break | 团队自定的熔断函数名 | 返回是否禁止交易 |
这些字段由行情服务写入,非本机计算;没 wait_update 读到的是旧值。
二、场景识别:临近涨跌停 vs 盘口变薄
条件需按品种实测,螺纹钢与国债期货不能同一阈值:
python
q = api.get_quote(symbol)
tick = q.price_tick
near_high = q.last_price >= q.upper_limit - 2 * tick
near_low = q.last_price <= q.lower_limit + 2 * tick
thin = (q.ask_volume1 + q.bid_volume1) < 10 # 示意,需调参
wide_spread = (q.ask_price1 - q.bid_price1) > 5 * tick
near_high/near_low 表示价格离涨跌停只剩少数几跳;thin 表示两侧挂单量合计很少;wide_spread 表示买卖价差异常大。三者可组合成 circuit_break(q) 返回 True/False 及原因字符串供日志使用。
指数类或极不活跃合约可能长期缺买卖盘,字段为 nan 时要单独分支,勿比较 nan。
三、分级动作(建议写进配置表)
| 级别 | 典型条件 | 程序动作 |
|---|---|---|
| 警告 | 临近涨跌停但未封板 | 禁止开新仓,允许平仓方向 |
| 严重 | 封板或极薄盘口 | set_target_volume(0) 或只减不加 |
| 停机 | 连续拒单/ALIVE 久不成交 | 告警 + 暂停 auto,人工确认 |
不要在封板时仍 price="PASSIVE" 盲目排队:资金占着、仓位下不去,夜盘监控会看到 volume_left 长期不变。
python
if circuit_break(q):
task.set_target_volume(0) # 或仅平到净仓为 0
log("circuit_break", symbol, reason)
continue # 本帧不再走开仓信号
触发后仍要 wait_update 让 task 发单,同时记录 last_msg 若拒单。
四、与 TargetPosTask、ACTIVE/PASSIVE
熔断触发时通常要更快平仓,可临时用 price="ACTIVE" 的对价 task(团队规范允许时),但封板时 ACTIVE 也可能无对手盘。不要同时又手写 insert_order 同一合约。
开板后不要立刻解除熔断:可要求连续 M 个 tick 点差恢复正常再允许开仓,避免一开板追涨杀跌。
五、回测与模拟的局限
TqBacktest 未必复现涨跌停微观结构和 queue 位置,历史回测"总能成交"不能证明封板日能平。应用快期模拟或历史极端日回放,看程序是否停报、是否残留仓位。
六、与拒单、资金不足区分
涨跌停导致的不成交,last_msg 可能与"资金不足""非交易时段"不同。运维表应分栏处理,勿一律重报。组合风控里封板腿平不掉时,可能要先平其他腿(见组合风控专题)。
总结
真正的风险往往不是方向判断错,而是在极端流动性里依然按平常节奏机械下单。把 quote 的涨跌停与盘口深度识别成独立的熔断层:临近或封板时先禁止开新仓、限制加仓节奏,并确保策略把'能平的先平、不能平的先降风险'写清楚。这样做的意义在于:你不是用一次命中去赌市场,而是用规则把执行质量和风险边界先稳住,等盘口恢复再让策略重新进入正常逻辑。把这些条件分级并在日志里记录触发原因,夜盘的异常情况就能从"猜测"变成"可验证的流程结果"。
FAQ
1)指数合约无涨跌停?
按品种规则,可能无板但有流动性问题,用 thin/spread 判。
2)临近涨停还能平多吗?
通常应允许平仓方向,具体开平标志由团队与交易所规则定。
3)交易所临时熔断?
与程序熔断叠加,以交易所为准,程序侧停机观望。
4)PASSIVE 在涨跌停附近?
极易久不成交,熔断期建议勿新开 PASSIVE 单。
风险提示
以上内容用于程序风控参考,不构成投资建议。