Ошибки, баги, вопросы - страница 2932

 

При запуске советника когда алготрейдинг отключен и последующее включение алготрейдинга:

Согласно коду ошибки запрет на торговлю остаётся, хотя свойство TERMINAL_TRADE_ALLOWED равняется true

#include <Greshnik\\ErrorDescription.mqh>
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      return;
     }
   MqlTradeRequest tr;
   MqlTradeResult r;
   ResetLastError();
   if(!OrderSend(tr,r))
     {
      int err=GetLastError();
      Print(err,"  ",cLng::CodeDescription(err));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
2020.12.30 15:25:38.629 Experts automated trading is enabled
2020.12.30 15:25:39.159 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.297 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.397 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.499 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:40.725 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:42.781 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.129 Test1 (EURUSD,M1)       4752  Торговля для эксперта запрещена
2020.12.30 15:25:43.758 Experts automated trading is disabled

Результат должен быть таким:

2020.12.30 15:29:58.406 Experts automated trading is enabled
2020.12.30 15:30:02.247 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.368 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:02.486 Test1 (EURUSD,M1)       4756  Не удалось отправить торговый запрос
2020.12.30 15:30:04.320 Experts automated trading is disabled
 
 
CopyTime(_Symbol,tf,0,1,Arr);
 Очевидно, всегда должен ArraySize(Arr)=1. Это в случае успешного копирования. Но в каких случаях копирование бара может не произойти? Ведь когда вылезает ошибка "array out of range", терминал указывает на Arr[0].
 
x572intraday:
   Очевидно, всегда должен ArraySize(Arr)=1. Это в случае успешного копирования. Но в каких случаях копирование бара может не произойти? Ведь когда вылезает ошибка "array out of range", терминал указывает на Arr[0].

 Отловил-таки ошибку, цитата из справки:

4401

Запрашиваемая история не найдена

Принтовал в Журнал — получил:

2020.12.31 14:45:20.474 test (EURUSD,H2)        ArraySize(Arr)=0; copied=-1; TF=PERIOD_H2
2020.12.31 14:45:20.474 test (EURUSD,H2)        Error Code = 4401

 Что теперь с ней делать, куда идти? У меня ли кривые руки или?.. Я ведь копирую всего один бар с 0-го по 1-й. Как его (истории) может не быть? Тем более, что ошибка вылезает далеко не всегда. Или предварительно надо как-то принудительно проверять и подгружать историю?

 
x572intraday:

 Отловил-таки ошибку, цитата из справки:

 Принтовал в Журнал — получил:

 Что теперь с ней делать, куда идти? У меня ли кривые руки или?..

Точно должно быть присваивание

ArraySize(Arr)=0

а не сравнение?

ArraySize(Arr)==0
 
Vitaly Muzichenko:

Точно должно быть присваивание

а не сравнение?

 Так это не код программы, а результат Print'а в Журнале терминала. А вот и сам код:

   int c=CopyTime(_Symbol,tf,0,1,Arr);
   if(c<1)
   {
      Print("ArraySize(Arr)=",ArraySize(Arr),
            "; copied=",c,
            "; TF=",EnumToString((ENUM_TIMEFRAMES)tf)
            //"; Arr[0]=",Arr[0]
           );
      Print("Error Code = ",GetLastError());
      ResetLastError();
      return;
   }
 То есть это не я промазал мимо диапазона массива, а многострадальная история почему-то не всегда якобы подгружается. Я всегда думал, что история подгружается слева и при неполной загрузке её может не хватить. Но чтобы не хватало истории справа (новые бары) — это для меня нонсенс! Тем паче у меня ArraySetAsSeries=false, если это вообще имеет значение.
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Print - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

 Так это не код программы, а результат Print'а в Журнале терминала. А вот и сам код:

 То есть это не я промазал мимо диапазона массива, а многострадальная история почему-то не всегда якобы подгружается. Я всегда думал, что история подгружается слева и при неполной загрузке её может не хватить. Но чтобы не хватало истории справа (новые бары) — это для меня нонсенс! Тем паче у меня ArraySetAsSeries=false.

Читает пустой массив, в котором ничего нет?

ArraySize(Arr)

Попробуйте так

Print("ArraySize(Arr)=",Arr[0],
 
Vitaly Muzichenko:

Читает пустой массив, в котором ничего нет?

Попробуйте так

 У меня строка вывода Arr[0] специально закомментирована (см. выше), так как при попытке вывести её в Журнал дело не доходит до сообщения об ошибке 4401, а всё заканчивается выводом ошибки "array out of range".

 ...Пока покурю https://www.mql5.com/ru/docs/series/timeseries_access, но раздувать свой код этим кодом — жуть...
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Ошибки компиляции - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

 У меня строка вывода Arr[0] специально закомментирована (см. выше), так как при попытке вывести её в Журнал дело не доходит до сообщения об ошибке 4401, а всё заканчивается выводом ошибки "array out of range".

 
Vitaly Muzichenko:

 Да, массив оказывается пустой, то есть не происходит копирование в него ни одного нового бара.

 
x572intraday:

 Да, массив оказывается пустой, то есть не происходит копирование в него ни одного нового бара.

так бывает при первом запросе