Новая версия платформы MetaTrader 5 build 4150: экспорт торгового отчета и новые методы машинного обучения в MQL5 - страница 17

 
Forester #:
Предложение по расширению возможностей.
Есть команда Sleep(). Которая делает паузу в выполнении программы на нужное количество миллисекунд. Но в тестере/оптимизаторе она не делает паузы и грузит процессор на 100% огромным числом проверок.
Например это нужно при первой загрузке индикаторов для ожидания окончания расчетов от начала котировок. Рекомендованный вами https://www.mql5.com/ru/docs/files/filewrite код:

Хорошо бы сделать SleepRealTime() или вариант  Sleep(int ms, bool is_real_time=false) который будет делать паузу и в тестере в реальном времени, это позволит не загружать процессор на 100%.

Кроме работы с индикаторами реальная пауза нужна и в работе с файлами, например может быть нужным дождаться появления файла и только потом считать его. 100%-ная загрузка была замечена именно в этом варианте, файл ожидался несколько минут. Возможны и другие варианты использования паузы в реальном времени в тестере.

Сейчас использую

Но хорошо бы иметь штатный вариант без DLL.

Вы понимаете, как работает Sleep в тестере?

В тестере для загрузки индикаторов и ожидания их расчётов не нужна никакая задержка, так как всё работает в одном и том же потоке. Какое "появление файла" в тестере Вы имеете в виду???

Зачем Вам нужна реальная задержка в тестере?

 
Slava #:

Вы понимаете, как работает Sleep в тестере?

В тестере для загрузки индикаторов и ожидания их расчётов не нужна никакая задержка, так как всё работает в одном и том же потоке. Какое "появление файла" в тестере Вы имеете в виду???

Зачем Вам нужна реальная задержка в тестере?

Про Sleep() читал https://www.mql5.com/ru/docs/runtime/testing#sleep

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

Документация по MQL5: Программы MQL5 / Тестирование торговых стратегий
Документация по MQL5: Программы MQL5 / Тестирование торговых стратегий
  • www.mql5.com
Тестирование торговых стратегий - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Forester #:

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

Целесообразно после создания файла с моделью нажать на кнопку Start автоматом.
 
Forester #:

4153 все еще не работает: (по всем проблемам коды для воспроизведения есть)

свопы в конце теста, до прохождения времени ролловера (в 0:00). Некоторые инструменты начисляют своп, некоторые нет. Сделайте одинаково.
https://www.mql5.com/ru/forum/455977/page36#comment_51235008
--------------------------------------------------------------------
свопы != *3 при старте теста в среду
https://www.mql5.com/ru/forum/455977/page33#comment_51191078
--------------------------------------------------------------------

Demo MQ. время закрытия сделки < времени открытия, с ценой на момент времени до открытия сделки
https://www.mql5.com/ru/forum/455977/page36#comment_51246904



---------- То же самое на ДЦ ал-ри:
время закрытия сделки < вр открытия, ДЦ ал-ри
https://www.mql5.com/ru/forum/455977/page34#comment_51223568
--------------------------------------------------------------------

Demo MQ. цена 1 сделки неверная по придуманному тику - есть же в истории, почему не взять?
https://www.mql5.com/ru/forum/455977/page36#comment_51248196
---------- То же самое на ДЦ ал-ри:
old tick и bid=0 ->создает неверный придуманный тик, ДЦ ал-ри - расписал подробно возможную причину появления bid=0, пора бы уже решить многолетнюю проблему.
https://www.mql5.com/ru/forum/455977/page31#comment_51064858 

Обратите пожалуйста внимание на эти проблемы. Они важнее Sleep()
 

MetaQuotes:

13. MetaEditor: Увеличена частота сэмплирования при профилировании. Теперь состояние приложения снимается 10000 раз в секунду, что позволяет замерять скорость исполнения функций гораздо точнее.

b4160.

2024.02.01 16:04:34.726 2023.01.01 00:00:00   profiler initialized (7500 samples per second)
 
Forester #:

Про Sleep() читал https://www.mql5.com/ru/docs/runtime/testing#sleep

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

Файл, который создаст внешняя программа, в процессе тестирования или до тестирования?

 
Slava #:

Файл, который создаст внешняя программа, в процессе тестирования или до тестирования?

Похоже, в процессе. Тогда без NewSleep никак.

 

b4160, получаю замедление оптимизации на ~8% при смене inMode. Почему?

input int inRange = 0;
input bool inMode = true; // true - _Symbol, false - this.Symb

struct A
{
  const string Symb;

  A( const string sSymb ) : Symb(sSymb) {}
  
  bool IsValidTick( const bool &Mode ) const
  {
    static MqlTick Tick;
    
    return(::SymbolInfoTick(Mode ? _Symbol : this.Symb, Tick));
  }
};

void OnTick()
{
  static const A a(_Symbol);
  
  if (!a.IsValidTick(inMode))
    Print("");
}


2024.02.01 16:54:37.626 shortest pass 0:00:02.074, longest pass 0:00:02.135, average pass 0:00:02.091 // inMode = true
2024.02.01 16:53:40.763 shortest pass 0:00:02.252, longest pass 0:00:02.289, average pass 0:00:02.269 // inMode = false
Тестерный профайлер в большом советнике указал на SymbolInfoTick. Решил проверить напрямую кодом выше.
 
Slava #:

Файл, который создаст внешняя программа, в процессе тестирования или до тестирования?

В процессе, 1 раз при запуске и затем раз в неделю вызывается обучение. В результате получим Walking Forward. Т.е. за год теста будет 52 обучения.
int OnInit(){
   EventSetTimer(3600);//hourly
//---
   return(INIT_SUCCEEDED);
}

void OnTimer(){//hourly
   tryToTrain ();//там определится день недели и если суббота, то запустится обучение
   return;
}
Впрочем внешнюю программу я все равно через DLL  WinExec запускаю. Так что без DLL все равно ничего не получится, даже если будет Sleep() реалтаймовый.


Лучше с тиками и свопами разобраться. Эти глюки присутствуют абсолютно у всех в каждом тесте. Можете воспроизвести
 

Последний релизный МТ5. Есть скрипт, он запускает один за другим пачку одиночных тестов в тестере через нажатие кнопки Старт, т.е. идентично запуску подряд одиночных тестов руками.

Периодически тест он отказывается проводить, ничего не происходит. В более ранних версиях (порядка год-два назад) чтобы вернуть работоспособность тестера приходилось рестартовать терминал. Сейчас можно просто подождать и дальше гнать тесты. Когда изменилось-не отслеживал. Как повторить-неизвестно, происходит рандомно. В логах вот так. Это конец прошлого прохода:

2024.02.03 10:28:44.794 Core 3  final balance 10000672.00 pips
2024.02.03 10:28:44.794 Core 3  OnTester result 672
2024.02.03 10:28:44.794 Core 3  EURJPY.0_Broco,M1: 192153 ticks, 6960 bars generated. Environment synchronized in 0:00:00.036. Test passed in 0:00:00.436 (including ticks preprocessing 0:00:00.032).
2024.02.03 10:28:44.794 Core 3  EURJPY.0_Broco,M1: total time from login to stop testing 0:00:00.472 (including 0:00:00.036 for history data synchronization)
2024.02.03 10:28:44.794 Core 3  526 Mb memory used including 22 Mb of history data, 64 Mb of tick data
2024.02.03 10:28:44.794 Core 3  log file "C:\Users\xxx\AppData\Roaming\MetaQuotes\Tester\2159AE63FA8D9063FCC954BB789F458E\Agent-127.0.0.1-3003\logs\20240203.log" written
2024.02.03 10:28:44.805 Core 3  connection closed

И сразу за ним попытка следующего прохода:

2024.02.03 10:28:45.489 Tester  "BandsReturnR.ex5" 64 bit
2024.02.03 10:28:45.595 Tester  EURJPY.0_Broco: history data begins from 2022.02.03 00:00
2024.02.03 10:28:45.595 Tester  EURJPY.0_Broco: ticks data begins from 2022.02.03 00:00
2024.02.03 10:28:45.595 Core 3  connecting to 127.0.0.1:3003
2024.02.03 10:28:45.596 Core 3  connected
2024.02.03 10:28:45.596 Core 3  disconnected
2024.02.03 10:28:45.597 Core 3  connection closed
2024.02.03 10:28:45.598 Core 3  connected
2024.02.03 10:28:45.604 Core 3  authorized (agent build 4153)
2024.02.03 10:28:45.607 Core 3  disconnected
2024.02.03 10:28:45.607 Core 3  connection closed

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