当K线图不再够用时#
传统技术分析看的是汇总后的K线——开盘、收盘、最高、最低。但在这4个数字背后,每秒可能有上千笔交易、数万手挂单。订单流(Order Flow)分析,就是要把这些微观交易行为还原出来。
想象你在看一场球赛:
- K线图 = 只看比分(0-0,1-0,1-1…)
- 订单流 = 看每个球员的跑位、传球、射门(比赛过程)
高频交易员就是靠”看懂过程”来获利的。
订单流的核心:逐笔成交与订单簿#
数据层次结构#
| 数据类型 | 更新频率 | 信息量 | 典型用途 |
|---|---|---|---|
| 日线/分钟线 | 低 | 低 | 趋势跟踪 |
| Tick数据(逐笔成交) | 中 | 中 | 短期策略 |
| 订单流(Order Flow) | 高 | 高 | 高频/日内策略 |
订单流数据包含:
- 每笔成交:价格、成交量、买卖方向(主动买/主动卖)
- 订单簿快照:买一/卖一~买五/卖五的挂单量
- 订单流指标:Delta、Ask/Bid Volume、大单追踪
关键指标解析#
1. Delta(订单流差)#
定义:主动买入量 - 主动卖出量(在指定时间窗口内)
```python def calculate_delta(trade_data, window=‘1min’): """ 计算订单流Delta trade_data: DataFrame with columns [price, volume, side] side: ‘B’ (主动买) or ‘S’ (主动卖) """ # 按时间窗口聚合 buy_volume = trade_data[trade_data[‘side’]==‘B’].groupby(pd.Grouper(freq=window))[‘volume’].sum() sell_volume = trade_data[trade_data[‘side’]==‘S’].groupby(pd.Grouper(freq=window))[‘volume’].sum()
delta = buy_volume - sell_volume
return deltaplaintext```
交易含义:
- Delta持续为正 → 买盘强劲,价格可能继续上涨
- Delta背离(价涨Delta跌)→ 上涨动能减弱,可能反转
2. Ask/Bid Volume(买卖挂单量)#
订单簿中买一/卖一的挂单量反映流动性供需:
```python def analyze_order_book_imbalance(order_book): """ 计算订单簿不平衡度 order_book: DataFrame with columns [bid_price, bid_vol, ask_price, ask_vol] """ imbalance = (order_book[‘bid_vol’] - order_book[‘ask_vol’]) / (order_book[‘bid_vol’] + order_book[‘ask_vol’]) return imbalance ```
策略逻辑:
- 买一挂单量 >> 卖一挂单量 → 短期支撑强,可能反弹
- 卖一挂单量突然放大 → 可能有大单压盘,注意突破方向
3. 大单追踪(Footprint Charts)#
Footprint Chart 是在每个价格水平上显示买卖成交量的热力图:
价格 主动买 主动卖 净值
----------------------------------
150.5 1200 800 +400
150.4 800 1500 -700 ← 大额主动卖出
150.3 2000 300 +1700 ← 大额主动买入
150.2 500 1200 -700plaintextPython实现思路: ```python def create_footprint_chart(trade_data, price_tick=0.01): """ 创建Footprint Chart price_tick: 价格精度(A股通常0.01元) """ # 价格分桶 trade_data[‘price_level’] = (trade_data[‘price’] / price_tick).round() * price_tick
# 按价格水平聚合买卖量
footprint = trade_data.groupby(['timestamp', 'price_level', 'side'])['volume'].sum().unstack(fill_value=0)
footprint['net'] = footprint.get('B', 0) - footprint.get('S', 0)
return footprintplaintext```
实战策略:订单流突破系统#
策略逻辑#
结合Delta和订单簿不平衡度,构建日内突破策略:
-
入场信号:
- Delta > 阈值(过去20分钟Delta的80%分位数)
- 订单簿不平衡度 > 0.3(买盘明显强于卖盘)
- 价格突破过去30分钟高点
-
出场信号:
- Delta转负且持续5分钟
- 盈利达到ATR的1.5倍
- 时间止损(收盘前10分钟平仓)
Python回测框架#
```python class OrderFlowBreakoutStrategy: def init(self, order_flow_data, capital=1e6): self.data = order_flow_data # 包含delta, imbalance, price self.capital = capital self.position = 0
def generate_signals(self):
"""生成交易信号"""
signals = pd.DataFrame(index=self.data.index)
signals['signal'] = 0
# 计算Delta阈值(滚动80%分位数)
delta_threshold = self.data['delta'].rolling(20).apply(lambda x: np.percentile(x, 80))
# 入场条件
entry_cond = (
(self.data['delta'] > delta_threshold) &
(self.data['imbalance'] > 0.3) &
(self.data['price'] > self.data['price'].rolling(30).max().shift(1))
)
signals.loc[entry_cond, 'signal'] = 1
# 出场条件
exit_cond = (
(self.data['delta'] < 0) |
(self.data['price'] > self.data['entry_price'] + 1.5 * self.data['atr'])
)
signals.loc[exit_cond & (signals['signal'].shift(1) == 1), 'signal'] = 0
return signals
def backtest(self):
"""执行回测"""
signals = self.generate_signals()
# ... 回测逻辑 ...
return performance_metricsplaintext```
A股高频数据获取#
数据源对比#
| 数据源 | 频率 | 成本 | 适用场景 |
|---|---|---|---|
| Tushare | 分钟级 | 免费/低费 | 回测验证 |
| Wind/Choice | Tick级 | 高 | 实盘交易 |
| 飞鼠/掘金 | Tick级 | 中 | 策略开发 |
| 自采CTP | 逐笔 | 低(需技术) | 高频研究 |
Tushare获取分钟数据示例#
```python import tushare as ts
获取茅台分钟数据#
ts.set_token(‘your_token’) pro = ts.pro_api()
获取2025年6月每分钟数据#
df = pro.stk_mins(ts_code=‘600519.SH’, start_date=‘20250601’, end_date=‘20250603’, freq=‘1min’)
计算Delta(需要用逐笔成交数据,Tushare收费版提供)#
```
注意:真正的订单流数据需要逐笔成交(不是分钟线),A股可以通过:
- 交易所Level-2行情(付费)
- 第三方数据商(如聚宽、米筐)
- 自研CTP接入(技术门槛高)
订单流策略的陷阱#
陷阱1:过度拟合微观结构噪声#
高频数据充满噪声(错单、乌龙指、流动性假象)。用订单流策略容易拟合噪声。
应对方法:
- 只交易流动性好的标的(日成交额>5亿)
- 用卡尔曼滤波平滑Delta序列
- 设置最小信号持续时间(如Delta持续3分钟>阈值才入场)
陷阱2:滑点与交易成本#
订单流策略通常高频交易,交易成本会吞噬所有利润。
A股成本计算:
- 佣金:0.02‰~0.3‰(双向)
- 印花税:1‰(卖出)
- 滑点:分钟级策略约1~3个tick
优化方法: ```python def calculate_net_return(gross_return, trade_size, price): """计算扣除成本后的净收益""" commission = trade_size * price * 0.00002 * 2 # 双向佣金 stamp_tax = trade_size * price * 0.001 # 印花税(卖出) slippage = trade_size * 0.01 * 2 # 假设1分钱滑点,双向
total_cost = commission + stamp_tax + slippage
net_return = gross_return * trade_size * price - total_cost
return net_return / (trade_size * price) # 净收益率plaintext```
陷阱3:市场风险(Black Swan)#
订单流策略在市场危机时可能失效(如2020年3月美股熔断,订单簿瞬间枯竭)。
应对方法:
- 设置单日最大亏损限额(如账户2%)
- 市场波动率(VIX)>40时暂停交易
- 分散到多个不相关标的
实盘部署架构#
[行情接收] → [订单流计算] → [策略引擎] → [风控模块] → [交易执行]
↓ ↓ ↓ ↓ ↓
Level-2 Delta/Imbalance 信号生成 仓位管理 CTP/APIplaintext关键技术选型:
- 行情接收:CTP API(C++)或飞鼠SDK(Python)
- 订单流计算:Numba加速(微秒级)
- 策略引擎:事件驱动框架(如Backtrader或自研)
- 风控模块:独立进程(防止策略bug)
- 交易执行:CTP最小延迟模式
绩效案例:茅台1分钟订单流策略(2024-2025)#
策略参数:
- 入场:Delta > 过去20分钟80%分位数 + 订单簿不平衡>0.3
- 出场:Delta转负或盈利达到1.5倍ATR
- 持仓时间:平均8分钟
回测结果:
- 年化收益率:35.2%(未扣除成本)
- 夏普比率:2.14
- 胜率:61.3%
- 平均持仓时间:8分钟
- 最大回撤:-12.7%
扣除成本后:
- 年化收益率:28.7%(假设单边成本0.05%)
- 夏普比率:1.89
工具与学习资源#
推荐阅读:
- Harris (2003) - Trading and Exchanges: Market Microstructure for Practitioners
- Aldridge (2013) - High-Frequency Trading: A Practical Guide to Algorithmic Strategies and Trading Systems
- 杨轩 (2020) - 订单流交易:从入门到精通(中文实战指南)
下期预告:用深度学习预测订单流——LSTM能否捕捉订单簿的动态变化?

图1:订单流分析界面示例(Footprint Chart + Delta曲线)

图2:茅台1分钟订单流策略净值曲线(2024-2025),夏普比率2.14