Эксперт перестаёт работать

 

Добрый День!

Столкнулся с такой проблемой. 

Написал эксперта на кастомном индикаторе. Индикатор рисует всё чётко. Советник тоже верно берёт его сигналы, делает всё как надо. 

НО!

Через какое-то время - день, два - индикатор объявляет забастовку. Т.е. он всё рисует как надо, но в советник выдаёт либо чёрти что, либо вообще ничего. Такое впечатление, что заполняется некий кеш (???) и всё останавливается.

 RefreshRates(); не помогает. Перезапуск МТ - помогает на какое-то время. Но потом всё опять останавливается.  

Что это, Бэримор??? (с)

 
Artemij:

Добрый День!

Столкнулся с такой проблемой. 

Написал эксперта на кастомном индикаторе. Индикатор рисует всё чётко. Советник тоже верно берёт его сигналы, делает всё как надо. 

НО!

Через какое-то время - день, два - индикатор объявляет забастовку. Т.е. он всё рисует как надо, но в советник выдаёт либо чёрти что, либо вообще ничего. Такое впечатление, что заполняется некий кеш (???) и всё останавливается.

 RefreshRates(); не помогает. Перезапуск МТ - помогает на какое-то время. Но потом всё опять останавливается.  

Что это, Бэримор??? (с)

количество буферов должно четко соответствовать количеству отображаемых массивов

если больше, то будет описываемая Вами ситуация

 
Renat Akhtyamov:

количество буферов должно четко соответствовать количеству отображаемых массивов

если больше, то будет описываемая Вами ситуация

Я это знаю. И у меня 2=2

 
Artemij:

Добрый День!

Столкнулся с такой проблемой. 

Написал эксперта на кастомном индикаторе. Индикатор рисует всё чётко. Советник тоже верно берёт его сигналы, делает всё как надо. 

НО!

Через какое-то время - день, два - индикатор объявляет забастовку. Т.е. он всё рисует как надо, но в советник выдаёт либо чёрти что, либо вообще ничего. Такое впечатление, что заполняется некий кеш (???) и всё останавливается.

 RefreshRates(); не помогает. Перезапуск МТ - помогает на какое-то время. Но потом всё опять останавливается.  

Что это, Бэримор??? (с)

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

Я для таких целей использую лэйбл на чарте, что б не мусорить избыточно.
 
Renat Akhtyamov:

количество буферов должно четко соответствовать количеству отображаемых массивов

если больше, то будет описываемая Вами ситуация

Т.е. если 2 графических буфера и два для вычислений, то будет коллапс? А где об этом написано, чем объясняется?

 
Aleksey Vyazmikin:

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

Я вывел результаты в Comment

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

И самое интересное, что Окно данных "говорит" именно то, что надо, то, что и сейчас, и раньше (+1  +2...) нарисовал индикатор. Но с тем, что получает советник это никак не совпадает! 

Я буру данные из shift1. Так вот в Окне данных написано одно (то, что и нарисовано), а в Комменте (из советника) - совершенно другое! 

 
Artemij:

Я вывел результаты в Comment

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

А если индикатор бросить на чарт с теми же настройками, то расчет правильный будет в информационном окне терминала? А если параллельно запустить этот индикатор и подождать пару дней?

Artemij:

И самое интересное, что Окно данных "говорит" именно то, что надо, то, что и сейчас, и раньше (+1  +2...) нарисовал индикатор. Но с тем, что получает советник это никак не совпадает! 

Я буру данные из shift1. Так вот в Окне данных написано одно (то, что и нарисовано), а в Комменте (из советника) - совершенно другое! 

Так говорит оно спустя то же время?

Если так, то странно. Думаю, лучше писать в серсесдеск, так как воспроизвести тут эту ситуацию не представляется возможным.

 
Aleksey Vyazmikin:

А если индикатор бросить на чарт с теми же настройками, то расчет правильный будет в информационном окне терминала? 

В том то и дело, что в Окне данных одно, а ПАРАЛЛЕЛЬНО в Комменте из Советника - совершенно другое!

 
К сожалению не могу сделать скриншот. Котировки не идут. В Пн выложу.
 

Может давать сбой если функции используете в условии, нужно приравнять ее значению переменной и потом только использовать

то есть нельзя if(ind()>0){}

нужно

double ind=ind();

if(ind>0){}

 
Vladimir Mametov:

Может давать сбой если функции используете в условии, нужно приравнять ее значению переменной и потом только использовать

то есть нельзя if(ind()>0){}

нужно

double ind=ind();

if(ind>0){}

Полностью с Вами согласен! 

И конструкцию if(ind()>0){} не использую никогда! Только операции с переменными.

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