种群优化算法:蝙蝠算法(BA)·综合运用
(3/3)·从算法描述到回测落地,一篇补齐把 BA 接进 EA 的最后拼图
很多交易者把种群优化当成论文玩具,觉得离实盘很远。其实 BA 的参数搜索逻辑,正好能替你省掉手动调参的大量试错。本篇接前两篇的概念与实现,直接把算法用到测试结果上。
「AO 变体在 EURUSD M1 上的回测输出对照」
下面这组 Print 输出来自 MT5 策略测试器,标的 EURUSD、周期 M1,时间戳停在 2023.01.03 17:55:57.386,是同一函数对不同 AO 计算分支的横向跑分。
| 未命名分支先吐出三行三元组 1.00000 | 1.00000 | 0.10959、5.94615… 与 0.84599 | 0.51308 | 0.22588,随后汇总值 5.946151922377553;C_AO_ABC 的三行数据 0.84599 | 0.51308 | 0.22588、0.58850 | 0.21455 | 0.17249、0.47444 | 0.26681 | 0.35941 汇总为 3.661160435265267。 |
|---|
| C_AO_GWO 的前两行全是 0.00000 | 0.00000 | 0.00000,第三行才出现 0.18977 | 0.04119 | 0.01802,汇总仅 0.24898721240154956,说明该分支在样本窗口内几乎没产生有效信号。C_AO_COAm 三行 1.00000 | 0.73390 | 0.28892、0.64504 | 0.34034 | 0.21362、0.67153 | 0.34273 | 0.45422,汇总 4.690306586791184,强度介于未命名与 ABC 之间。 |
|---|
外汇与贵金属属高风险品种,M1 回测结果受点差与滑点影响大,上述数值仅反映该函数当时的局部计算状态,不能直接外推到实盘概率。开 MT5 把这段日志对应的 CalculationTestResults 调用挂到 OnTester 或独立脚本里,逐分支改参数跑一遍,比盯汇总值更有用。
◍ AO 指标族在 EURUSD M1 的回测数值对照
下面这组日志是某次在 EURUSD 的 M1 周期上跑指标计算测试的终端输出,时间戳统一停在 2023.01.03 17:55:57.386,说明是同一次调用里顺序打印的多组结果,不是跨时段采样。 第一组未命名块输出了三行三联数值,最后跟一个标量 1.4272897567648186;紧接着打印 =======C_AO_FAm======= 作为分隔,之后三行三联数值的末位出现了 1.00000,标量升到 4.477897116029613。
| 再往下 =======C_AO_BA======= 块里,首行直接给到 1.00000 | 1.00000 的满值组合,标量 3.8147314003892507;末尾还有一行裸数据 0.24898721240154956 | 5.946151922377553,后者明显大于前面任何标量。 |
|---|
这些数字本身只是函数返回的原始度量,不能直接当成信号强度。外汇与贵金属杠杆高、滑点随机,M1 上的度量对点差极敏感,拿去实盘前先在 MT5 用相同品种周期复跑一遍,看你的环境是否印出同一组数。
AO优化器的实测耗时对比
在 EURUSD 的 M1 周期上跑了一轮 AO 指标多种优化算法的计算测试,时间戳停在 2023.01.03 17:55:57.386,同一毫秒内输出了 9 组相对耗时。 C_AO_ACOm 的数值是 100.000,作为本组基准耗时;C_AO_GWO 只有 1.000,是这组里最轻量的算法。C_AO_RND 8.652、C_AO_PSO 14.971、C_AO_ABC 60.294、C_AO_COAm 78.177、C_AO_FSS 21.475、C_AO_FAm 74.486、C_AO_BA 62.962,耗时跨度从 1 到 100 差出两个数量级。 外汇和贵金属这类高杠杆品种,回测和实盘都属高风险,上述数字只是算法计算开销,不指向任何盈利概率。开 MT5 把这段日志对应的测试例跑一遍,就能确认自己机器上各算法的相对快慢,挑耗时低的优先嵌进盯盘脚本。
class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_RND: class="num">8.652 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_PSO: class="num">14.971 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_ACOm: class="num">100.000 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_ABC: class="num">60.294 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_GWO: class="num">1.000 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_COAm: class="num">78.177 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_FSS: class="num">21.475 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_FAm: class="num">74.486 class="num">2023.01.class="num">03 class="num">17:class="num">55:class="num">57.386 CalculationTestResults(EURUSD,M1) C_AO_BA: class="num">62.962