MQL4中iClose()的结果不随时移而推进 - 为什么?

时间:2017-02-20 05:34:55

标签: mql4

启者

关于另一个问题,我正在尝试创建一个数组,其内容是EURUSD之前的每小时结算值。我的代码如下:

      void Trade()
      {
         double longThresh     = this.longThreshold;
         double longTP         = this.longTakeProfit;
         double longSL         = this.longStopLoss;
         double shortThresh    = this.shortThreshold;
         double shortTP        = this.shortTakeProfit;
         double shortSL        = this.shortStopLoss;

         int dummyIndex = 0;
         Print( "Triggered reload of stack data for trading routine" );

         this.stackArray[0] = iClose( "EURUSD", PERIOD_H1, 1 );
         this.stackArray[1] = iClose( "EURUSD", PERIOD_H1, 2 );
         this.stackArray[2] = iClose( "EURUSD", PERIOD_H1, 3 );
         this.stackArray[3] = iClose( "EURUSD", PERIOD_H1, 4 );
         this.stackArray[4] = iClose( "EURUSD", PERIOD_H1, 5 );
         this.stackArray[5] = iClose( "EURUSD", PERIOD_H1, 6 );
         this.stackArray[6] = iClose( "EURUSD", PERIOD_H1, 7 );
         this.stackArray[7] = iClose( "EURUSD", PERIOD_H1, 8 );

         this.PrintStackArray();
         }

上面的函数实际上是一个对象方法。对象被实例化, do-while 循环导致上述方法在五分钟时刻每小时重新执行一次。

问题在于,当上述代码执行一小时后, PrintStackArray() 输出表明 iClose() 功能无法跟上每小时都有新的烛台。

换句话说,如果代码在5:05执行,它将提供与6:05时相同的输出,并在7:05提供相同的输出。

我不能为我的生活弄清楚为什么重新执行iClose()函数不会使用新的烛台值更新数组。尽管对此问题进行了两周多的修补,但我无法强制我的EA更新并识别新的烛台值。

1 个答案:

答案 0 :(得分:1)

这可能发生在这样的情况下,即代码在没有来自市场的事件的实时馈送的情况下运行,仅使用localhost时间限制触发的Object方法调用( which was not disclosed as an MCVE above ),从而永远显示相同的时间序列数据头,在这种情况下根本不会获得实时更新,永远产生相同的[1,2,3,..]值:

if ( !IsConnected() )
{     Print( "No connection!" );
      return( 0 );
      }

可以针对实时服务器验证您的EA状态。