Зачем?
Зачем?
самоопимизация на истории
Задумка: пользователь гоняет на каком-то периоде, он учиться, а потом показывает результаты на основе учебы. Т.е. собрал данные за год и обучился. Можно конечно поставить что-т типа "учиться раз месяц", но это реально костыль, тем более задержки увеличатся и неизвестно какой период ему выберут.
----
IsStopped так же показывает что индикатор и не собирались выгружать в тестере..
самоопимизация на истории
Задумка: пользователь гоняет на каком-то периоде, он учиться, а потом показывает результаты на основе учебы. Т.е. собрал данные за год и обучился. Можно конечно поставить что-т типа "учиться раз месяц", но это реально костыль, тем более задержки увеличатся и неизвестно какой период ему выберут.
----
IsStopped так же показывает что индикатор и не собирались выгружать в тестере..
Деинит произойдет при следующем запуске теста.
Вот индикатор:
int OnInit() { //--- indicator buffers mapping Print("Инит "+GetTickCount()); //--- return(INIT_SUCCEEDED); } void OnDeinit(const int r){ Print("Деинит "+GetTickCount()); }
А вот лог тестера:
0 01:53:41.492 2017.05.01 17:17:30 1 GBPUSD,M15: Деинит 280592468 0 01:53:41.499 2017.05.01 17:17:30 Custom indicator 1 GBPUSD,M15: removed 0 01:53:41.545 2017.05.01 17:17:30 Custom indicator 1 GBPUSD,M15: loaded successfully 0 01:53:41.582 2017.05.01 17:17:30 1 GBPUSD,M15: Инит 280592562 0 01:53:44.164 2017.05.01 17:17:30 Expert 1 GBPUSD,M15: removed 0 01:53:44.213 2017.05.01 17:17:30 Expert 1 GBPUSD,M15: loaded successfully 0 01:53:46.324 TestGenerator: current spread 44 used 1 01:53:48.349 TestGenerator: unmatched data error (high value 1.24319 at 2017.02.17 18:30 is not reached from the least timeframe, high price 1.24302 mismatches) 0 01:53:49.451 Custom indicator 1 GBPUSD,M15: loaded successfully 2 01:53:49.452 1 test started 0 01:53:49.495 2017.01.02 00:00:00 1 GBPUSD,M15: Инит 280600468 3 01:54:14.910 2017.06.22 03:19:24 Tester: stop button pressed 0 01:54:23.700 2017.06.22 04:12:05 Expert 1 GBPUSD,M15: removed 0 01:54:23.750 2017.06.22 04:12:05 Expert 1 GBPUSD,M15: loaded successfully 0 01:54:25.899 TestGenerator: current spread 44 used 1 01:54:27.920 TestGenerator: unmatched data error (high value 1.24319 at 2017.02.17 18:30 is not reached from the least timeframe, high price 1.24302 mismatches) 0 01:54:28.949 Custom indicator 1 GBPUSD,M15: loaded successfully 2 01:54:28.949 1 test started 0 01:54:28.992 2017.01.02 00:00:00 1 GBPUSD,M15: Инит 280639968
Так и не придумали способ? Интересует даже МТ5 больше, но вопрос этот в ветке по МТ4 - новый решил не заводить. Я давно писал предложение в СД, чтобы для индикаторов OnTester (или OnDeinit) тоже вызывался (слышал пояснения, почему было решено не вызывать OnDeinit, но они имхо алогичны). Ну а СД теперь - известно в каком месте.
Навскидку только один костыль вижу - делать пустой эксперт, из которого индикатор грузить и выгружать по OnTester, но это сильно неудобно (а в публичной программе неудобно будет всем ;-)).
тоже когда-то бился с этим)
закончил на том, то сказал юзеру закрывать чарт после теста --- индикатор ловит деинит и правильно закрывается/сохраняется
тоже когда-то бился с этим)
закончил на том, то сказал юзеру закрывать чарт после теста --- индикатор ловит деинит и правильно закрывается/сохраняется
А мне нужно пользователю результат показать. Известное решение - лазить по логам, но это-то и неудобно.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
МТ4
Собственно нужно узнать когда тест индикатора закончится, т.е. события окончания теста или выгрузки индюка подойдет, любой способ.
В чем трудность: не вызывается в по окончанию теста индикатора ни Deinit, ни OnTester (ну тут и написано что эта функция для экспертов, просто решила все проверить - а вдруг).
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double buf_up[], buf_dn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit(){
SetIndexBuffer(0, buf_up); SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0, 233); SetIndexEmptyValue (0, EMPTY_VALUE);
SetIndexBuffer(1, buf_dn); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1, 234); SetIndexEmptyValue (1, EMPTY_VALUE);
return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[]){
Comment("calc");
return(rates_total);}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
Comment("deinit");}