【问题标题】:Why is this basic MQL4-code taking so much time to load up on my MT4?为什么这个基本的 MQL4 代码要花这么长时间才能加载到我的 MT4 上?
【发布时间】:2019-09-03 01:15:03
【问题描述】:

我正在学习 MQL4 语言并使用此代码绘制简单移动平均线,该代码运行良好,但是当我将其加载到我的 MT4 上时需要很长时间,我是否遗漏了什么?


int start()                         // Special function start()
{
   int i,                           // Bar index
       n,                           // Formal parameter
       Counted_bars;                // Number of counted bars
                                    // Sum of Low values for period
// --------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Number of counted bars
   i=Bars-Counted_bars-1;           // Index of the first uncounted
   while(i>=0)                      // Loop for uncounted bars
   {  
      Buf_0[i]=(iMA(Symbol(),PERIOD_M5,200,i,MODE_EMA,PRICE_HIGH,0);
      i--;                          // Calculating index of the next bar
      }
// --------------------------------------------------------------------
   return;                          // Exit the special funct. start()
   }
// --------------------------------------------------------------------

【问题讨论】:

    标签: mql4 mt4


    【解决方案1】:

    我错过了什么吗?

    不,这是一个标准功能,用于处理所有条形图,朝向历史的最早部分。

    如果您的意图需要最短设置时间,则可以将重新绘制的历史部分“缩短”到上周,而不是一直回到所有 Bars-number of几年前的情况,因为所有数据都存储在 OHLCV 历史数据库中。

    只要您的需求可以处理,历史的“缩短”部分就会变成这样,而不是“更长”的一个小节。

    万岁,问题解决了。


    奖金部分:

    鉴于您的代码指示使用 EMA,而不是 SMA,因此还有一个攻击向量可以在最短的时间内完成。

    对于 EMA,任何 next 柱值都将成为 alfa * High[next] 的乘积,添加到以前称为 EMA[next+1] 的结果

    其中一个常量alfa = 2. / ( N_period + 1 ) 是已知的,并且在整个处理的历史运行中都是常量。

    当在float32-values 数组上使用此算法快捷方式时,与逐个单元格相比,这种方法帮助我获得了~20-30 [us]更快的处理速度细胞处理。请务必针对您的用例对代码进行基准测试,并且可以使用 iHigh() 的不同调用签名而不是访问 High[] 的数组来完善进一步的技巧- s 对于任何潜在的加速,如果最需要削减任何进一步的[us] 可能。

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      相关资源
      最近更新 更多