OFI信号过滤机制(动态阈值、波动率调整、成交量标准化)

一、为什么「原始 OFI」几乎不能直接用?

先给一个结论:

不经过过滤的 OFI,本质是一个“高噪声、强状态依赖”的微观统计量

问题主要有四个:

  1. 不同时间段强度完全不同(开盘 vs 盘中 vs 收盘)
  2. 不同市场状态不可比(高波动 vs 低波动)
  3. 不同流动性阶段失真(深度薄时 OFI 被放大)
  4. 极端值多、尾部厚(order cancel / spoof 会炸)

所以专业策略的第一步不是“如何用 OFI 下单”,而是:

如何把 OFI 变成一个“状态无关、尺度稳定”的信号

这正是下面三种方法的目的。


二、动态阈值(Dynamic Threshold)

1️⃣ 为什么要动态阈值?

如果你用:

if OFI > 100: buy
if OFI < -100: sell

那么你已经犯了一个致命错误

你假设 OFI 的统计分布是稳定的

现实是:

  • 不同时段 OFI 的均值、方差完全不同
  • 同一阈值在不同时刻含义不一样

2️⃣ 专业做法:分布自适应阈值

方法 A:滚动 Z-Score(最常见)

定义:

z_OFI(t) = (OFI(t) - μ_OFI(t)) / σ_OFI(t)

其中:

  • μ、σ 是 滚动窗口(如最近 1–5 分钟)
  • 阈值用 统计显著性 表示

例如:

if z_OFI > 2.0 → 买方显著占优
if z_OFI < -2.0 → 卖方显著占优

📌 专业点

  • 不固定窗口长度
  • 用 EWMA(指数加权)而不是简单滑窗

方法 B:分位数阈值(HFT 很爱)

直接用历史分布:

Upper = Q95(OFI)
Lower = Q5(OFI)

触发条件:

OFI > Upper → 极端买压
OFI < Lower → 极端卖压

优点:

  • 对厚尾分布更稳
  • 对 spoof / cancel 冲击不敏感

3️⃣ 专业判断标准

一个好的动态阈值应满足:

✅ 信号触发频率稳定
✅ 不随交易时段剧烈漂移
✅ 不因流动性变化误触发

如果你回测发现:

不同时间段信号强度一致

说明你做对了。


三、波动率调整(Volatility Scaling)

1️⃣ 为什么必须做波动率调整?

同样的 OFI = 500:

  • 低波动市场 → 极强信号
  • 高波动市场 → 普通噪声

如果不调整,你会在:

  • 高波动时 过度交易
  • 低波动时 错失机会

2️⃣ 专业做法:OFI / 波动率

基础形式

OFI_scaled = OFI / σ_price

其中 σ_price 可以是:

  • 高频 realized volatility
  • mid-price returns 的 EWMA std
  • micro-price volatility

更专业版本(状态感知)

OFI_scaled = OFI / (σ_price × √Δt)

👉 把 OFI 映射到“单位风险暴露下的压力”


3️⃣ 实战意义

波动率调整后:

  • 信号 ≈ “单位价格风险下的订单流强度”
  • 可直接用于:
    • 仓位大小(position sizing)
    • 执行 aggressiveness

例如:

position ∝ tanh(OFI_scaled)

📌 很多做市/alpha 执行策略都是这么干的


四、成交量标准化(Volume / Liquidity Normalization)

1️⃣ 为什么成交量是 OFI 的“隐形放大器”?

OFI 本身是:

数量 × 方向

但在不同流动性环境下:

  • 同样的订单变化,对价格冲击不同

举例:

  • 100 手 OFI / 深度 10,000 → 几乎没影响
  • 100 手 OFI / 深度 300 → 灾难级冲击

2️⃣ 专业做法 1:按盘口深度归一化

OFI_norm = OFI / (Depth_bid + Depth_ask)

Depth 可以是:

  • L1 深度
  • L1–L5 加权深度
  • 有时用 sqrt(depth) 防止过度缩放

3️⃣ 专业做法 2:按成交量节奏归一化

OFI_norm = OFI / Volume_window

本质上:

衡量「在当前交易活跃度下,这个 OFI 是否异常」

4️⃣ 更高级:流动性状态条件化

实盘里常见的是:

OFI_adj = OFI × f(spread, depth, volume)

例如:

  • 点差扩大 → OFI 权重下降
  • 深度变薄 → 提高 OFI 过滤阈值

五、三者组合后的「专业 OFI 信号」

一个真实可用的 OFI 信号,往往长这样:

Signal(t) =
    zscore(
        OFI(t)
        / σ_price(t)
        / Depth(t)
    )

然后:

if Signal > 2 → long
if Signal < -2 → short

并且:

  • 仓位 ∝ |Signal|
  • 执行方式随流动性自适应

六、行业共识总结(非常重要)

OFI ≠ alpha 本身
OFI = 市场微观状态的“放大镜”

专业团队使用 OFI 的方式是:

用途是否直接交易
预测极短期价格方向❌ 单独不用
确认已有信号
执行强度调节
做市风险管理
Alpha 组合输入

Read more

跑步的技巧(滚动落地)

“滚动落地(rolling contact / rolling foot strike)”不是一种教条式的“脚法”,而是一种 让冲击沿着整只脚、整条后链逐级传递的落地机制。 它的核心不是“你先用哪儿着地”,而是: 你的脚落地之后,冲击是不是像轮子一样滚过去,而不是像锤子一样砸下去。 这就是滚动落地的本质。 一、什么叫“滚动落地”? 你可以把它理解成两种完全不同的落地方式: 1. 砸地(撞击式) 脚像锤子一样拍到地上: * 要么后跟先砸 * 要么前掌先戳 * 冲击集中在一个点 * 一个结构瞬间吃掉大部分载荷 结果就是: * 后跟砸 → 膝盖难受 * 前掌戳 → 前脚掌磨烂 * 都不是长跑友好模式 这叫 撞击式着地(impact strike)。 2. 滚地(滚动式) 脚像轮胎一样“滚”过地面: * 不是某一点硬砸 * 而是外侧中足先轻触 * 再向前滚到前掌 * 最后从大脚趾蹬离

By SHI XIAOLONG

AMI的优越性

世界模型(World Models)的具体例子 如下,我按类型分类,便于理解。每类都附带实际实现、演示效果和应用场景。 1. Yann LeCun / Meta 的 JEPA 系列(最直接对应“世界模型”概念) 这些是 LeCun 主张的非生成式抽象预测世界模型代表。 * I-JEPA(Image JEPA,2023) 输入一张图像,模型把不同区域(context 和 target)编码成抽象表示,然后预测 target 的表示(不在像素级别重建)。 例子:给定一张遮挡了部分物体的图片,模型能预测“被遮挡物体的大致位置和属性”,构建对物体持久性和空间关系的理解。 这是一个“原始世界模型”,能学习物理常识(如物体不会凭空消失)。 * V-JEPA / V-JEPA 2(Video JEPA,

By SHI XIAOLONG

什么是:“世界模型(World Models)”

世界模型(World Models) 是人工智能领域的一个核心概念,尤其在 Yann LeCun 等研究者推动的下一代 AI 架构中占据中心位置。它指的是 AI 系统在内部构建的对现实世界的抽象模拟或内部表示,让机器能够像人类或动物一样“理解”物理世界、预测未来、规划行动。 简单比喻 想象你闭上眼睛也能“看到”房间里的物体会如何移动、碰撞或掉落——这就是你大脑里的世界模型。AI 的世界模型就是类似的“数字孪生”(digital twin)或“内部模拟器”:它不是简单记住数据,而是学习世界的动态、因果关系和物理直觉(如重力、物体持久性、遮挡、因果等)。 为什么需要世界模型? 当前主流的大型语言模型(LLM) 擅长处理文本(统计模式预测),但存在根本局限: * 缺乏对物理世界的真正理解 → 容易“幻觉”、无法可靠规划。 * 样本效率低 → 人类/

By SHI XIAOLONG

K线周期可配置化设计方案

K线周期可配置化设计方案 1. 背景与目标 当前 Beta 套利策略的 K 线周期硬编码为 "1h",分散在多个文件中。需要: 1. 将 K 线周期从 1h 改为 2h 2. 提取为环境变量 BETA_ARB_KLINE_INTERVAL,使其可在 .env 中配置 2. 影响范围分析 2.1 需要修改的文件(共 6 个) 文件 硬编码位置 修改内容 src/trading/config.py BetaArbConfig dataclass 新增 kline_interval 字段,

By SHI XIAOLONG