第十七章:实盘交易注意事项

各位同学,前面我们讲了基差交易的策略逻辑、回测框架,甚至把对冲比例怎么算都掰开揉碎了。但说实话,从回测到实盘,中间隔着一道天堑。我见过太多策略在回测里漂亮得像艺术品,一上实盘就亏得亲妈都不认识。

为什么会这样?因为实盘交易里,有四个你绕不开的「隐形杀手」:滑点、冲击成本、交易对手风险,还有流动性分层。今天我们就来逐个拆解。

基差交易实盘注意事项 · 核心框架 实盘交易注意事项 滑点与冲击成本 限价单 vs 市价单 冰山订单 · 时间切片 交易对手风险 中央清算 vs OTC 信用评估 · 保证金管理 流动性分层 Level 1/2/3 数据 盘口深度 · 订单簿斜率 限价单策略 挂单位置 · 撤单重发 被动 vs 主动成交 成本控制 风险隔离 数据感知 执行优化

一、滑点与冲击成本:你的利润是怎么被吃掉的

先讲个我自己的教训。2019年我做螺纹钢和热卷的跨品种套利,回测里年化收益能做到18%,最大回撤不到3%。结果实盘第一天,一个300手的单子下去,滑点直接干掉了0.5个点。你想想看,基差套利本身利润就薄,0.5个点相当于吃掉了我一周的预期收益。

滑点,说白了就是你下单时的预期成交价和实际成交价之间的差值。而冲击成本,是你的订单本身对市场价格造成的影响。两者往往是伴生的——你单子越大,冲击成本越高,滑点也越严重。

核心公式(实战版):

实际执行成本 = 滑点 + 冲击成本 + 手续费

其中冲击成本 ≈ 订单规模 × 市场深度斜率

我个人习惯用「流动性系数」来估算冲击成本。比如在螺纹钢主力合约上,我统计过:每100手市价单大约会造成0.2个tick的滑移。这个系数每个品种都不一样,你得自己跑数据去拟合。

避坑指南:

我曾经在焦炭合约上吃过亏。焦炭一手100吨,流动性远不如螺纹钢。我按螺纹钢的经验去下焦炭的单子,结果冲击成本是预估的3倍。后来我学乖了——每个品种单独建一个冲击成本模型,绝不复用。

二、交易对手风险:你以为成交了就安全了?

基差交易里,我们经常要同时持有期货和现货(或者两个不同合约)。这里有个很多人忽略的问题:你的交易对手是谁?

在交易所场内交易,有中央清算所担保,对手风险几乎为零。但如果你做的是场外衍生品,或者通过做市商进行大宗交易,那对手风险就是实打实的。

交易类型 对手风险等级 应对措施
交易所期货(主力合约) 极低 正常风控即可
交易所期货(非主力) 中等 控制仓位,避免大单
场外互换/远期 必须做信用评估,设置授信额度
做市商报价交易 中等 多询价,分散交易对手

我记得2020年有个同行,做铜的保税区基差交易,跟一家中小型贸易商签了远期合约。结果铜价暴跌,那家贸易商直接违约,他这边现货端亏了,期货端的对冲头寸却还在,两头挨打。嗯,这就是典型的对手风险失控。

警告:

永远不要把所有头寸集中在一个交易对手上。哪怕对方是大型机构,也要设置单日最大交易限额。我个人的红线是:单一对手的敞口不超过净资产的15%。

三、流动性分层:你以为的流动性,可能只是假象

很多新手看盘口,只看买一卖一的价格和数量。但实盘里,这远远不够。流动性是分层的——你看到的买一可能只有10手,但买二到买五加起来有500手。如果你下个50手的卖单,可能直接砸穿三层盘口。

我习惯用「订单簿斜率」来衡量真实流动性。简单来说,就是看价格每变动一个tick,累计挂单量的变化速度。斜率越陡,说明流动性越差,你的冲击成本就越高。

# 订单簿斜率计算(Python伪代码)
def orderbook_slope(orderbook, depth=10):
    """
    orderbook: 包含 bids 和 asks 的字典
    depth: 计算深度(层数)
    返回:斜率值,越大表示流动性越差
    """
    bids = orderbook['bids'][:depth]
    asks = orderbook['asks'][:depth]
    
    # 计算累计挂单量
    bid_volumes = [sum([b[1] for b in bids[:i+1]]) for i in range(len(bids))]
    ask_volumes = [sum([a[1] for a in asks[:i+1]]) for i in range(len(asks))]
    
    # 计算价格变化
    bid_prices = [b[0] for b in bids]
    ask_prices = [a[0] for a in asks]
    
    # 斜率 = 价格变化 / 累计量变化
    bid_slope = (bid_prices[-1] - bid_prices[0]) / bid_volumes[-1] if bid_volumes[-1] > 0 else float('inf')
    ask_slope = (ask_prices[-1] - ask_prices[0]) / ask_volumes[-1] if ask_volumes[-1] > 0 else float('inf')
    
    return (bid_slope + ask_slope) / 2

你看,这个代码很简单,但实战中非常有用。我每天开盘前都会跑一遍所有持仓品种的订单簿斜率,斜率超过阈值的品种,我会主动降低交易频率,或者改用限价单慢慢吃。

一个小技巧:

流动性分层还有一个容易被忽视的点——时间维度。早盘开盘和下午收盘前,流动性往往最差。我一般会避开这两个时间段做大规模调仓。午盘10:30到11:30,以及下午2:00到3:00,是流动性最好的窗口。

四、限价单策略:被动成交的艺术

说到限价单,很多人觉得就是「挂个单等着呗」。其实没那么简单。限价单的核心在于:你愿意用时间换价格,还是用价格换时间?

基差交易里,我强烈建议优先使用限价单。原因很简单——基差套利的利润空间本来就窄,市价单的滑点可能直接让策略从盈利变成亏损。

但限价单也有坑。比如你挂了一个买单在买一位置,结果行情快速上涨,你的单子一直没成交,等你想撤单重挂的时候,价格已经跑远了。这就是所谓的「挂单踏空」。

我的应对策略是「分层挂单法」:

  1. 核心仓位(60%): 挂在当前买一价,耐心等待成交
  2. 机动仓位(30%): 挂在买一和买二之间,稍微激进一点
  3. 应急仓位(10%): 用市价单处理,只在需要快速建仓或平仓时使用

另外,撤单重发的频率也很关键。我见过有人每秒撤单重发一次,结果被交易所当成「虚假申报」给限制了。我个人习惯是:如果挂单超过3秒没成交,且价格已经偏离了0.5个tick以上,我才考虑撤单重发。

实战口诀:

限价单,慢慢吃,

分层挂,不着急。

流动性差用冰山,

对手风险要隔离。

最后说一句,实盘交易没有银弹。滑点、冲击成本、对手风险、流动性分层——这四个问题你永远无法完全消除,只能管理。我做了十年量化,到现在每次上实盘前还是会紧张。但正是这种敬畏心,让我活到了现在。

好了,这一章的内容就到这里。记住:回测是艺术,实盘是科学。把细节抠到极致,你的策略才能从纸面走向真金白银。


公众号:蓝海资料掘金营,微信 deep3321