Библиотеки: EAToMath - страница 4

 
'OnTesterInit' - function already defined and has body
Отсутствует #define OnTesterInit OnTesterInitOriginal


 
hini #:

Я понимаю: в Math-режиме, а также в режиме оптимизации, функция OnInit не выполняется.

Верно. Возможно, это недоработка со стороны MQ.

 
hini #:

Я понимаю: в Math-режиме, а также в режиме оптимизации, функция OnInit не выполняется. Мой советник инициализируется именно в этой функции, поэтому сделки не выполнялись.

У меня не вызывался OnInit в Math-режиме. Но теперь вызывается! И я не понимаю, от чего это зависит.

В любом случае я обновил библиотеку и теперь можно принудить вызовы OnInit и OnDeinit через следующий макрос.

#define EATOMATH_FORCE_INIT_DEINIT OnInit, OnDeinit // Принудительный запуск соответствующих функций.

Если будете его использовать, убедитесь, что OnInit не вызывается дважды.

 
hini #:
Отсутствует #define OnTesterInit OnTesterInitOriginal

Вы можете это сделать так.

// #define EATOMATH_ADVANCED_SETTINGS // Дополнительные настройки EAToMath.
// #define EATOMATH_BENCHMARK         // Включает измерение производительности EAToMath.
#define EATOMATH_FULL_CONTROL      // Самостоятельное прописывание OnT-функций.
#include <fxsaber\EAToMath\EAToMath.mqh> // https://www.mql5.com/ru/code/61283

EATOMATH EAToMath;

int OnTesterInit() { return(EAToMath.OnTesterInit() || OnTesterInitOriginal()); }
void OnTesterDeinit() { EAToMath.OnTesterDeinit(); }
void OnTesterPass() { EAToMath.OnTesterPass(); }

double OnTester() { EAToMath.OnTester(); return(OnTesterOriginal()); }
void OnTick() { EAToMath.OnTick(); }

#define OnTester OnTesterOriginal
#define OnTick OnTickOriginal
#define OnTesterInit OnTesterInitOriginal

#include "EA_Test.mq4" // Любой тиковый MT4-style советник.

int OnTesterInit() { return(INIT_SUCCEEDED); } // Ваша оригинальная функция.
 
fxsaber #:

Вы можете это сделать так.

Спасибо за обновление, позже я обновлю код.
 
fxsaber #:

У меня не вызывался OnInit в Math-режиме. Но теперь вызывается! И я не понимаю, от чего это зависит.

В любом случае я обновил библиотеку и теперь можно принудить вызовы OnInit и OnDeinit через следующий макрос.

Если будете его использовать, убедитесь, что OnInit не вызывается дважды.

ok
 
fxsaber #:

У меня не вызывался OnInit в Math-режиме. Но теперь вызывается! И я не понимаю, от чего это зависит.

В любом случае я обновил библиотеку и теперь можно принудить вызовы OnInit и OnDeinit через следующий макрос.

Если будете его использовать, убедитесь, что OnInit не вызывается дважды.

#define EATOMATH_FORCE_INIT_DEINIT OnInit, OnDeinit
#define EATOMATH_BENCHMARK         // Включает измерение производительности EAToMath.
#include "../../../utils/fxsaber/EAToMath/EAToMath.mqh" // Тестирование на истории в математическом режиме MT5-тестера
int OnInit() {
  Print(__FUNCTION__+" call OnInit");
}

Происходит два вызова: один через EATOMATH_FORCE_INIT_DEINIT, а второй — самим тестером стратегий MT5. Я заметил следующую особенность: при обычном тестировании в режиме 'Math' без оптимизации, тестер корректно вызывает OnInit. Однако, если в том же режиме 'Math' включить оптимизацию, вызова OnInit не происходит.

 

I compiled the file EAToMath_Example.mq5 and got the following compilation error:

  • 'IsCorrect' - undeclared identifier in EAToMath.mqh at line 621, column 36

  • ')' - expression expected in EAToMath.mqh at line 621, column 46

// #define EATOMATH_ADVANCED_SETTINGS // Дополнительные настройки EAToMath.
// #define EATOMATH_BENCHMARK         // Включает измерение производительности EAToMath.
#define EATOMATH_FULL_CONTROL      // Самостоятельное прописывание OnT-функций.
#include <fxsaber\EAToMath\EAToMath.mqh> // https://www.mql5.com/ru/code/61283

EATOMATH EAToMath;

int OnTesterInit() { return(EAToMath.OnTesterInit() || OnTesterInitOriginal()); }
void OnTesterDeinit() { EAToMath.OnTesterDeinit(); }
void OnTesterPass() { EAToMath.OnTesterPass(); }

double OnTester() { EAToMath.OnTester(); return(OnTesterOriginal()); }
void OnTick() { EAToMath.OnTick(); }

#define OnTester OnTesterOriginal
#define OnTick OnTickOriginal
#define OnTesterInit OnTesterInitOriginal

#include "EA_Test.mq4" // Любой тиковый MT4-style советник.

int OnTesterInit() { return(INIT_SUCCEEDED); } // Ваша оригинальная функция.
 
Lipe Ramos #:

I compiled the file EAToMath_Example.mq5 and got the following compilation error:

  • 'IsCorrect' - undeclared identifier in EAToMath.mqh at line 621, column 36

  • ')' - expression expected in EAToMath.mqh at line 621, column 46

Update Virtual.

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

Библиотеки: EAToMath

fxsaber, 2025.07.14 19:45

Я обнаружил некоторые особенности мат. режима MT5-тестера. Постарался их учесть в обновлении библиотеки (плюс это).

 
hini #:

Я заметил следующую особенность: при обычном тестировании в режиме 'Math' без оптимизации, тестер корректно вызывает OnInit. Однако, если в том же режиме 'Math' включить оптимизацию, вызова OnInit не происходит.

#property tester_no_cache

input int inRange = 0;

double dResult = inRange;

int OnInit() { dResult = DBL_MAX; return(INIT_FAILED); }

double OnTester() { return(dResult); }
pass 0 tested with error "OnInit failed" in 0:00:00.000
pass 1 tested with error "OnInit failed" in 0:00:00.000
authorized (agent build 5147)
optimization finished, total passes 2 (successful 0 passes)
optimization done in 0 minutes 00 seconds
shortest pass 0:00:00.000, longest pass 0:00:00.000
local 2 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Вызывается OnInit.