Кто так оформляет OnInit и OnDeinit в советниках? - страница 2

 
Alexey Volchanskiy:
Сейчас пишу советник, вставил этот стандартный код, а вот в кодобазе почему-то такое не встречал. А ведь какой смысл все переинициализировать при смене, например, таймфрейма? У меня только фильтры около минуты приходят в рабочее состояние после запуска.

Почему так долго? Может помочь оптимизировать?

 
George Merts:

Век живи, век учись. Я так не делал, но, считаю, что очень даже полезно.

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

В принципе, код совершенно верный, стоящий для применения.

Жорж, суть в том, что если не вставлять такой код, у тебя будет проходить деинит-инит при каждом чихе. Для кого-то это не существенно, для меня недопустимо. А "никогда не глядят на таймфрейм и символ графика" - это тут не при чем. У меня тоже не знают об таких вещах.

 
SEM:

Почему так долго? Может помочь оптимизировать?

Длина фильтра 60 коэффициентов, частота выборки 1 Гц. Для устаканивания фильтра требуется минута, оптимизировать нечего - математика.

 
Alexey Volchanskiy:

Жорж, суть в том, что если не вставлять такой код, у тебя будет проходить деинит-инит при каждом чихе.

Да-да, я согласен.

Мне это некритично, но иметь ввиду такую возможность, безусловно надо.

 

Alexey Volchanskiy:

int OnInit()
{
    int reason =  UninitializeReason();
    if(reason == REASON_CHARTCHANGE || reason == REASON_TEMPLATE)
        return(INIT_SUCCEEDED);
    if(reason == REASON_PARAMETERS)
    {
        InitParams();
        return(INIT_SUCCEEDED);                              
    }

void OnDeinit(const int reason)
{
    if(reason==REASON_CHARTCHANGE || reason==REASON_TEMPLATE || reason==REASON_PARAMETERS)
        return;


А что за функция ?

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