第二十章:算法交易与价格发现
聊到价格发现,很多人第一反应是订单簿、是买卖价差。但说实话,真正在市场上每天跟价格博弈的,是那些看不见的算法。我做了这么多年量化,最深的感触就是:算法交易不是简单的拆单工具,它本身就是价格发现过程的一部分。
这一章,我们来聊聊几个最经典的算法——TWAP、VWAP、Iceberg订单,以及它们对市场质量的影响。
20.1 TWAP:时间加权平均价格算法
TWAP,全称Time-Weighted Average Price。说白了,就是把一个大单拆成很多小单,在固定的时间间隔里均匀地扔出去。
核心逻辑:
- 把交易时间分成N个等长的时间片
- 每个时间片内,交易等量的股票
- 目标是让成交均价接近这段时间内的平均价格
我记得刚入行时,有个前辈跟我说:「TWAP是最笨的算法,但也是最不容易出错的。」后来我理解了这句话——它不考虑市场状态,只是机械地执行。但正因为简单,它的行为是可预测的。
来看一个简单的TWAP实现:
def twap_executor(volume, start_time, end_time, num_slices):
"""
简单的TWAP执行器
volume: 总成交量
start_time, end_time: 交易时间区间
num_slices: 切片数量
"""
slice_volume = volume / num_slices
time_interval = (end_time - start_time) / num_slices
orders = []
for i in range(num_slices):
order_time = start_time + i * time_interval
orders.append({
'time': order_time,
'volume': slice_volume,
'side': 'sell' # 假设卖出
})
return orders
20.2 VWAP:成交量加权平均价格算法
VWAP比TWAP聪明一点。它不按时间均匀分配,而是按历史成交量分布来分配订单。
为什么这么做?
你想想看,早盘和尾盘的成交量通常比中午大。如果你在中午也按同样的速度下单,很容易把价格打偏。VWAP的思路是:在成交量大的时段多下,成交量小的时段少下。
VWAP的计算公式:
VWAP = Σ(价格_i × 成交量_i) / Σ(成交量_i)
算法执行的目标,就是让我们的成交均价尽量接近这个值。
我习惯用过去20个交易日的分钟级成交量数据来做预测。当然,遇到财报日或者分红日,这个预测会偏差很大——嗯,这时候我会手动调整权重。
20.3 Iceberg订单:冰山一角
Iceberg订单,也叫冰山订单。它只暴露订单的一部分,剩下的藏在「水下」。
为什么需要Iceberg?
假设你想卖出100万股。如果你直接把订单挂出去,所有人都能看到。结果是什么?买方会压价,你的成交价会越来越低。Iceberg订单可以隐藏真实意图。
Iceberg订单的参数:
- 总数量:你想成交的总量
- 显示数量:每次暴露在订单簿上的数量
- 触发机制:当前显示的部分成交后,自动补充新的显示量
一个简单的Iceberg订单逻辑:
class IcebergOrder:
def __init__(self, total_volume, display_volume, price, side):
self.total_volume = total_volume
self.display_volume = display_volume
self.remaining_volume = total_volume
self.price = price
self.side = side
def get_display_order(self):
"""返回当前需要显示在订单簿上的订单"""
if self.remaining_volume <= 0:
return None
show = min(self.display_volume, self.remaining_volume)
return {'price': self.price, 'volume': show, 'side': self.side}
def on_fill(self, filled_volume):
"""成交后的处理"""
self.remaining_volume -= filled_volume
if self.remaining_volume > 0:
# 重新挂单,显示新的冰山一角
return self.get_display_order()
return None
20.4 算法交易对市场质量的影响
这个问题,我思考了很多年。算法交易到底是让市场更好了,还是更坏了?
正面影响:
- 降低交易成本:算法交易减少了人工干预,买卖价差收窄了
- 提高流动性:高频做市商的存在,让订单簿更「厚」了
- 价格发现更高效:信息能更快地反映到价格中
负面影响:
- 增加波动性:2010年的闪电崩盘就是算法交易引发的连锁反应
- 信息不对称:有算法的机构比散户有优势
- 市场操纵风险:比如「幌骗」策略(spoofing)
我曾经参与过一个研究项目,分析算法交易对市场质量的影响。我们用了三年的数据,发现:
| 指标 | 算法交易占比低 | 算法交易占比高 | 变化 |
|---|---|---|---|
| 买卖价差 | 0.05% | 0.03% | ↓ 40% |
| 市场深度 | 100万股 | 250万股 | ↑ 150% |
| 日内波动率 | 1.2% | 1.5% | ↑ 25% |
| 价格效率 | 0.8 | 0.95 | ↑ 18.75% |
你看,算法交易确实让市场更有效率了,但也带来了更大的波动。这就像开车——高速公路上效率高,但一旦出事,后果也更严重。
20.5 知识体系总览
下面这张图,是我自己梳理的算法交易与价格发现的知识框架。你可以把它当作本章的「地图」:
最后说一句:算法交易不是黑箱。你越理解它的原理,就越能驾驭它。TWAP、VWAP、Iceberg只是入门,后面还有更复杂的实施缺口算法、适应性算法等等。但万变不离其宗——核心都是平衡「执行成本」和「市场冲击」这两个目标。