第二十八节:基差交易的算法交易

各位同学,今天我们来聊聊基差交易里一个非常实战的话题——算法交易。说实话,很多做基差交易的朋友,策略想得挺漂亮,一到执行环节就亏钱。为什么?因为你的订单一挂出去,市场就“看见”你了。

我刚开始做基差交易那会儿,就吃过这个亏。记得有一次,我判断螺纹钢的期现价差要回归,挂了个大单子想一把吃掉。结果呢?价格瞬间被打下去,我的成交均价比预期高了整整两个点。后来我才明白,这不是市场跟我作对,是我的执行方式太“原始”了。

TWAP与VWAP:基差交易的时间切片艺术

先说说TWAP和VWAP。这两个东西,说白了就是帮你把大单子“切碎”了慢慢吃。

TWAP(时间加权平均价格),就是把你的订单按时间均匀分配。比如你要买100手,交易时段是4小时,那就每小时买25手。它的逻辑很简单:假设价格是随机波动的,均匀分布就能拿到平均价。

但这里有个坑——TWAP完全不考虑成交量。万一你下单的时候市场正好没量,你的订单就会把价格推得很高。我遇到过这种情况,在下午收盘前用TWAP执行,结果那会儿流动性枯竭,成交价惨不忍睹。

VWAP(成交量加权平均价格)就聪明一些。它会根据历史成交量分布来分配订单。比如上午10点成交量占全天的15%,那就在这个时段分配15%的订单量。

我个人习惯在基差交易里优先用VWAP。为什么?因为基差交易的核心是价差回归,你希望自己的成交价尽量贴近市场均价,这样价差计算才准确。VWAP天然就是干这个的。

核心要点:

  • TWAP适合流动性好的品种,比如股指期货
  • VWAP适合基差交易,能减少对价差的影响
  • 实际执行时,我建议用VWAP作为基准,再根据实时流动性做微调

冰山订单:把你的真实意图藏起来

冰山订单,这个名字很形象。你只露出“冰山一角”,真正的订单量藏在水下。

举个例子。你想买500手螺纹钢,如果直接挂个500手的买单,市场上一眼就能看到。做市商和量化基金看到这么大的单子,会怎么想?他们会把价格往上推,等你来追。这就是典型的“被狙击”。

冰山订单的做法是:只显示50手,成交完再自动补上50手,直到500手全部成交。这样市场看到的始终是一个小单子,不会引起注意。

嗯,这里要注意——冰山订单不是万能的。如果市场深度很差,你的冰山订单可能会被“钓鱼”。我曾经在某个流动性不好的品种上用过冰山,结果被一个高频交易商反复“试单”,他每次只吃我露出来的那一点,然后迅速撤单,搞得我成交效率极低。

我的经验:

冰山订单的“露出量”一般设为总订单量的5%-10%。如果市场波动大,可以降到3%。另外,配合随机时间间隔使用效果更好——别每次都固定补单,容易被对手盘摸到规律。

算法执行优化:从“傻执行”到“智能执行”

光会用TWAP和冰山还不够,你得学会优化。我见过太多人,策略是好的,执行却一塌糊涂。

优化的核心就三个字:看微观结构

比如,你发现某个品种在开盘后15分钟和收盘前15分钟流动性最好,那你就应该把大部分订单集中在这两个时段。再比如,如果盘口上有大单托底,你可以适当加快执行速度;如果盘口很薄,就放慢节奏。

我常用的一个优化方法是“动态调整执行速度”。具体来说:

# 伪代码示例:动态执行速度调整
def adjust_execution_speed(order_book, target_volume):
    # 计算当前市场深度
    depth = order_book.bid_volume + order_book.ask_volume
    
    # 如果深度充足,加快执行
    if depth > target_volume * 10:
        speed = 1.5  # 1.5倍速
    # 如果深度不足,放慢执行
    elif depth < target_volume * 3:
        speed = 0.5  # 0.5倍速
    else:
        speed = 1.0  # 正常速度
    
    return speed

这个逻辑很简单,但实战中非常有效。你想想看,市场深度好的时候你不多吃一点,深度差的时候你硬吃,这不是跟自己过不去吗?

市场冲击模型:算清楚你的“交易税”

最后,也是最重要的——市场冲击模型。这东西,说白了就是算清楚你的订单会对价格产生多大影响。

基差交易里,市场冲击是个隐形杀手。你算好了价差有5个点的利润,结果一执行,冲击成本吃掉3个点,剩下2个点还不够手续费。这种事我见得太多了。

一个简单的市场冲击模型是这样的:

订单量(手) 预期冲击(点) 实际冲击(点)
10 0.5 0.3
50 1.2 1.5
100 2.0 2.8
500 5.0 7.2

看到没?订单量越大,冲击成本非线性增长。500手的冲击成本是10手的14倍,而不是50倍。这就是为什么大单子一定要拆。

我常用的冲击模型是Almgren-Chriss模型,它把冲击分为两部分:

  • 永久冲击:你的订单改变了市场供需,价格回不去了
  • 临时冲击:你的订单只是暂时推高了价格,等流动性恢复价格会回来

基差交易里,我们最怕的是永久冲击。因为基差交易本质上是套利,如果价格被你推得回不来了,那套利空间就消失了。

避坑指南:

我曾经在焦煤的基差交易上栽过跟头。当时我算好了价差有8个点,结果因为订单太大,直接把现货价格推高了3个点,期货价格反而没动。最后平仓的时候,价差不但没回归,反而扩大了。这就是典型的永久冲击导致的失败。

所以我的建议是:在基差交易中,永远把冲击成本算到策略里。如果冲击成本超过预期利润的30%,这个交易就不值得做。

知识体系总览

下面这张图,是我自己整理的基差交易算法执行的核心逻辑。你可以把它当作一个检查清单,每次执行前过一遍。

基差交易算法执行核心逻辑 交易信号输入 时间切片策略 订单隐藏策略 冲击成本评估 TWAP / VWAP 按时间或成交量分配订单 减少对市场价格的冲击 冰山订单 / 随机化 隐藏真实订单量 防止被市场狙击 Almgren-Chriss 永久冲击+临时冲击 量化评估交易成本 最优执行方案 核心原则:在最小化市场冲击的前提下,完成基差交易的头寸建立与平仓

这张图把整个执行流程串起来了。从交易信号输入开始,你要同时考虑三个维度:怎么切时间、怎么藏订单、怎么算冲击。最后综合出一个最优执行方案。

说实话,算法执行这件事,没有银弹。每个品种、每个市场环境都不一样。但只要你掌握了TWAP/VWAP、冰山订单和冲击模型这三个工具,再结合自己的经验不断优化,执行效率一定能上一个台阶。

好了,这一节的内容就到这里。记住,好的策略需要好的执行来兑现。别让你的基差交易死在执行环节上。