极值优化(EO)
📘

极值优化(EO)

第 1/2 篇

正态假设在价格分布上的坑

很多 MT5 指标底层把收益率当成正态分布来算 z-score 或置信带,但实盘里外汇与贵金属的高杠杆品种尾部的厚尾现象极普遍,2015—2020 年 EURUSD 日线收益率峰度约 4.8,明显偏离正态的 3.0。 直接用正态假设画出的通道,在黑天鹅行情里会过早给出「极端值回归」信号,导致逆势加仓被扫。开 MT5 把历史数据拉出来算一遍峰度,比盲信指标默认值更靠谱。 这类品种波动剧烈、穿仓风险真实存在,任何统计结论都只能当作概率参考,不能作为仓位依据。

◍ 为什么梯度法在交易优化里会失灵

做EA参数寻优时,目标函数往往不是光滑曲面:多重局部极值、断档区间、不可导点是常态。传统梯度下降依赖连续可导假设,在这类复杂离散空间里基本失效,容易卡在假最优。 元启发式算法绕过梯度,用探索与利用的折中在空间中找解。极值优化(EO)是其中一支,源于Bak-Sneppen自组织临界模型,由Boettcher与Percus在1999年提出:系统自发演化到临界态,雪崩式波动不断重排结构。 针对连续优化可改用基于种群的改进EO,靠迭代种群更新而非单点翻转。对外汇/贵金属这类高波动、高杠杆品种做参数优化时,这类方法可能比网格搜索更省算力,但回测过拟合风险仍偏高,需样本外验证。

「从生态雪崩到极值优化」

Bak-Sneppen 模型原本刻画物种链协同演化:N 个物种排成链或网格,各自带一个适应度 fi∈[0,1]。系统会自组织到临界阈值 fc≈0.67,低于它的物种被雪崩式淘汰,雪崩规模服从幂律 P(s)~s^(-τ),无固定特征尺度。 Boettcher 与 Percus 把这个机制改成极值优化算法:不碰最优个体,只迭代最差的。思路反直觉但能跳出局部最优。间断平衡在模型里表现为长期稳态偶发剧变,算法复用这一点,只更新劣质组件,改一个可能拖垮邻居也可能抬升全局解。 下面这段就是模型每一步的裸逻辑,直接对应 MT5 里写 EA 时的主循环骨架:每次定位最小适应度,重掷它和邻居,循环不辍。外汇与贵金属市场高风险,这类临界逻辑只宜做概率参考,切勿当确定性信号。

C++
在每一步迭代中:

class="num">1. 找到适应度最小的物种:fmin = min{fi}

class="num">2. 将该物种及其相邻物种的适应度替换为新的随机值

class="num">3. 重复上述过程

种群与排序的冷启动

EA 载入后第一件事,是按种群规模 popSize 把交易智能体一次性铺开。popSize 若设成 50,MT5 初始化阶段就会在内存里生成 50 个独立 agent 实例;这个数直接决定后续搜索覆盖的广度,设太小容易陷在局部,设太大拖慢每代评估。 初始化参数不只读外部输入,还要给每个智能体的权重、阈值给一组可复现的初值。很多策略回测结果对初值敏感,建议用固定随机种子跑通后再放开。 创建数组这一步容易被忽略:必须把智能体和它的组件分别塞进两个有序数组,后续选择、交叉才有下标可查。排序没建好,遗传算子的索引会直接越界报错。

常见问题

价格涨跌尾部比正态厚得多,极端行情概率被低估;实盘建议用历史分位或极值法重算止损距离,别直接套2倍标准差。
交易收益面多峰且带噪声,梯度易卡在局部洼地;可改用种群随机探索+排序淘汰,绕开伪最优。
小布可自动跑种群采样并标出稳定参数区,你只需导入品种和约束,省去手写优化循环。
用相近品种或模拟分位冷启动,先宽后窄缩小搜索框,避免空跑一轮无排序。
它提醒连锁失效常来自小触发,仓位关联要限边数;单品种爆雷别拖垮整体净值。