Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1461

 
В МТ4 в тестере как отследить нажатие кнопки стоп для индикатора. ОнДеинит не вызывается, хотя тест закончен. Или как закрыть открытые файлы при нажатии кнопки стоп в тестере.
 
Valeriy Yastremskiy:
В МТ4 в тестере как отследить нажатие кнопки стоп для индикатора. ОнДеинит не вызывается, хотя тест закончен. Или как закрыть открытые файлы при нажатии кнопки стоп в тестере.

открытые файлы все равно должны автоматом закрыться

если не закрылись, то с помощью  СБ попробуйте создать файлы, там в виде ООП есть CFile, CFileTxt - объекты точно при деинициализации будут уничтожены, а деструкторы закроют файлы

https://www.mql5.com/ru/docs/standardlibrary/fileoperations


ЗЫ: а почему решили, что OnDeinit() не вызывается? - попробуйте в нем файл открыть и записать

 
Igor Makanu:

открытые файлы все равно должны автоматом закрыться

если не закрылись, то с помощью  СБ попробуйте создать файлы, там в виде ООП есть CFile, CFileTxt - объекты точно при деинициализации будут уничтожены, а деструкторы закроют файлы

https://www.mql5.com/ru/docs/standardlibrary/fileoperations


ЗЫ: а почему решили, что OnDeinit() не вызывается? - попробуйте в нем файл открыть и записать

Опытным путем. Сам удивлен был. Хотя по логике все правильно, это же индикатор, и он не должен выгружаться, как советник. Приходиться руками удалять индикатор с тестерного чарта, или закрывать окно. И только тогда вижу Алерты после закрытия файлов)))

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

Зы, файлы если не закрыть, то к ним доступа нет, и если   OnDeinit() вдруг не отработает, то они закроются по закрытию терминала только.

Опытный путь, забыл записать закрытие файлов)))

 
Valeriy Yastremskiy:

Опытным путем. Сам удивлен был. Хотя по логике все правильно, это же индикатор, и он не должен выгружаться, как советник. Приходиться руками удалять индикатор с тестерного чарта, или закрывать окно. И только тогда вижу Алерты после закрытия файлов)))

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

Зы, файлы если не закрыть, то к ним доступа нет, и если   OnDeinit() вдруг не отработает, то они закроются по закрытию терминала только.

Опытный путь, забыл записать закрытие файлов)))

Вы не описали ранее весь процесс тестирования индикатора

насколько я понял, Вы в тестере МТ4 в визуальном режиме запускаете индикатор, хотя можно и набросить в МТ4 в визуализаторе еще индикатор.....

в общем никогда не тестировал индикаторы в МТ4, сразу в ЕА в коде ТС проверяю


как вариант установите в индикаторе дату которой заканчиваете тест в качестве переменной и по достижении этой даты сохраните файл и выходите из OnCalculate() - кода пару строк, но точно будет работать

 
Igor Makanu:

Вы не описали ранее весь процесс тестирования индикатора

насколько я понял, Вы в тестере МТ4 в визуальном режиме запускаете индикатор, хотя можно и набросить в МТ4 в визуализаторе еще индикатор.....

в общем никогда не тестировал индикаторы в МТ4, сразу в ЕА в коде ТС проверяю


как вариант установите в индикаторе дату которой заканчиваете тест в качестве переменной и по достижении этой даты сохраните файл и выходите из OnCalculate() - кода пару строк, но точно будет работать

Да, тестерному окну без разницы, тестируется индикатор, или индикатор наброшен на тестерное окно.

Спасибо за такой не очевидный костыль) 

bool  IsTesting();

 надо попробовать, вроде должен по стоп ложь возвратить)
 
Valeriy Yastremskiy:

Да, тестерному окну без разницы, тестируется индикатор, или индикатор наброшен на тестерное окно.

Спасибо за такой не очевидный костыль) 

bool  IsTesting();

 надо попробовать, вроде должен по стоп ложь возвратить)

Нет, не возвратил

В общем вопрос открыт, как отследить в тесте индикатора событие 2021.04.29 08:55:41.177 2020.10.01 08:23:13  Tester: stop button pressed

делал так)

int OnInit()
{
if(IsTesting()) FlagTest=true;
....
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

if(!IsTesting() && FlagTest) { Print("Окончание тестирования"); OnDeinit(1);}
....
}

 
Igor Makanu:

поиском по статьям от Метаквот : "Cloud"

давно читал, должны удаленные агенты скачивать историю с Вашего ПК или если подключенны к такому же брокеру - берут реальные тики от брокера


но могу ошибаться, не пользовался


одна из статей от Метаквот на эту тему, может там есть информация  https://www.mql5.com/ru/articles/2612

Игорь, спасибо. Документация, форум, статьи - ответа пока не нашел. 

В логе есть: 

"REGRES_EURGBP: ticks synchronized already [57 bytes]" 

Надеюсь, это то, что нужно.

 
Valeriy Yastremskiy:

Нет, не возвратил

В общем вопрос открыт, как отследить в тесте индикатора событие 2021.04.29 08:55:41.177 2020.10.01 08:23:13  Tester: stop button pressed

делал так)


нужно что то такое писать:

datetime t_stop=D'20.04.2021'; 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
if(time[0]>=t_stop)
{
        if(f_handle<0) return;
        FileClose(f_handle);
        f_handle = -1;
}
не помню МТ4 дает тестировать последний день (сегодня) - нужно подобрать t_stop
 
HimOrik:

Игорь, спасибо. Документация, форум, статьи - ответа пока не нашел. 

В логе есть: 

"REGRES_EURGBP: ticks synchronized already [57 bytes]" 

Надеюсь, это то, что нужно.

модераторы молчат, активных пользователей мало

создайте топик со своим вопросом в общем обсуждении, думаю быстрее свой вопрос решите

 
Igor Makanu:

нужно что то такое писать:

не помню МТ4 дает тестировать последний день (сегодня) - нужно подобрать t_stop

Эту мысль я понял, она полезна, но в данном случае мне не подходит. Мне нужно в индикаторе засечь   Tester: stop button pressed  

Причина обращения: