4. 从N人博弈到平均场:Nash均衡、对称性假设、平均场极限推导

好,咱们今天聊点硬核的。从N个交易者互相博弈,到用平均场理论来近似,这中间到底发生了什么?我当年第一次接触这个推导时,也觉得有点绕。但后来在实盘项目中踩过坑,才真正理解——这玩意儿不是纯数学游戏,它直接决定了你的策略能不能跑起来。

4.1 N人博弈的困境:Nash均衡到底在哪?

先想想最原始的场景。市场里有N个交易者,每个人都在做自己的买卖决策。每个人都知道,自己的收益不光取决于自己怎么操作,还取决于其他N-1个人怎么操作。这就是典型的N人博弈。

理论上,我们要找的是Nash均衡——没人愿意单方面改变自己的策略。但问题来了:

  • 计算量爆炸:每个人的策略空间是连续的(买卖多少、何时买卖),N个人联合起来,解空间维度是N×连续空间。N=10时还能算,N=1000时直接歇菜。
  • 信息需求不现实:每个交易者需要知道所有人的策略才能做最优决策。你想想看,在真实市场里,你连隔壁交易员的持仓都不知道,更别说他的策略函数了。
  • 均衡可能不存在:即使存在,也可能有多个均衡,你根本不知道市场会收敛到哪一个。

核心痛点:N人博弈的Nash均衡,在算法交易中几乎无法直接求解。我见过不少团队试图用强化学习硬解,结果训练时间以周为单位,而且泛化能力极差。

4.2 对称性假设:让问题变得可解

那怎么办?我们得做点合理的简化。我个人习惯从对称性入手。

假设所有交易者都是同质的——他们有相同的风险偏好、相同的成本结构、相同的市场接入能力。当然,现实中交易者千差万别,但你会发现,在流动性好的市场里,大部分高频做市商的策略其实长得差不多。嗯,这里要注意,对称性假设不是忽略差异,而是抓住主要矛盾。

对称性假设具体包含:

  1. 策略对称:所有交易者使用相同形式的策略函数,只是参数可能不同。
  2. 收益对称:每个人的收益函数结构相同,只取决于自己的状态和市场的整体分布。
  3. 信息对称:每个人看到的信息集是相同的(虽然具体数值可能不同)。

有了对称性,N人博弈就变成了一个代表性交易者的问题。但这里有个坑——你仍然需要知道其他人的策略分布,才能算自己的最优策略。说白了,还是耦合的。

我的经验:对称性假设在实际项目中最大的价值,是让模型参数从O(N²)降到了O(1)。我曾经在一个期权做市项目里,用对称性假设把状态空间从10^6压缩到了10^3,训练时间从两周缩短到两小时。

4.3 平均场极限:当N→∞时发生了什么

好,现在进入最精彩的部分。当N趋向无穷大时,单个交易者对市场的影响趋近于零。这意味着什么?

每个交易者不再需要关心其他个体,只需要关心市场的整体分布——也就是所有交易者状态的统计量。这个统计量,就是平均场。

数学上,我们定义:

令 μ_t(x) 为时刻t交易者状态x的分布函数
则单个交易者的最优控制问题变为:
  max E[∫_0^T f(x_t, a_t, μ_t) dt + g(x_T, μ_T)]
  其中 a_t 是控制变量(交易指令)
  状态演化:dx_t = b(x_t, a_t, μ_t) dt + σ dW_t
  平均场演化:∂_t μ_t + ∇·(b μ_t) = (σ²/2) Δ μ_t

看到没?原来需要解N个耦合的HJB方程,现在只需要解一个HJB方程(对代表性交易者)加上一个Fokker-Planck方程(对平均场)。这两个方程通过μ_t耦合在一起,但复杂度从指数级降到了多项式级。

避坑指南:我曾经在推导平均场极限时,忽略了边界条件对分布的影响。结果策略在极端行情下直接崩了——因为平均场假设在尾部事件中失效。记住,平均场极限要求N足够大,且交易者之间的交互是弱耦合的。如果市场里只有几个大机构,平均场近似就不太靠谱。

4.4 核心逻辑:一张图说清楚

下面这张SVG图,我画了三个层次,帮你把整个推导逻辑串起来:

从N人博弈到平均场:核心推导逻辑 N人博弈 N个交易者 Nash均衡难解 计算复杂度 O(N²) 对称性假设 对称性假设 同质交易者 策略对称 收益对称 N→∞ 平均场极限 代表性交易者 HJB + FP方程 复杂度 O(1) 关键方程对比 N人博弈 平均场极限 N个HJB方程耦合 1个HJB方程 + 1个FP方程 状态空间维度:N × d 状态空间维度:d 需要知道所有对手策略 只需要知道市场分布 均衡求解:NP难 均衡求解:多项式时间 实盘应用:几乎不可能 实盘应用:广泛使用

4.5 从理论到代码:一个最小实现

理论说完了,咱们看看代码。下面是一个简化版的平均场交易策略求解框架。注意,这只是示意,真实项目里HJB和FP方程要用数值方法求解。

import numpy as np
from scipy.optimize import minimize

class MeanFieldTrading:
    def __init__(self, n_grid=100, T=1.0, dt=0.01):
        self.n_grid = n_grid      # 状态空间网格数
        self.T = T                # 时间 horizon
        self.dt = dt              # 时间步长
        self.x_grid = np.linspace(-1, 1, n_grid)  # 状态网格
        
    def solve_hjb(self, mu):
        """求解代表性交易者的HJB方程"""
        # 输入:当前平均场分布 mu
        # 输出:最优控制策略 a*
        V = np.zeros((self.n_grid, int(self.T/self.dt)))
        a_opt = np.zeros_like(V)
        
        for t in range(int(self.T/self.dt)-1, -1, -1):
            # 对每个状态点求解最优控制
            for i, x in enumerate(self.x_grid):
                # 定义目标函数(简化版)
                def objective(a):
                    # 瞬时收益 + 未来价值
                    return -(self.reward(x, a, mu) + 
                            self.dt * self.future_value(x, a, V[:, t+1], mu))
                
                res = minimize(objective, 0.0, method='BFGS')
                a_opt[i, t] = res.x[0]
                V[i, t] = -res.fun
        return a_opt, V
    
    def solve_fp(self, a):
        """求解Fokker-Planck方程,更新平均场"""
        mu = np.zeros((self.n_grid, int(self.T/self.dt)))
        mu[:, 0] = self.initial_distribution()
        
        for t in range(int(self.T/self.dt)-1):
            # 用有限差分更新分布
            drift = self.drift_term(a[:, t])
            diffusion = self.diffusion_term()
            mu[:, t+1] = mu[:, t] + self.dt * (drift + diffusion)
            # 归一化
            mu[:, t+1] /= np.sum(mu[:, t+1]) * (self.x_grid[1] - self.x_grid[0])
        return mu
    
    def iterate(self, max_iter=100, tol=1e-6):
        """迭代求解平均场均衡"""
        mu = self.initial_distribution()
        for i in range(max_iter):
            a_opt, V = self.solve_hjb(mu)
            mu_new = self.solve_fp(a_opt)
            
            # 检查收敛
            diff = np.max(np.abs(mu_new - mu))
            print(f"Iteration {i}: diff = {diff:.6f}")
            if diff < tol:
                break
            mu = mu_new
        return a_opt, mu

实用建议:实际项目中,我一般用深度神经网络来近似HJB和FP方程的解,而不是网格法。网格法在状态维度超过3时就会遇到维度灾难。用PINN(物理信息神经网络)可以处理10维以上的状态空间,而且天然支持自动微分。

4.6 对称性假设的局限性

最后说点实在的。对称性假设虽然好用,但它不是万能的。我在一个外汇做市项目里就吃过亏——市场里明明有几个大型银行和几十个小基金,策略行为完全不对称。强行用对称性假设,结果策略在银行大单来临时直接亏钱。

那怎么办?有两个思路:

  • 分层平均场:把交易者分成几类(大机构、小基金、散户),每类内部用平均场,类之间用博弈。这样既保留了异质性,又控制了复杂度。
  • 有限N校正:当N不是特别大时(比如N=50),平均场近似会有误差。可以用1/N展开来修正,我见过一些论文用这种方法把误差从10%降到了1%以内。

嗯,对称性假设就像一把瑞士军刀——好用,但别指望它解决所有问题。关键是要理解你的市场结构,然后选择合适的建模粒度。


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