群体优化算法:智能水滴(IWD)算法·综合运用
(3/3)· 前两层铺垫完原理与基础实现,这一篇把修改版 SDSm 与测试结果拼成可落地的优化闭环
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。外汇与贵金属波动剧烈,这类随机搜索仅作策略研发参考,实盘存在较高风险。
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 代码,想验证上面现象,直接下载跑一遍直方图最实在。