В МТ4 изменился механизм OnInit() и OnDeinit? - страница 2

 
Alexey Navoykov:
Да в индикаторах так всегда было, насколько я помню. Приходилось костыльными способами решать эту проблему

Вот черт, а я как-то еще не напарывался на эту бяку. Нверное потому, что индикаторы почти не пишу, нет нужды. Но бяка - то реальная, я в шоке.

Это значит, надо все глобальные переменные сохранять в файл при OnDeinit с причиной REASON_CHARTCHANGE и потом снова считывать в OnInit. А если у меня в индикаторе сложный класс? Значит, надо писать метод для его сериализации-десириализации... какие мраки. Вот зачем делать программистам такие гадости, а?

 
Yuriy Zaytsev:

Алексей - это же не спред 

Это сглаженный спред, от реального нет толку, при 2-3 тиках в секунду последняя цифра будет мельтешить. Можно просто поставить меньшее количество тиком для сглаживания, по умолчанию 60 

input int       SpreadSmoothTicks   = 60;

 **

 
Alexey Volchanskiy:

Это сглаженный спред, от реального нет толку, при 2-3 тиках в секунду последняя цифра будет мельтешить. Можно просто поставить меньшее количество тиком для сглаживания, по умолчанию 60 

 **

я видел - это понятно

а зачем сглаживать ?

в кодах применяю по просьбам заказчиков запрет входа при резком расширению спреда

 
Yuriy Zaytsev:

я видел - это понятно

а зачем сглаживать ?

в кодах применяю по просьбам заказчиков запрет входа при резком расширению спреда

Я для себя делал, мне не надо текщий, хотя можно добавить и его в ту же строчку. Я индюк в кодобазу выкинул, щас посмотрю, опубликовали или еще нет.
 
Alexey Volchanskiy:
Я для себя делал, мне не надо текщий, хотя можно добавить и его в ту же строчку. Я индюк в кодобазу выкинул, щас посмотрю, опубликовали или еще нет.

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

 
Yuriy Zaytsev:

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

Я в кодобазу добавил строчку с реальным спредом, завтра наверное выложат

пока тут размещу, см. аттач 

---------

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

Файлы:
 
Alexey Volchanskiy:

Что-то я в ступоре. При вызове OnDeinit() при переключении ТФ сбрасываются в нули глобальные переменные и массивы, заданные как динамические через ArrayResize(...) приобретают нулевую размерность.

Билд 971, но ведь раньше такого точно не было? Раньше при переключении ТФ глобальные переменные сохраняли свои значения и с массивы не ресайзились в ноль! Или у меня крыша потекла???

Вот пример с картинкой в отладчике после переключения таймфрейма. Видно, что переменная size равна нулю. 

 

Ага. Надо вызывать жестянщиков. Смена таймфрейма всегда была идентична просто запуску индикатора.  

Ну и проблемой это никогда не было. 

 
Alexey Volchanskiy:

Я в кодобазу добавил строчку с реальным спредом, завтра наверное выложат

пока тут размещу, см. аттач 

---------

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

Я имел ввиду следующее!

Можно брать фиксированный спред как фильтр т. е. выставил его и если спред больше - то советник не входит , если меньше - то входит.

А можно получить средний  и если текущий мгновенный резко  превышает средний , то советник не входит.

Коэффициентом в этой ситуации  служит период за который считается средний спред.

 
Yuriy Zaytsev:

Я имел ввиду следующее!

Можно брать фиксированный спред как фильтр т. е. выставил его и если спред больше - то советник не входит , если меньше - то входит.

А можно получить средний  и если текущий мгновенный резко  превышает средний , то советник не входит.

Коэффициентом в этой ситуации  служит период за который считается средний спред.

Чушь.      

пардон за мой французский.

 
Олег avtomat:

Чушь.      

пардон за мой французский.

 обоснуйте ваш бред

пардон за плохой латинский

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