期货量化薄盘口假突破怎么过滤:天勤 quote 五档量与点差阈值
前言
国内期货量化趋势程序里,信号多在 K 线收盘后产生:天勤get_kline_serial订 5 分钟线,价格向上突破 20 日均线时,策略层调用TargetPosTask.set_target_volume(n)做多。执行层若用price="ACTIVE"对价,会按当前买卖盘报价成交。农产品远月、小品种或非主力月份上,常出现「K 线收出一根漂亮突破 bar,但买一卖一各只有一两手、点差占了好几个最小变动价位」——信号像真突破,盘口却撑不住,追进去下一根 bar 价格又回到区间里,滑点却已经发生。
过滤薄盘口假突破,不能只看 K 线阴阳线,要在发set_target_volume之前读天勤api.get_quote(symbol)上的五档买卖量与price_tick。下面说明字段含义、阈值怎么配、和TargetPosTask价格模式怎么配合。
一、quote 里和流动性相关的字段
天勤api.get_quote(symbol)返回的Quote对象(见objs.py)包含五档买卖价量:
| 字段 | 含义 | 过滤用途 |
|---|---|---|
bid_price1/ask_price1 | 买一、卖一价 | 算点差 |
bid_volume1/ask_volume1 | 买一、卖一量 | 厚度门槛 |
bid_volume2~5等 | 更深档位 | 大单冲击评估 |
price_tick | 最小变动价位 | 点差换算成 tick 数 |
last_price | 最新价 | 与均线比较 |
volume | 当日成交量 | 品种活跃度 |
点差(tick 数)可近似为:
spread_ticks=(quote.ask_price1-quote.bid_price1)/quote.price_tick注意price_tick为 nan 或买卖价为 0 时,应跳过本帧不下单。
二、薄盘假突破的典型形态
结合实盘经验,下列组合值得在程序里挡一层:
- 突破信号出现,但
bid_volume1 + ask_volume1低于品种阈值(如螺纹钢主力常设几十手,远月可能只有 1~5 手)。 spread_ticks大于 2~3,对价进出成本过高。- 五档合计量仍很小,但 K 线 amplitude 很大,多为扫单或错价成交。
- 夜盘刚开盘几分钟,盘口未稳,指标与 quote 同时触发。
过滤应写在信号层与执行层之间:信号可以记录「理论突破」,执行层读 quote 决定本帧是否set_target_volume。
三、和 TargetPosTask 价格模式的配合
TargetPosTask的price参数支持ACTIVE(对价)、PASSIVE(排队)或自定义函数。薄盘时:
ACTIVE容易吃穿几档,滑点放大;可改用PASSIVE或限价函数,但成交变慢。- 若 spread 过大,直接本帧不调仓,等下一根
wait_update再评估。 - 远月合约即使订阅了行情,也应在执行前用 quote 过滤,避免长期
ALIVE挂单(与远月流动性专题同一思路)。
自定义价格函数示例(仅示意逻辑):
defpassive_if_thin(quote):spread=(quote.ask_price1-quote.bid_price1)/quote.price_tickifspread>3orquote.bid_volume1+quote.ask_volume1<10:returnquote.bid_price1# 排队买returnquote.ask_price1# 正常对价买task=TargetPosTask(api,symbol,price=passive_if_thin)四、多档深度与加权评估
仅看一档在有些品种够用;若策略手数较大,可算前五档可成交量:
defdepth_sum(quote,side="ask",levels=5):total=0foriinrange(1,levels+1):total+=getattr(quote,f"{side}_volume{i}",0)or0returntotal当计划开仓手数大于depth_sum的一定比例时,延迟调仓或启用max_volume拆分。
五、参数怎么落到配置
建议按品种维护 YAML 或 JSON:
min_depth1:买一卖一量之和下限max_spread_ticks:允许的最大点差min_day_volume:当日成交量下限(用quote.volume)
回测阶段若用主连或TqBacktest,盘口字段可能与实盘有差异,过滤规则应在TqSim/TqKq上复验。
六、过滤日志字段
被挡信号应记:event=filtered、reason=thin_book、spread_ticks、depth1、symbol,便于复盘「没做」还是「不能做」。
七、与涨跌停区别
涨跌停时 spread 也可能很大,但原因不同;应先看quote涨跌停相关字段(若有),再决定是流动性过滤还是风控熔断,避免把涨停误当薄盘。
八、主力与远月阈值分表
主力min_depth1=30、远月min_depth1=5可能仍太松;远月更建议直接不在执行池,而非低阈值硬做。
总结
薄盘口假突破的核心矛盾,是 K 线信号按历史成交汇总,而你的下一笔成交发生在当下这几档买卖盘上。天勤quote提供五档价量与price_tick,足够在set_target_volume前做 spread 与深度门槛;配合TargetPosTask的price与拆分参数,可以在不改信号公式的情况下降低远月、夜盘初段的无意义追价。把阈值写进配置并在日志里记录被过滤原因,复盘时才能区分是真突破没做,还是风控正确地挡了一次薄盘陷阱。
FAQ
1)只有一档量为 0 怎么办?
买卖价为 0 或 nan 多出现在停牌、刚订阅未收到首帧;应wait_update等到有效盘口再交易。
2)过滤会不会错过真突破?
会;这是用错过行情换滑点可控。阈值需按品种回测与模拟权衡。
3)tick 策略能用同样逻辑吗?
可以,在 tick 触发分支里读同一quote对象,注意is_changing降频。
4)组合合约 SP 怎么看深度?
组合合约 quote 反映组合盘口,单腿仍要分别核对,避免组合价突破但腿薄。
本文基于天勤 TqSdk 公开 API 整理,不构成投资建议。
