Выгрузка индикатора в тестере

 

МТ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");}

 

Зачем?

 
Dmitry Fedoseev:

Зачем?


самоопимизация на истории

Задумка: пользователь гоняет на каком-то периоде, он учиться, а потом показывает результаты на основе учебы. Т.е. собрал данные за год и обучился. Можно конечно поставить что-т типа "учиться раз месяц", но это реально костыль, тем более задержки увеличатся и неизвестно какой период ему выберут. 

----

IsStopped так же показывает что индикатор и не собирались выгружать в тестере.. 

 
Дошло - индикатор остается на графике просто и его можно вручную выгрузить и тогда все считается. Осталось придумать костыль чтоб определить что "тест окончен"
 
Galina Bobro:

самоопимизация на истории

Задумка: пользователь гоняет на каком-то периоде, он учиться, а потом показывает результаты на основе учебы. Т.е. собрал данные за год и обучился. Можно конечно поставить что-т типа "учиться раз месяц", но это реально костыль, тем более задержки увеличатся и неизвестно какой период ему выберут. 

----

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, но это сильно неудобно (а в публичной программе неудобно будет всем ;-)).

 

тоже когда-то бился с этим)

закончил на том, то сказал юзеру закрывать чарт после теста --- индикатор ловит деинит и правильно закрывается/сохраняется

 
Taras Slobodyanik:

тоже когда-то бился с этим)

закончил на том, то сказал юзеру закрывать чарт после теста --- индикатор ловит деинит и правильно закрывается/сохраняется

А мне нужно пользователю результат показать. Известное решение - лазить по логам, но это-то и неудобно.