文章 "通过原始代码优化和调整来改进回测结果"

 

新文章 通过原始代码优化和调整来改进回测结果已发布:

通过优化逻辑、细化计算和减少执行时间来提高回测精度,从而增强 MQL5 代码。微调参数,优化循环,消除低效,以获得更好的性能。

我们算法交易策略的开发始于一种结构化、系统化的形态识别和信号验证方法。该策略的核心采用了一个基于烛形的框架,旨在识别高概率反转场景。对于多头头寸,逻辑系统性地检测到三个连续的看涨烛形,然后是一个或两个修正看跌烛形,最终在索引 1(最近关闭的柱形)处确认看涨烛形。

相反,空头头寸则是由一种相反的形态触发的:连续三根看跌烛形,之后是一根或两根回撤看涨烛形,最后是索引 1 的一根确认看跌烛形。这种配置确保信号仅在形成新的柱形时才得到验证,使执行与已确认的价格走势保持一致,而不是与柱形内的波动保持一致。

为了实现这一逻辑,该策略的架构将优先考虑模块化代码设计和计算效率。首先,将实现辅助函数来抽象重复性任务,例如烛形分类(看涨/看跌判断)和序列验证(连续烛形形态检查)。这些函数将利用 MQL5 的原生价格数据访问方法,包括 `iOpen()` 和 `iClose()`,同时通过静态变量缓存来最大限度地减少冗余计算。


作者:Hlomohang John Borotho

 

请告诉我 CTick 和 PTick 是如何工作的。我看到这两个函数都与 Includes 一起声明,但在代码的其他地方都没有引用。换句话说,CTick 跟踪什么;PTick 跟踪什么?

(我在 MQ 文档中什么也找不到)。

 

The pursuit of reliable back-test results in algorithmic trading hinges not only on robust strategy logic but also on the efficiency and precision of the underlying code. Raw code optimization and tweaking are critical to ensuring that Expert Advisors (EAs) perform as intended, minimizing computational overhead while maximizing execution accuracy. Poorly optimized code can distort back-test outcomes through delayed order execution, incorrect signal detection, or resource exhaustion—issues that mask a strategy’s true potential.

在策略开发过程中,我们将采取几个关键步骤,确保EA 功能强大、技术可靠。首先,我们将添加自定义辅助函数和可重复使用的逻辑块,以简化操作并避免重复代码。然后,我们将引入结构良好的变量和常量,以提高代码的可读性并简化参数调整。这些基础性调整将有助于维护代码,并在大量反向测试负载或多符号测试中缩短整体执行时间。

另一个主要改进领域涉及更有效地利用技术指标。我们将实施更智能的更新逻辑,以减少负载和滞后,而不是盲目地在每个刻度线或条形图上计算指标。我们还将尝试不同的指标组合,以支持 EA 逻辑中更好的决策。通过将结构性代码改进、性能感知功能和指标优化相结合,我们可以大幅提高回测的质量和速度,使 我们更接近可持续盈利和可部署的策略。

我不想冒犯任何人,但我不得不说这篇文章是失败的。上面是导言,其中有很多有力的肯定和,但作者都没有执行。

我的初衷是想指出代码中存在的问题,但这些问题实在太多了......所以我只指出第 2 点。

   double sl_distance = StopLoss * point;
   double tp_distance = TakeProfit * point;
   
   double sl = (tradeType == ORDER_TYPE_BUY) ? price - sl_distance :
                                               price + sl_distance;
   
   double tp = (tradeType == ORDER_TYPE_BUY) ? price + tp_distance :
                                               price - tp_distance;

   trade.PositionOpen(_Symbol, tradeType, In_Lot, price, sl, tp, NULL);

健壮的代码?错误检查在哪里?不做任何检查就直接使用输入,不检查 stoplevels,不检查保证金,不检查交易请求......

      // 检查看涨形态
      for (int j = i; j >= i - min_bullish_count + 1; j--) {
         if (iClose(symbol, timeframe, j) > iOpen(symbol, timeframe, j)) {
            bullish_count++;
            first_bullish_low = getLow(5);
         } else break;
      }

使用 iClose/iOpen 逐根蜡烛?这些函数处理数据的速度最慢。

此外,getLow(5) 似乎是个错误。我没有进一步检查。

我不会对交易算法 本身发表评论,我只是注意到作者很方便地选择了历史上 EA 取得良好结果的一个短暂时期。

这篇文章非常糟糕。

 

下午好,这是很好的分析,但要补充相同的力量,如果成交量!!虽然蜡烛图会给你信息,但最终要确认的是成交量,这样你就可以执行更多的交易,而不会出错!


您好