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

 
При вызове CopyTicksRange для истории, которой локально еще нет, функция с точки зрения вызывающего кода MQL5 "подвисает" на неопределенное время, в течение которого видно, как в папку тиков рабочей базы скачиваются файлы, а MQL5 программа при этом "ждет". Когда вся запрошенная история получена, "подвис" сам собой проходит, но как пользователю на этот период дать знать, что программа по факту работает? Есть ли способ получения процента выполнения процесса загрузки? История на несколько лет качается у меня несколько минут. Без наглядного фидбэка обычный пользователь плюнет и снесет программу, не дождавшись результата. Крутить тупые часики тоже не хотелось бы, не имея в MQL подтверждения, что загрузка реально идет.
 
Stanislav Korotky:
При вызове CopyTicksRange для истории, которой локально еще нет, функция с точки зрения вызывающего кода MQL5 "подвисает" на неопределенное время, в течение которого видно, как в папку тиков рабочей базы скачиваются файлы, а MQL5 программа при этом "ждет". Когда вся запрошенная история получена, "подвис" сам собой проходит, но как пользователю на этот период дать знать, что программа по факту работает? Есть ли способ получения процента выполнения процесса загрузки? История на несколько лет качается у меня несколько минут. Без наглядного фидбэка обычный пользователь плюнет и снесет программу, не дождавшись результата.

В КБ-решении Tester делал, вроде, такое. Не помню сути, по коду должно быть понятно. Через индикатор еще можно попробовать. Вроде, там не дожидается выполнения, если не готова история.

 
fxsaber:

В КБ-решении Tester делал, вроде, такое. Не помню сути, по коду должно быть понятно. Через индикатор еще можно попробовать. Вроде, там не дожидается выполнения, если не готова история.

Можно поточнее показать место, а то Tester-ов нашлось несколько? ;-)

Индикаторы не предоставляют прогресс расчета котировок под них - ну будет CopyBuffer все время возвращать один и тот же код ошибки - это ж ситуацию не проясняет.

 
Stanislav Korotky:

Можно поточнее показать место, а то Tester-ов нашлось несколько? ;-)

В этом файле

  static bool HistoryIsReady( const datetime tBeginTime, MqlTick &BeginTick )
  {
    MqlTick Ticks[1];
  
    ::ResetLastError();
  
    if (::CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, (ulong)tBeginTime * 1000, 1) == 1)
      BeginTick = Ticks[0];
  
    return(!::GetLastError() ||
           (!::TerminalInfoInteger(TERMINAL_CONNECTED) && 
           ((::CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, (ulong)(tBeginTime - 7 * 24 * 3600) * 1000, 1)) == 1) &&
           (Ticks[0].time < tBeginTime)));
  }

Индикаторы не предоставляют прогресс расчета котировок под них - ну будет CopyBuffer все время возвращать один и тот же код ошибки - это ж ситуацию не проясняет.

Другое имел в виду, но это не важно.

[Удален]  

Вообще не понимаю что происходит.

   struct myPositionPrepare
   {
      ENUM_ORDER_TYPE      order_type;          // тип устанавливаемого ордера
      ENUM_POSITION_TYPE   position_type;       // тип устанавливаемого ордера
.................
   };
   myPositionPrepare       structPosPrep;       // подготовительная структура для открытия позиции/ордера
.
.
      structPosPrep.position_type         = PositionGetInteger(POSITION_TYPE); // implicit enum conversion

Что не так?

 
Сергей Таболин:

Вообще не понимаю что происходит.

Что не так?

long  PositionGetInteger()

тоже считаю этот момент неудобным: из enum в целочисленные типы и обратно можно бы и автоматом переводить, без принудительного

structPosPrep.position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
[Удален]  
Igor Zakharov:

long  PositionGetInteger()

тоже считаю этот момент неудобным: из enum в целочисленные типы и обратно можно бы и автоматом переводить, без принудительного

Но ведь long  OrderGetInteger( ничего подобного не выдаёт. (((

Загадка природы ))))))))

 

При тестировании мультивалютного советника по реальным тикам случается ошибочное начисление свопа для сделки, закрываемой автоматически в конце теста.

Тест на GBPUSD:


Тест на EURUSD и нескольких других инструментах:


Билд 2200, MQ-демо.

[Tester]
Symbol=GBPUSD
Period=M5
Optimization=0
Model=4
FromDate=2019.08.01
ToDate=2019.10.01
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=0
Leverage=500
ExecutionMode=0
OptimizationCriterion=4
Visual=0

На новые билды обновляюсь и сразу откатываюсь, компиляция и запуск советников в них неприлично долгие...

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Andrey Khatimlianskii, 2019.11.21 03:11

Билд 2200, MQ-демо.

[Tester]
Symbol=GBPUSD
Period=M5
Optimization=0
Model=4
FromDate=2019.08.01
ToDate=2019.10.01
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=0
Leverage=500
ExecutionMode=0
OptimizationCriterion=4
Visual=0

Спасибо за образцово-показательное сообщение о настройках Тестера! Наглядно и мгновенно у себя можно воспроизвести без ошибок. Предлагаю всем так делать.

Кто не в курсе, чтобы создать такие данные, нужно нажать CTRL+C во вкладке Настройки Тестера и сделать CTRL+V в редакторе. Работает и в обратную сторону.



ЗЫ Уважаемые разработчики, могли бы Вы в по CTRL+C в качестве комментария добавлять еще эти данные?

; Server=MetaQuotes-Demo
; Build=2220
; DLL=0
; Hedge=1
; Agents=8
; Memory(Gb)=16
; и спецификация символа.
[Tester]
Symbol=GBPUSD
Period=M5
Optimization=0

Это сильно бы упростило подачу информации об ошибках Тестера на форуме.

 

Приветствую. Подскажите пож куда копировать DLL-ку ?  У меня отсуствует директория Libraries  (C:\Program Files\ MT5\MQL5\ ????  )

Спасибо.