4. 订单流分析:订单流的不平衡、订单到达率的泊松过程建模

做高频交易这些年,我越来越觉得——订单流才是市场的「心跳」。价格涨跌只是表象,真正驱动市场的,是那一笔笔订单的微观博弈。今天咱们就来聊聊订单流分析里两个核心概念:订单流不平衡,以及订单到达率的泊松过程建模。

4.1 订单流不平衡:市场的「供需温差」

说白了,订单流不平衡就是买方和卖方在某一时刻的「力量对比」。你想想看,如果买盘远大于卖盘,价格大概率要往上走。反之亦然。但这里有个坑——不是所有订单都「真心实意」。

核心定义: 订单流不平衡 = 主动买成交量 - 主动卖成交量

我在实盘里习惯用 订单流不平衡比率(OFIR) 来量化这个指标:

OFIR = (主动买量 - 主动卖量) / (主动买量 + 主动卖量)

OFIR 的取值范围在 -1 到 1 之间。正值表示买方占优,负值表示卖方占优。绝对值越大,力量越悬殊。

嗯,这里要注意——我曾经踩过一个坑:只看 OFIR 的绝对值,忽略了时间窗口。比如 1 秒内 OFIR 达到 0.8,和 10 秒内 OFIR 达到 0.8,含义完全不同。前者可能是突发大单,后者可能是持续吸筹。所以我现在都会结合时间窗口来看。

4.2 订单到达率的泊松过程建模

订单到达市场,其实是个随机过程。我个人最喜欢用泊松过程来建模。为什么?因为简单、有效,而且数学上很优雅。

泊松过程有两个关键假设:

  • 独立性: 订单到达事件之间相互独立
  • 平稳性: 在足够短的时间内,到达率 λ 是常数

当然,真实市场里这两个假设都不完全成立。但做量化嘛,我们追求的是「足够好」而不是「完美」。

4.2.1 泊松过程的数学表达

在时间区间 [0, t] 内,到达 k 笔订单的概率为:

P(N(t) = k) = (λt)^k * e^(-λt) / k!

其中 λ 是单位时间内的平均到达率。这个公式看着复杂,其实用 Python 实现起来很简单:

import numpy as np
from scipy.stats import poisson

# 假设每秒平均到达 10 笔订单
lambda_rate = 10.0
time_window = 1.0

# 计算 1 秒内到达 8 笔订单的概率
prob = poisson.pmf(8, lambda_rate * time_window)
print(f"P(8 orders in 1s) = {prob:.4f}")

4.2.2 如何估计 λ

实际交易中,λ 是随时间变化的。我一般用滑动窗口法来估计:

def estimate_lambda(order_timestamps, window_size=1.0):
    """
    估计当前时刻的订单到达率 λ
    order_timestamps: 最近 N 笔订单的时间戳列表(单位:秒)
    window_size: 滑动窗口大小(单位:秒)
    """
    current_time = order_timestamps[-1]
    window_start = current_time - window_size
    
    # 统计窗口内的订单数量
    orders_in_window = [t for t in order_timestamps 
                       if t >= window_start]
    
    lambda_hat = len(orders_in_window) / window_size
    return lambda_hat
实战技巧: 我建议用指数加权移动平均(EWMA)来平滑 λ 的估计值,这样既能快速响应市场变化,又不会过度反应。

4.3 订单流不平衡与泊松过程的结合

把这两个概念结合起来,就能构建一个简单的交易信号。我个人常用的方法是:

  1. 分别估计主动买订单的到达率 λ_buy 和主动卖订单的到达率 λ_sell
  2. 计算两者的比值或差值
  3. 当比值超过某个阈值时,触发交易信号

举个例子:

def order_flow_signal(buy_timestamps, sell_timestamps, 
                      window_size=1.0, threshold=1.5):
    lambda_buy = estimate_lambda(buy_timestamps, window_size)
    lambda_sell = estimate_lambda(sell_timestamps, window_size)
    
    ratio = lambda_buy / lambda_sell
    
    if ratio > threshold:
        return "BUY_SIGNAL"
    elif ratio < 1/threshold:
        return "SELL_SIGNAL"
    else:
        return "NEUTRAL"
注意: 泊松过程假设订单到达是独立的。但在高频交易中,大单拆分、算法交易会导致订单到达存在自相关性。我建议在使用前先做一下自相关检验,否则模型可能失效。

4.4 知识体系总览

下面这张图是我自己梳理的订单流分析知识框架,你可以对照着看:

订单流分析知识体系 订单流不平衡 泊松过程建模 主动买 vs 主动卖 OFIR 比率 到达率 λ 估计 概率计算 时间窗口选择(1s/5s/10s) EWMA 平滑处理 交易信号生成(BUY / SELL / NEUTRAL) 核心逻辑:订单流不平衡 → 泊松建模 → 信号生成

4.5 实战中的避坑指南

做订单流分析这几年,我总结了几条血泪教训:

  • 不要迷信单一指标: 我曾经只靠 OFIR 做交易,结果在震荡市里被来回打脸。后来加入了成交量确认,效果才好起来。
  • 注意数据颗粒度: 用 tick 级数据还是秒级数据,结果可能天差地别。我建议先做敏感性分析,找到最适合你策略的时间尺度。
  • 泊松模型不是万能药: 在极端行情下(比如闪崩),订单到达率会瞬间飙升,泊松假设基本失效。这时候我会切换到极值理论模型。
我的一个小习惯: 每天收盘后,我会把当天的订单流数据回放一遍,看看哪些信号是有效的,哪些是噪音。这个习惯帮我避开了很多坑。

好了,订单流分析的核心内容就这些。记住一句话:订单流是市场的「语言」,读懂它,你就能听懂市场在说什么。

专注资料整理