Результаты от iClose() в 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() не обновляет массив новыми значениями свечей. Несмотря на более чем две недели возни с этой проблемой, я не могу заставить свой советник обновлять и распознавать новые значения свечей.


person the_photon    schedule 20.02.2017    source источник


Ответы (1)


Это может произойти при таком условии,
что код запускался без прямой трансляции событий с рынка, используя только вызов метода Object с привязкой по времени на локальном хосте (который не был раскрыт как MCVE выше), таким образом, постоянно показывая один и тот же заголовок данных временного ряда, который в таких условиях просто не получает обновлений в реальном времени, что дает одни и те же значения [1,2,3,..] навсегда:

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

может проверить ваше состояние EA на реальном сервере.

person user3666197    schedule 20.02.2017
comment
Благодарю за ваш ответ. В случае, если я проверю состояние своего советника на реальном сервере и обнаружу, что прямой трансляции нет, как мне восстановить прямую трансляцию? По сути, как мне решить проблему, чтобы я мог получать непрерывные данные в реальном времени? - person the_photon; 20.02.2017
comment
Из-за неконтролируемого уровня риска неправильного использования все действия по подключению/входу ограничены набором ручных взаимодействий между человеком и брокером (идентификация для входа в систему, выбор торгового сервера, предоставление учетных данных доступа). Таким образом, такой обработчик исключений может отправить вам электронное письмо, но живой человек должен щелкнуть и помочь Терминалу повторно войти в систему. - person user3666197; 21.02.2017