3. 随机最优控制入门:HJB方程、随机微分方程、动态规划原理
各位同学,今天咱们聊点硬核的——随机最优控制。说实话,我刚入行做算法交易那会儿,觉得这东西就是数学家的玩具。直到有一次我在做高频做市策略,发现传统的最优控制根本扛不住市场噪音,才真正意识到随机性的威力。
这一章,我会带你从三个核心概念入手:随机微分方程(SDE)、动态规划原理、以及HJB方程。它们就像三根柱子,撑起了整个随机最优控制的大厦。你想想看,没有这些工具,你怎么在充满随机性的市场中做决策?
3.1 随机微分方程:市场噪声的数学建模
先说说随机微分方程。说白了,它就是描述「带噪声的演化过程」的数学工具。在量化交易里,我们常用它来建模资产价格。
最经典的例子是几何布朗运动:
dS(t) = μ S(t) dt + σ S(t) dW(t)
这里:
- μ 是漂移项,代表预期收益率
- σ 是波动率,代表不确定性
- dW(t) 是维纳过程的增量,也就是白噪声
嗯,这里要注意:dW(t) 不是普通的微分。它不可预测,方差随时间线性增长。我在项目中遇到过不少新手,直接把 dW(t) 当成 dt 来处理,结果模型全崩了。
3.2 动态规划原理:从后往前推的智慧
动态规划原理,说白了就是「从终点往回推」。你想想看,在随机环境中做决策,最怕的是什么?是信息不对称。你不知道未来会发生什么,但你知道当前的状态。
核心思想很简单:
- 把时间离散化成多个阶段
- 在每个阶段,根据当前状态做最优决策
- 从最后一个阶段开始,逆向递推
用数学语言表达,就是贝尔曼最优性原理:
V(t, x) = sup_{u} { f(t, x, u) dt + E[ V(t+dt, x+dx) ] }
这个公式看着吓人,其实意思很直白:当前的最优价值,等于立即回报加上未来价值的最优期望。
3.3 HJB方程:连续时间的动态规划
好,现在我们把动态规划从离散时间推广到连续时间。这就引出了HJB方程——随机最优控制的核心工具。
HJB方程的全称是 Hamilton-Jacobi-Bellman 方程。它长这样:
∂V/∂t + sup_{u} { f(t, x, u) + (∂V/∂x) μ(t, x, u) + (1/2) σ²(t, x, u) (∂²V/∂x²) } = 0
别被这一堆偏导数吓到。我来拆解一下:
- ∂V/∂t:价值函数随时间的变化
- f(t, x, u):立即回报函数
- (∂V/∂x) μ:状态变化带来的价值变化
- (1/2) σ² (∂²V/∂x²):随机性带来的二阶效应——这是最关键的一项
为什么会多出这个二阶项?因为随机过程不像确定性过程那样平滑。你想想看,布朗运动的路径是处处不可导的,所以我们需要用伊藤引理来处理。
3.4 三者之间的关系:一张图说清楚
这三个概念不是孤立的。它们的关系是这样的:
你看这张图就明白了:SDE 描述世界怎么动,动态规划告诉我们怎么决策,HJB 则给出了连续时间下的解析工具。三者形成一个闭环。
3.5 实战案例:一个简单的做市策略
光说不练假把式。咱们来看一个简化版的做市策略,感受一下这些工具怎么用。
假设你是一个做市商,只交易一只股票。你的库存是 q(t),股票价格服从几何布朗运动。你的目标是最大化期望收益,同时惩罚过大的库存风险。
这个问题可以建模成:
dS = μ S dt + σ S dW
dq = u dt (u 是你的交易速率)
目标:max E[ ∫ (p u - λ q²) dt ]
其中 p 是买卖价差,λ 是风险厌恶系数。
对应的HJB方程是:
∂V/∂t + sup_u { p u - λ q² + (∂V/∂q) u + μ S (∂V/∂S) + (1/2) σ² S² (∂²V/∂S²) } = 0
求解这个方程,你会得到最优交易速率:
u* = (p + ∂V/∂q) / (2λ)
这个结果很直观:价差越大,你越应该积极交易;库存风险越大,你越应该收敛。
3.6 数值求解:有限差分法
大多数HJB方程没有解析解,得靠数值方法。我个人最常用的是有限差分法。
基本思路:
- 把状态空间离散成网格
- 用差分近似代替偏导数
- 从终端时刻开始逆向迭代
一个简单的Python伪代码:
# 初始化网格
S_grid = np.linspace(S_min, S_max, N_S)
q_grid = np.linspace(q_min, q_max, N_q)
V = np.zeros((N_T, N_S, N_q))
# 终端条件
V[-1, :, :] = 0
# 逆向迭代
for t in range(N_T-2, -1, -1):
for i in range(N_S):
for j in range(N_q):
# 计算偏导数(差分近似)
dV_dq = (V[t+1, i, j+1] - V[t+1, i, j-1]) / (2 * dq)
dV_dS = (V[t+1, i+1, j] - V[t+1, i-1, j]) / (2 * dS)
d2V_dS2 = (V[t+1, i+1, j] - 2*V[t+1, i, j] + V[t+1, i-1, j]) / (dS**2)
# 求解最优控制
u_opt = (p + dV_dq) / (2 * λ)
# 更新价值函数
V[t, i, j] = (p*u_opt - λ*q_grid[j]**2) * dt + V[t+1, i, j]
3.7 本章小结
咱们这一章聊了不少东西。来捋一捋:
- SDE 是描述随机世界的语言,做量化交易离不开它
- 动态规划 是决策的骨架,从后往前推的思路永不过时
- HJB方程 是连续时间下的利器,把动态规划升华到了新高度
说实话,这三个概念我当年学的时候也觉得抽象。但当你真正在项目中用它们解决过问题之后,就会发现它们其实很自然。就像骑自行车,一开始觉得平衡难,学会了就再也忘不掉。
下一章,我们会把这些工具应用到 Mean Field Game 中,看看当无数个做市商同时博弈时,会发生什么有趣的现象。
公众号:蓝海资料掘金营,微信deep3321