期货实盘成交价离行情很远:量化程序要不要熔断停单

前言

国内期货量化实盘里,程序通过天勤 TargetPosTask 对价下单(price="ACTIVE",买用卖一、卖用买一),期望快速成交。但在盘口很薄、临近涨跌停、或夜盘小品种上,实际成交价可能离你看的 quote.last_price(最新价)差很多个最小变动价位(price_tick)。若程序不识别,滑点统计会被一笔拉飞,风控也会误以为持仓成本正常。

这类「成交价离谱」不一定是柜台错了,也可能是流动性问题下的真实成交。要在程序里定义:偏离多大算异常、是只记日志还是暂停加仓(熔断)。天勤在 get_trade() 里给每笔成交价格,在 quote 里给 last_priceprice_tick。下面说明怎么算偏离、与涨跌停场景如何分工、常见误解。

一、先弄清几个名词

名称是什么本文用途
get_trade()成交记录字典trade.price
quote.last_price行情最新价偏离比较的基准之一
price_tick最小变动价位偏离换算成「几个 tick」
ACTIVE对价下单薄盘口易大滑点
upper_limit / lower_limit涨跌停价封板时 last 可能失真,先判断
偏离abs(成交价 - last_price)超阈值视为异常
熔断团队自定:暂停加仓或清仓防止连续离谱成交
wait_update()推进数据成交与行情在此之后更新

二、为何会出现「成交价离 last 很远」

  1. 对价扫到很薄的卖盘或买盘,一笔吃完多档。
  2. 涨跌停附近,last 与可成交价格差异大。
  3. 回报稍延迟,你比较的是旧 last(仍应记日志,但阈值要配合时段)。
  4. 部分成交在多档价格上,逐笔 trade 都要看。

不是每次大偏离都是程序 bug,但都应留痕。

三、如何定义异常(示例)

q = api.get_quote(symbol)
dev_ticks = abs(tr.price - q.last_price) / q.price_tick

涨跌停附近应先用 upper_limitlower_limit 判断是否封板,封板时单独规则,勿与普通偏离混用同一阈值。

MAX_DEV_TICKS = 10  # 按品种实测,螺纹钢与国债不可相同

for tid, tr in api.get_trade().items():
    if not api.is_changing(tr):
        continue
    q = api.get_quote(tr.symbol)
    if q.last_price != q.last_price:  # nan 检查
        continue
    dev = abs(tr.price - q.last_price) / q.price_tick
    if dev > MAX_DEV_TICKS:
        log("abnormal_fill", tid, tr.price, q.last_price, dev)
        on_abnormal_fill(tr)

四、要不要熔断:分级建议

级别现象建议
单笔大偏离偶发记日志,日终与期货公司对账单核对
连续多笔频繁进入 semi 或 emergency,禁止加仓
伴拒单、行情停更系统异常先处理拒单与 datetime 是否推进

国内实盘常见做法是停机人工核对账单,程序自动对冲较少。

五、与 ACTIVE、改价模式

ACTIVE 在薄盘口天然易滑点;异常多时可临时缩小 set_target_volume 手数。若要改 PASSIVE 或改 task 的 price 参数,通常需重启进程新建 TargetPosTask(创建时定参)。

回测成交模型未必产生极端偏离,逻辑仍建议保留,模拟盘用薄时段观察。

总结

异常成交价要不要熔断,取决于你把单笔离谱成交当作噪声还是系统告警。天勤在 get_trade 提供成交价,在 quote 提供 last_priceprice_tick,两者相减可量化偏离几个 tick。把阈值、连续次数、是否暂停加仓写进配置,涨跌停单独判断,期货量化程序就不会在极端成交后仍按正常滑点假设继续加仓;也可用日志与期货公司逐笔核对。

FAQ

1)last_price 为 nan?

跳过本帧比较,只记录 trade。

2)一笔信号多笔成交?

逐笔检查,勿只用加权均价掩盖单笔异常。

3)组合合约能跟单腿 last 比吗?

不能,组合价与单腿 last 不是同一含义。

4)模拟盘没有异常?

仍写逻辑,避免实盘首次才触发。

风险提示

以上内容用于成交异常处理参考,不构成投资建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值