Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 76

 
FinEngineer: осталась только одна ошибка 2012.12.22 00:56:44 Pair_delta_RSI (EURGBP,M1) Not all data of RSI1_Handle is calculated (-1bars ). Error4806

Эта ошибка выходит не при компиляции, а когда цепляю индикатор к графику, или меняю таймфрейм.

 Это сообщение об ошибке воспроизводится постоянно, или со временем исчезает?

 
Парни! А MT5 к любому ДЦ можно подключить?
 
net:
Парни! А MT5 к любому ДЦ можно подключить?

Нет. Торговать через МТ5 возможно через того брокера, который  предоставляет возможность торговли через эту платформу, например, ВТБ24 и Альфа-форекс.

Условия для трейдеров
  • www.alfa-forex.ru
Если у вас уже есть опыт работы на валютном рынке, то вы по достоинству оцените преимущества работы с Альфа-Форекс Самые узкие спреды на рынке: EUR/USD — от 0,7 пункта Отсутствие минимального депозита Быстрый ввод и вывод средств Исполнение ордеров без проскальзываний и реквот Альфа-Форекс входит в банковскую группу в составе Консорциума...
 
Yedelkin:

 Это сообщение об ошибке воспроизводится постоянно, или со временем исчезает?

Один раз, когда цепляю индикатор к графику...
 
Yedelkin:

 Это сообщение об ошибке воспроизводится постоянно, или со временем исчезает?

2012.12.22 11:40:32 Pair_delta_RSI (EURGBP,M1) array out of range in 'Pair_delta_RSI.mq5' (92,37)
оказывается такая ошибка тоже появляется...т.е. ошибки две...
 
Yedelkin:

 Это сообщение об ошибке воспроизводится постоянно, или со временем исчезает?

Пробовал в терминале альфафорекс, только что попробовал в терминале альпари, та же ошибка...
 

FinEngineer:

Yedelkin: Это сообщение об ошибке воспроизводится постоянно, или со временем исчезает?

Один раз, когда цепляю индикатор к графику...

Ну тогда у Вас всё отлично. Когда Вы только-только цепляете программу к графику или меняете таймфрейм, в терминале нет никаких новых рассчитанных данных для индикатора RSI или любого другого. И терминалу требуется некоторое время, чтобы рассчитать нужные индикаторные буферы. Посмотрите внимательно свой код (понимаю, что он написан по чьему-то образцу, но тем не менее): у Вас там при недостаточности рассчитанных данных для RSI функция OnCalculate() прекращает свою работу ('return(0);') и дожидается нового тика. Как только на очередном тике индикаторные буферы для RSI будут полностью рассчитаны, Ваш индикатор начнёт работать в обычном режиме. Что и происходит, судя по Вашим словам.

Вы  также можете вставить проверку с BarsCalculated() в функцию OnInit() - тогда и ошибка будет возникать очень редко (если вообще будет появляться). Пример приведён в описании функции BarsCalculated().

 
FinEngineer: 2012.12.22 11:40:32 Pair_delta_RSI (EURGBP,M1) array out of range in 'Pair_delta_RSI.mq5' (92,37)
оказывается такая ошибка тоже появляется...т.е. ошибки две...
 
 По поводу этой ошибки я Вам уже вчера написал. (Не забудьте вставить код правильно :) )
 
Yedelkin:
 По поводу этой ошибки я Вам уже вчера написал. (Не забудьте вставить код правильно :) )

 Убрал кусок кода который отвечает за недостаточность данных(ниже)

 int calculated=BarsCalculated(RSI1_Handle);

   if(calculated<rates_total)

     {

      Print("Not all data of RSI1_Handle is calculated (",calculated,"bars ). Error",GetLastError());

      return(0);

     }

   calculated=BarsCalculated(RSI2_Handle);

   if(calculated<rates_total)

     {

      Print("Not all data of RSI2_Handle is calculated (",calculated,"bars ). Error",GetLastError());

      return(0);

 

Подскажите как куски кода выделять в сообщении?

 

Теперь выходит ошибка:

2012.12.22 15:14:00 Pair_delta_RSI (EURGBP,M1) Getting RSI1 is failed! Error4806

 
FinEngineer: Подскажите как куски кода выделять в сообщении? 

 Вставить код правильно.

FinEngineer:  Убрал кусок кода который отвечает за недостаточность данных(ниже)
   int calculated=BarsCalculated(RSI1_Handle);
   if(calculated<rates_total)
     {
      Print("Not all data of RSI1_Handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
   calculated=BarsCalculated(RSI2_Handle);
   if(calculated<rates_total)
     {
      Print("Not all data of RSI2_Handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);

Да нормально он у Вас там работал, этот "кусок кода, который отвечает за недостаточность данных". И правильно сообщал, что при поступлении первого тика данные для RSI ещё не рассчитаны терминалом. Если не нравится получать сообщения об ошибке, то попробуйте сделать, как указано выше, а именно: проверять наличие рассчитанных данных не только в OnCalculate(), но и в OnInit(). Иными словами, попробуйте в OnInit() дождаться расчёта данных для выбранных Вами технических индикаторов (дождаться посредством конечного цикла), а затем уже переходить к обработке тиков в OnCalculate(), когда данные для индикаторов будут гарантированно рассчитаны.

Добавление. В конце концов, удаление части проверочного кода совершенно не способствует увеличению количества рассчитываемых данных индикатора :) 

Причина обращения: