群体优化算法:智能水滴(IWD)算法·综合运用
💧

群体优化算法:智能水滴(IWD)算法·综合运用

(3/3)· 前两层铺垫完原理与基础实现,这一篇把修改版 SDSm 与测试结果拼成可落地的优化闭环

进阶 第 3/3 篇
把群体优化算法直接丢进实盘前,多数人卡在改造版与原始版的边界模糊。这一篇用 SDSm 修改与回测把 IWD 从论文拉到 MT5 可用,少走弯路。

AO指标参数扰动的研究函数

下面这段 C_AO_SDSm 类的 Research 方法,用于在已有参数附近做带约束的随机扰动,常见于 AO(Awesome Oscillator)相关的自适应参数搜索。 函数先取一个 [-1,1] 均匀随机数 x,再算 y=x*x 把分布压向 0 附近,扰动幅度更保守。 核心换算在 Scale 调用:把 y 从 [0,1] 线性映射到 [0, restSpaceI*ko],false 表示不做边界夹紧。x 正负决定 pit 是加还是减这个差值。 随后按 raddr 和 restSpaceI 切出合法区间 [min,max],最后用 SeInDiSp 把 pit 吸附到 rangeStepI 的整数步长上,写回 pitNew。外汇与贵金属波动剧烈,这类随机搜索仅作策略研发参考,实盘存在较高风险。

MQL5 / C++
class="type">void C_AO_SDSm::Research(const class="type">class="kw">double  ko,
                         const class="type">int     raddr,
                         const class="type">class="kw">double  restSpaceI,
                         const class="type">class="kw">double  rangeMinI,
                         const class="type">class="kw">double  rangeStepI,
                         const class="type">class="kw">double  pitOld,
                         class="type">class="kw">double        &pitNew)
{
   class="type">class="kw">double x = RNDfromCI(-class="num">1.0, class="num">1.0);
   class="type">class="kw">double y = x * x;
   class="type">class="kw">double pit = pitOld;
   class="type">class="kw">double min = class="num">0.0;
   class="type">class="kw">double max = class="num">0.0;
   class="type">class="kw">double dif = Scale(y, class="num">0.0, class="num">1.0, class="num">0.0, restSpaceI * ko, class="kw">false);
   pit += x > class="num">0.0 ? dif : -dif;
   min = rangeMinI + restSpaceI * raddr;
   max = min + restSpaceI;
   pitNew = SeInDiSp(pit, min, max, rangeStepI);
}

「两套算法在基准函数上的实测表现」

把 IWDm 与 SDSm 各自跑满 10000 次迭代、不多不少的硬性条件下,得分差距一眼可见。IWDm(参数 50;10;3.0)在 5/25/500 个变量的 Rastrigin 上得分 0.78438 / 0.60967 / 0.49172,Forest 上仅 0.39458 / 0.11244 / 0.03220,Megacity 离散函数上 0.28667 / 0.09067 / 0.02373,三项合计 2.82606,在 22 种算法里排第 19(倒数第 4),刚好压过 PSO 的 8.431 总分。 SDSm(参数 100;100;0.05)则是另一番景象:Rastrigin 得分 0.99942 / 0.99071 / 0.70913,Forest 0.97529 / 0.84687 / 0.16676,Megacity 0.88000 / 0.56867 / 0.10320,总分 6.24004。它在 9 个可能的第一名里拿了 7 个,尤其在尖锐的 Forest 与离散 Megacity 上比传统 SDS 改进明显,后者 Megacity 用 1000 个参数时改进幅度接近 30%。 IWDm 的动画能看出水滴有聚类到潜在优区的倾向,Rastrigin 上最明显,但收敛图里长平段说明它容易卡住。三个测试函数收敛曲线都还在持续改善,意味着加迭代可能继续收敛,但实盘使用的便利性随之消失。外汇与贵金属参数优化属高风险,回测优不代表 live 能复现。 想自己复现,直接跑 SDS 文件夹里存档的测试脚本看 SDSm 怎么动;IWDm 源码改几行参数就能在 MT5 里重跑这套 10000 次基准。

◍ 把这条线请下神坛

IWDm 在默认参数下的实测并不漂亮:平滑与离散函数结果偏差大,收敛慢,还容易卡在局部极值;单纯增加区域数量也没能抬升效率。对比之下,SDS 类思路里“记住每家餐厅最佳菜肴”加一点近邻概率偏置,反而把性能拉了上来。 实验里有个反直觉点——把 SDSm 餐厅数从 100 往上加、坐标区域从 1000 往下切,成绩反而变糟;说明二次概率分布只对特定尺度区间最敏感,方法之间其实在抢权重。外汇与贵金属参数优化属高风险操作,回测亮眼不等于实盘能跑通。 所以别神话某条搜索策略。同一种手法,放到 A 算法里拖后腿,换到 B 算法里可能救活;值得盯的是组合后的平衡,不是单点技巧本身。作者归档里附了历次算法的最新 MQL5 代码,想验证上面现象,直接下载跑一遍直方图最实在。

让小布替你跑这套
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到 IWD 类的群体优化信号与回测概览,把重复劳动交给小布,你专注决策。

常见问题

通常把土壤量视作路径阻力,映射为历史样本上的约束惩罚项,再用参数集做群体搜索,具体实现见本篇修改版 SDSm 小节。
需跨多个品种与周期做样本外回测,外汇贵金属属高风险市场,结果仅代表历史概率倾向,不代表未来必现。
可以,小布盯盘对应品种页已内置群体优化类诊断视图,打开即可看到信号概览,不必自己从零搭框架。
SDSm 在群体更新与局部搜索上做了收敛加速,回测耗时与过拟合风险相对可控,本篇测试结果节给出了对照。