Библиотеки: MathTicker - генератор тиков в математическом режиме

 

MathTicker - генератор тиков в математическом режиме:

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

MathTicker - генератор тиков в математическом режиме

Автор: Forester

 

В примере сравнения заменил один инклудник другим.

#property tester_no_cache

//#include <Forester\MathTicker.mqh> // подключение торговли в математическом режиме

#define EATOMATH_ADVANCED_SETTINGS // Дополнительные настройки EAToMath.
#include <fxsaber\EAToMath\EAToMath.mqh> // https://www.mql5.com/ru/code/61283

input int rep=0;//Repeats for optimization

void OnInit(){}

void OnTick(){
   static MqlTick Tick;
   if (SymbolInfoTick(_Symbol, Tick)){
      #ifdef _MathTick_
         if(MathTick.SaveTick(Tick)){ return; }//если сохраняем тики, то выход и не торгуем. 
      #endif
      Strategy(Tick);
   }
}
double Sum = 0;
void Strategy(MqlTick& Tick){ // простейшая стратегия - использована для сравнения скорости чтения с EAToMath  
   Sum += Tick.bid+Tick.ask; 
}

ulong StartTime  = GetMicrosecondCount(); ;
double OnTester(){
   #ifdef _MathTick_ // запуск с MathTick - он считает параметры символа из файла с тиками. Для тестов в мат режиме
      if(MathTick.SaveTicksEnd()){return 0;}//закрыть файл после записи тиков и выйти
      if(MathTick.ReadSymbolVars()){
         MathTick.Ticker();//в режиме мат расчетов подаст все тики в Strategy(MqlTick &Tick).
      }
   #endif
   
   long work_time = (long)(GetMicrosecondCount() - StartTime)/1000;
   //return(NormalizeDouble(work_time, 1)); // для получения скорости работы и
   return Sum;// для сравнения результатов расчета
}


MathTicker.

optimization finished, total passes 60
optimization done in 0 minutes 23 seconds
shortest pass 0:00:00.365, longest pass 0:00:00.400, average pass 0:00:00.375
local 60 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


EAToMath.

optimization finished, total passes 60
optimization done in 0 minutes 31 seconds
shortest pass 0:00:00.520, longest pass 0:00:00.544, average pass 0:00:00.529
local 60 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Разница, как здесь.

за счет того, что котировки не сжаты, код по чтению тиков из файла работает быстрее раза в полтора-два.

Но все же причина, скорее всего, не в сжатии тиков. Вы не тратите ресурсы на проброс тика в виртуалку и получение его оттуда через SymbolInfoTick. Грубо говоря, вы не делаете на каждом тике два присваивания MqlTick и проверку работы с ордерами (хоть их и ноль).


Хорошо бы сравнить на втором примере - торговый.

 

С длительностью балансовой операции что-то не то.

 
fxsaber #: Хорошо бы сравнить на втором примере - торговый.

В обоих случаях будет работать Virtual. Все должно быть одинаково. А 150 мс на этапе чтения останутся, но думаю это мелочи)

fxsaber #:

С длительностью балансовой операции что-то не то.

Там все сделки тоже на 1 час дольше. Что-то с GMT  связано.
Поправил https://www.mql5.com/ru/forum/460016/page10#comment_58475640

Библиотеки: MT4Orders QuickReport
Библиотеки: MT4Orders QuickReport
  • 2025.02.25
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: MT4Orders QuickReport
 

Запустил оптимизацию в мат режиме на всех 36 агентах, с чтением тиковых данных из одного файла. Нагрузился только процессор:


SSD не изнашивается.

Пример того, как MQ тестер в режиме по реальним тикам загружает SSD:
https://www.mql5.com/ru/forum/497682/page7#comment_58423659

Наконец то дождался остановки 100%-ной записи на SSD для 30 агентов. Для первых 16ти потребовалось 22 минуты. Потом запустил остальные 20 (но 6-ти агентам не хватило места на SSD, 30 только смогли запуститься). Итоговое время на запуск оптимизации 1 час 20 минут.
Вот поймал момент окончания записи


Всего было записано временных файлов в папку тестера на 282 Гб (на 30 агентов в среднем почти по 9,4 Гб):

 
Forester #:

Запустил оптимизацию в мат режиме на всех 36 агентах, с чтением тиковых данных из одного файла. Нагрузился только процессор:

Аналогичная картина с другой реализацией. Создал RAMDrive на 10 гигов, этого хватило для хранения тиковой истории сразу 29 символов с 2019 по 2025 годы (фильтрованы и сжаты).

18/20 агентов (два всегда оставляю disabled, чтобы не было проблем при работе с расчетной машиной). Только ядра процессора загружены. Память расходуется исключительно на иногда огромную торговую историю виртуалок каждого прохода. Но это все равно копейки.


Мат. режим - супер для локальных агентов.

 
fxsaber #:

Что за конфигурация железа?

2-х процессорная сборка по 18 физ ядер. Процы и память - БУ, матринка, SSD и БП - новые. Обошлось примерно в 50 тр на весь комп, собирал в январе.

 
Forester #:

2-х процессорная сборка по 18 физ ядер. Процы и память - БУ, матринка, SSD и БП - новые. Обошлось примерно в 50 тр на весь комп, собирал в январе.

Надо будет на основе мат. режима запилить BenchmarkEA. Уж очень цена доступная.
 
fxsaber #:

Аналогичная картина с другой реализацией. Создал RAMDrive на 10 гигов, этого хватило для хранения тиковой истории сразу 29 символов с 2019 по 2025 годы (фильтрованы и сжаты).

Пока будут оптимизироваться - может тоже сжатие приделаю.
 
fxsaber #:
BenchmarkEA.
Если есть идея (торговая логика) такого советника, пишите.