Библиотеки: Virtual - страница 82

 

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

Point=0.0001 Digits=4 TickSize=1.0 TickValue=-nan -  прочитано с помощью GetSymbolBase() - дефолтные значения для нового символа
считано из файла:
Symbol=BTCUSDT.bbt.linear Point=0.1 Digits=1 TickSize=0.1 TickValue=0.1
и записано SetSymbolBase()
Point=0.1 Digits=1 TickSize=0.1 TickValue=1.0 - прочитано из GetSymbolBase()
Соответствует тому что записано. TickValue=1 т.к. было _TickValue / _TickSize

Но спустя какое то время, видимо из за выгрузки тестера из памяти, он запускается уже чистый (без памяти о предыдущем запуске в режиме по реальным тикам). Аналогичный результат можно получить закрытием и открытием терминала.
При этом запуск в мат режиме выдает результаты отличающиеся от правильных.
Печать параметров символа точно такая же.

Point=0.1 Digits=1 TickSize=0.1 TickValue=1.0

Значит где-то что-то еще потерялось...
Например MT4Orders.mqh или другая функция могла использовать дефолтные

 ::SymbolInfoDouble(sSymb, SYMBOL_TRADE_TICK_SIZE);
::SymbolInfoDouble(sSymb, SYMBOL_TRADE_TICK_VALUE);TickValue или TickSize

Или какие-то другие параметры. Если да, то там надо использовать восстановленные из файла Point, Digits, TickSize, TickValue или возможно что-то другое.

Правильные расчеты:

Неправильные после перезапуска тестера:

Отличия в числе знаков после запятой при расчете профита (скорее всего Digits=0, т.к. порядок чисел верный)

Не знаю, наблюдается ли такое в EaToMach...

 
fxsaber #:
Обновление - добавлен VIRTUAL::SetSymbolBase.
Спасибо)
 
Forester #:

Отличия в числе знаков после запятой при расчете профита (скорее всего Digits=0, т.к. порядок чисел верный)

Пропишите этот макрос (описание в Order.mqh).
#define ORDER_CURRENCY_DIGITS 2 // Задание Digits для вычисления профита/комиссии/свопа при помещении в историю торгов.
 
fxsaber #:
Пропишите этот макрос (описание в Order.mqh).
не помоголо
 
Forester #:
не помоголо

Обновите Orders.mqh.


У себя используете этой свойство.

int D = (int)::AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
MT4Orders QuickReport
MT4Orders QuickReport
  • 2024.01.05
  • www.mql5.com
Быстрая JavaScript версия библиотеки Report от fxsaber для торговых команд в стиле MT4 реализованных через MT4Orders или Virtual. Работает до 10 раз быстрее, размер НТМL файлов меньше, может выгрузить и отобразить до 5.4 млн. строк отчета.
 
Forester #:
не помоголо

Нашел проблему: в моем MT4Orders_QuickReport.mqh

использовался
(int)::AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);

для округления.

Видимо там 0 в мат режиме.
 
Forester #:

Нашел проблему

После обновления Orders.mqh будет работать корректно.
 
fxsaber #:
После обновления Orders.mqh будет работать корректно.
Да - стало правильно. Спасибо.
 
Forester #:
Да - стало правильно. Спасибо.
Просьба сделать замеры, как влияет на производительность добавление сразу этих трех макросов.
  #define VIRTUAL_ALTERNATIVE // Альтернативная скорость расчетов
  #define VIRTUAL_SELECTORDERS_OBJECT // Работа с выбранным окружением без указателей, отключает мультивалютку.
  #define VIRTUAL_ORDERSELECT_WITHOUT_COPY // OrderSelect без копирования ORDER-структуры, отключает мультивалютку.
 
fxsaber #:
Просьба сделать замеры, как влияет на производительность добавление сразу этих трех макросов.
22894 трейдов за полгода.
Виртуал по реал тикам:
Core 1    pass 0 returned result -2.950378 in 0:00:13.901
 Core 1    pass 1 returned result -2.950378 in 0:00:10.102
 Core 1    pass 2 returned result -2.950378 in 0:00:10.097
Core 1    pass 3 returned result -2.950378 in 0:00:10.123
Core 1    pass 4 returned result -2.950378 in 0:00:10.118
Tester    optimization finished, total passes 5
Statistics    optimization done in 0 minutes 54 seconds
Statistics    shortest pass 0:00:10.097, longest pass 0:00:13.901, average pass 0:00:10.868

На первом проходе видимо подготовительные операции тестера происходят.

Он же с макросами

Core 1    pass 0 returned result -2.950378 in 0:00:13.009
Core 1    pass 1 returned result -2.950378 in 0:00:12.723
Core 1    pass 2 returned result -2.950378 in 0:00:12.725
Core 1    pass 3 returned result -2.950378 in 0:00:12.658
Core 1    pass 4 returned result -2.950378 in 0:00:12.703
Tester    optimization finished, total passes 5
Statistics    optimization done in 1 minutes 04 seconds
Statistics    shortest pass 0:00:12.658, longest pass 0:00:13.009, average pass 0:00:12.763

Мат. режим без макросов

Core 1    pass 0 returned result -2.950378 in 0:00:06.358
Core 1    pass 1 returned result -2.950378 in 0:00:06.330
Core 1    pass 2 returned result -2.950378 in 0:00:06.331
Core 1    pass 3 returned result -2.950378 in 0:00:06.328
Core 1    pass 4 returned result -2.950378 in 0:00:06.336
Tester    optimization finished, total passes 5
Statistics    optimization done in 0 minutes 32 seconds
Statistics    shortest pass 0:00:06.328, longest pass 0:00:06.358, average pass 0:00:06.336

Он же с макросами

Core 1    pass 0 returned result -2.950378 in 0:00:08.298
Core 1    pass 1 returned result -2.950378 in 0:00:08.256
Core 1    pass 2 returned result -2.950378 in 0:00:08.259
Core 1    pass 3 returned result -2.950378 in 0:00:08.459
Core 1    pass 4 returned result -2.950378 in 0:00:08.404
Tester    optimization finished, total passes 5
Statistics    optimization done in 0 minutes 41 seconds
Statistics    shortest pass 0:00:08.256, longest pass 0:00:08.459, average pass 0:00:08.335