回溯搜索算法(BSA)·综合运用
用 Box-Muller 截断正态做价格偏移
这段逻辑用 Box-Muller 变换从均匀分布抽两个量,再合成一个标准正态变量 z0,用来给基准价 In 加偏移。MathRand() 返回 0~32767 整数,除以 32767 再乘 2 减 1,就把 u1、u2 压进 (-1,1) 区间,注释里写的 (0.0,1.0) 其实是开区间近似。 u1 若小于等于 0 会被替换成 1e-15,避免后面 log(0) 直接崩。z0 由 sqrt(-2*log(u1)) * cos(2π*u2) 算出,是典型的极坐标法正态采样;sigmaN 被硬性截断在 8.583864105157389 以内,超出就沿用上限,防止尾部过宽。 若 z0 落在 [-sigmaN, sigmaN] 之外,函数递归重抽,等于做了一个截断正态分布。通过后半段的 Scale 映射,正 z0 拉向 outMax-In,负向则拉向 In-outMin,最后返回 In+z0 作为扰动后价格。外汇与贵金属波动剧烈,这类随机偏移仅用于回测或压力模拟,实盘直接套用可能放大滑点与穿仓风险。
class="type">class="kw">double u1 = class="num">2.0 * MathRand() / class="num">32767.0 - class="num">1.0;class=class="str">"cmt">//RNDfromCI(class="num">0.0, class="num">1.0); class="type">class="kw">double u2 = class="num">2.0 * MathRand() / class="num">32767.0 - class="num">1.0;class=class="str">"cmt">//RNDfromCI(class="num">0.0, class="num">1.0); logN = u1 <= class="num">0.0 ? class="num">0.000000000000001 : u1; class="type">class="kw">double z0 = sqrt(-class="num">2 * log(logN)) * cos(class="num">2 * M_PI * u2); class="type">class="kw">double sigmaN = sigma > class="num">8.583864105157389 ? class="num">8.583864105157389 : sigma; class=class="str">"cmt">// If z0 is outside the range [-sigmaN, sigmaN], generate anew if (z0 >= sigmaN || z0 <= -sigmaN) { class="kw">return GaussDistribution(In, outMin, outMax, sigma); class=class="str">"cmt">// Recursive call } if (z0 >= class="num">0.0) z0 = Scale(z0, class="num">0.0, sigmaN, class="num">0.0, outMax - In, false); else z0 = -Scale(fabs(z0), class="num">0.0, sigmaN, class="num">0.0, In - outMin, false); class="kw">return In + z0; }
◍ 回溯搜索算法跑分与排行榜位置
把 BSA(回溯搜索算法)丢进三组标准测试函数各跑 10000 次,低维 5 种群规模下 Hilly 拿到 0.9731、Forest 拿到 0.99999、Megacity 拿到 0.8477;当规模拉到 500,三项分别跌到 0.2910、0.2175、0.1298。总分 4.95934,折算成相对最大分的 55.10%,在 40 个种群优化算法里排第 20 位,紧挨着差分进化(DE,55.06%)和鸟群算法 BSA(53.44%)——同名缩写容易撞车,看榜时得认准「回溯搜索」那一行。 低中维上 BSA 的收敛值有明显离散抖动,种群规模变大后波动收窄,但想换更好的收敛质量就得同步加迭代次数,否则 500 规模下 Forest 最终值只剩 0.2175 左右。外汇与贵金属参数寻优用这类算法时属高风险尝试,回测甜区不等于实盘稳健,结论仅具概率倾向。 直接翻排行榜还能看到头部 ANS 跨邻域搜索总分 6.134(68.15%),和 BSA 差了约 13 个百分点。如果你在 MT5 里自己复现优化器,建议先拿 Hilly 5 种群规模当基准对照,能复出 0.973 附近才算环境没配歪。
「十种优化器的回测得分横评」
上面这张表把 41~45 号智能优化器跟随机游走(RW)基准摆在一起比了轮 XAUUSD 类品种的参数寻优回测。BFO-GA 细菌觅食优化拿下了 4.224 的综合得分和 46.93 的归一化指标,是整张表里最高的,SOA 简单优化算法以 4.181 / 46.45 紧随其后。 ABHA、ACMO、ADAMm 三者咬得很紧,得分落在 4.037~4.127 区间,归一化指标在 44.85~45.85 之间,说明这类仿生类寻优在 MT5 遗传框架里差异并不夸张。 真正该盯的是最末一行 RW 随机游走:综合得分仅 2.348、归一化 26.09,差不多只有 BFO-GA 的一半。这提醒交易者,拿随机初始参数跑 EA 回测,样本效率可能直接腰斩。 外汇与贵金属杠杆高、滑点跳空频繁,任何优化器给出的优势都只是历史样本里的概率倾向,开 MT5 用策略测试器把同一 EA 分别挂 BFO-GA 和 RW 跑一遍,差值自己看最实在。
最后说句实在话
BSA 在种群优化算法里长期停在排行榜中游,评分脚本里 0–100 分制下多数测试函数落在 70–85 区间,这不是能力短板,而是它把易用和稳跑放在了首位。历史记忆机制让种群规模拉大后也不易停滞,除种群规模外只留一个 mixrate 参数,工程上复制 Test_AO_BSA.mq5 改两行就能跑。 低维小种群时它偶有早收敛,实盘或参数搜索里别拿它硬刚极致精度。外汇与贵金属波动高危,任何算法信号都只是概率参考,真要上 MT5 验证,先开 Simple use of population optimization algorithms.mq5 看基线再说。