3. 数学基础:随机最优控制与HJB方程

好,咱们进入第三讲。说实话,这一讲是整门课最硬核的数学基础。你可能会觉得有点枯燥,但相信我——没有这个基础,后面那些看起来炫酷的策略,其实都是空中楼阁。

我自己刚入行时,也试图跳过这些数学推导,直接写代码。结果呢?策略回测漂亮,实盘一跑就崩。后来我才明白,高频交易本质上就是一个随机最优控制问题。你不理解HJB方程,就永远不知道你的策略到底在优化什么。

3.1 为什么高频交易需要随机控制?

先问个问题:你在做高频交易时,面临的最大挑战是什么?

我个人觉得,是不确定性。订单流随机、价格波动随机、对手行为随机。你没法预测下一秒会发生什么,但你必须做出决策——报单还是不报?撤单还是不撤?

这其实就是随机最优控制的标准场景:

  • 状态变量:当前持仓、订单簿状态、市场微观结构
  • 控制变量:报价价格、报单数量、撤单时机
  • 随机扰动:外来订单流、价格跳跃、信息事件
  • 目标函数:最大化期望收益、最小化风险、控制库存

说白了,你就是在做一个带随机性的动态优化。而HJB方程,就是解决这类问题的核心工具。

3.2 从确定性到随机性:一个直观的跳跃

如果你学过经典最优控制,应该记得确定性系统的HJB方程长这样:

-∂V/∂t = max_u { F(x,u) + (∂V/∂x) · f(x,u) }

其中V是值函数,x是状态,u是控制,f是系统动力学。

但到了高频交易里,系统是随机的。价格不是平滑变化的,而是带扩散项的。所以我们需要引入伊藤微积分

我记得第一次接触伊藤引理时,整个人是懵的。为什么多了一个二阶项?后来做了一次模拟才明白——随机过程的二阶项不是小量,它贡献了方差。在高频交易里,方差就是风险,就是成本。

随机HJB方程的标准形式:

-∂V/∂t = max_u { F(x,u) + (∂V/∂x) · μ(x,u) + ½ tr( σ(x,u)σᵀ(x,u) · ∂²V/∂x² ) }

注意那个½ tr(...)项,这就是伊藤修正项。它捕捉了随机性对值函数的影响。

核心洞察:在高频交易中,这个二阶项往往主导了最优策略。忽略它,你的策略就会过度交易。

3.3 高频交易中的典型HJB问题

咱们来看一个具体的例子——最优做市商问题。这是我在项目中实际做过的。

假设你是一个做市商,在订单簿两边同时报价。你的状态变量是:

  • 库存 q:当前持有的资产数量
  • 现金 x:当前现金余额
  • 时间 t:剩余交易时间

你的控制变量是:

  • 买价 p_b:你愿意买入的价格
  • 卖价 p_a:你愿意卖出的价格

随机扰动来自:

  • 外来订单到达(泊松过程)
  • 价格波动(布朗运动)

目标函数:最大化终端财富的期望效用,同时惩罚库存风险。

对应的HJB方程:

-∂V/∂t = max_{p_b, p_a} { 
  λ_b(p_b) · [ V(x+p_b, q-1, t) - V(x,q,t) ] +
  λ_a(p_a) · [ V(x+p_a, q+1, t) - V(x,q,t) ] +
  μ · ∂V/∂x + ½ σ² · ∂²V/∂x²
}

其中λ_b和λ_a是到达率,依赖于你的报价。

嗯,这里要注意:这个方程看起来复杂,但它的结构其实很清晰——左边是时间衰减,右边是控制带来的跳跃收益加上扩散项

3.4 求解HJB方程的实用方法

说实话,解析解很少见。大多数情况下,你需要数值求解。我常用的方法有:

方法 适用场景 精度 速度
有限差分法 低维状态空间(1-2维) 中等
策略迭代 控制空间离散
深度强化学习 高维状态空间 中等 快(推理时)
近似动态规划 大规模问题 中等

我个人习惯先用有限差分法在小规模问题上验证模型,再切换到深度强化学习做大规模部署。

实战技巧:求解HJB方程时,边界条件很重要。比如库存不能无限大,价格不能为负。我曾经因为边界条件设错,导致策略在极端行情下疯狂报单,差点把账户打爆。

3.5 避坑指南:HJB方程应用的常见错误

我踩过的坑不少,挑几个典型的说说:

  • 忽略二阶项:有些人为了简化,直接去掉伊藤修正项。结果策略对波动率完全不敏感,一遇到高波动行情就崩。
  • 时间离散化太粗:高频交易的时间尺度是微秒级的。如果你用秒级离散化,HJB方程的解会严重失真。
  • 假设参数恒定:市场微观结构是时变的。波动率、到达率都在变。你需要在线估计这些参数,或者用鲁棒控制。
  • 忽略执行成本:HJB方程假设你可以瞬间调整控制。但实际中,撤单、改单都有延迟和成本。

我曾经在一个项目中,用固定参数的HJB方程做做市策略。回测漂亮,实盘第一天就亏了。后来发现,那天市场波动率突然翻倍,而我的策略还在用旧参数。从那以后,我所有策略都加了在线参数估计模块

3.6 知识体系总览

下面这张图,是我自己总结的HJB方程在高频交易中的应用框架。你把它存下来,后面每一讲都会用到。

随机最优控制与HJB方程知识体系 高频交易最优控制问题 状态 · 控制 · 随机扰动 · 目标函数 HJB方程 -∂V/∂t = max_u { F + (∂V/∂x)·μ + ½ tr(σσᵀ·∂²V/∂x²) } 确定性项 + 伊藤修正项(随机性) 解析方法 • 线性二次型 • 指数效用函数 • 特殊结构问题 数值方法 • 有限差分法 • 策略迭代 • 深度强化学习 应用场景 • 最优做市 • 最优执行 • 统计套利 最优策略:控制律 u*(x,t) 实时决策 · 风险控制 · 收益最大化
重要提醒:HJB方程不是万能的。它假设值函数光滑可微,但实际中可能不满足。比如订单簿价格是离散的,值函数可能不可微。这时候你需要用粘性解近似动态规划来处理。

3.7 一个简单的代码示例

最后,给你一个用有限差分法求解一维HJB方程的Python代码片段。这是做市商问题的简化版:

import numpy as np

def solve_hjb_one_dim(S, T, Nx, Nt, r, sigma, gamma):
    """
    求解一维HJB方程(简化做市商问题)
    S: 价格网格
    T: 时间horizon
    Nx: 空间网格数
    Nt: 时间网格数
    r: 无风险利率
    sigma: 波动率
    gamma: 风险厌恶系数
    """
    dx = (S[-1] - S[0]) / (Nx - 1)
    dt = T / Nt
    
    # 初始化值函数
    V = np.zeros((Nt+1, Nx))
    V[-1, :] = 0  # 终端条件
    
    # 向后迭代
    for n in range(Nt-1, -1, -1):
        # 空间导数(中心差分)
        dVdx = np.gradient(V[n+1], dx)
        d2Vdx2 = np.gradient(dVdx, dx)
        
        # HJB方程更新(简化版,忽略控制优化)
        V[n] = V[n+1] + dt * (
            r * S * dVdx + 
            0.5 * sigma**2 * S**2 * d2Vdx2 -
            gamma * V[n+1]  # 风险惩罚项
        )
    
    return V

# 使用示例
S = np.linspace(90, 110, 101)
V = solve_hjb_one_dim(S, T=1.0, Nx=101, Nt=1000, 
                      r=0.05, sigma=0.2, gamma=0.1)

这个代码很粗糙,但展示了核心逻辑。实际项目中,你需要在每个时间步求解一个优化问题,找到最优控制u*。

好了,这一讲就到这里。HJB方程是高频交易策略的理论基石。你花时间把它吃透,后面每一讲都会轻松很多。


公众号:蓝海资料掘金营,微信deep3321