грабли в init()

 
Да что за ерунда! Вставляю строчку в init():
Print("TICKVALUE: ",MarketInfo("USDCHF",MODE_TICKVALUE);
При старте терминала получаю 0. Если индикатор принудительно переинициализировать, получаю правильное значение.
Если кусок кода перенести в start(), то индикатор работает нормально, но мне не нужен MarketInfo на каждом тике - индикатор и так "тяжелый" для процессора.
 
MarketInfo не работает хорошо в init. Решение - проверяйте значение на первом тике.
 
Itso:
MarketInfo не работает хорошо в init. Решение - проверяйте значение на первом тике.
Uuu..ps! А я пользую:

int init()
Spread=MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT);

Вроде бы, проблем не замечал, но специально и не исследовал. А нельзя ли по подробнее о возможных проблемах?
 
Itso:
MarketInfo не работает хорошо в init. Решение - проверяйте значение на первом тике.
Странно это как-то. Как мне видится, для MarketInfo самое место в init(). В основном, это данные, которые не меняются на каждом тике.

З.Ы. А сколько времени убито на поиск ошибки.
 
VBAG:
Itso:
MarketInfo не работает хорошо в init. Решение - проверяйте значение на первом тике.
Uuu..ps! А я пользую:

int init()
Spread=MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT);

Вроде бы, проблем не замечал, но специально и не исследовал. А нельзя ли по подробнее о возможных проблемах?
А вот spread -то как раз и меняется, например, перед новостями. Его нужно проверять на каждом тике.
 

Работает для некоторые MODE_ - а для других - нет, хотя конечно по идеи должно для всех. Официальное объяснение - в init загружено не все рыночное окружение.

 
vimac:
Да что за ерунда! Вставляю строчку в init():
Print("TICKVALUE: ",MarketInfo("USDCHF",MODE_TICKVALUE);
При старте терминала получаю 0. Если индикатор принудительно переинициализировать, получаю правильное значение.
Если кусок кода перенести в start(), то индикатор работает нормально, но мне не нужен MarketInfo на каждом тике - индикатор и так "тяжелый" для процессора.


Меня тоже интересуют подобные вопросы.

А можно узнать для какой цели необходимо выполнить некоторые вычисления прямо при старте терминала,ещё до первого тика? И что Вы имеете ввиду, говоря "принудительно переинициализировать"?

 
vimac:
А вот spread -то как раз и меняется, например, перед новостями. Его нужно проверять на каждом тике.
Ну это уж слишком! Перед новостями нужно, закрывать позиции или в крайнем случае отложенники выставлять, а не мерить спред!
Это, собственно, не мое мнение, но я с ним совершенно согласен.
 
SK. писал (а):

А можно узнать для какой цели необходимо выполнить некоторые вычисления прямо при старте терминала,ещё до первого тика? И что Вы имеете ввиду, говоря "принудительно переинициализировать"?

Я имею в виду совершенно стандартные действия, например, переключиться на другой таймфрейм.
В init() много чего бывает нужно сделать - помимо обсуждаемого MODE_TICKVALUE, например, создать графический объкт и текст в окне индикатора, послать и получить глобальные переменные от других индикаторов или MarketInfo(Symbol(), MODE_STOPLEVEL), чтобы не получать ошибки о слишком близких стопах и TP по конкретному инструменту, но это уже в советнике, а не в индикаторе и т.д.
 

Может стоит провериться - IsConnected()?

Если эксперт уже висел на чарте, а терминал только запущен, могло не успеть пройти соединение с сервером и как следовательно рыночное окружение не прогрузилось?

 
VBAG:
Ну это уж слишком! Перед новостями нужно, закрывать позиции или в крайнем случае отложенники выставлять, а не мерить спред!
Это, собственно, не мое мнение, но я с ним совершенно согласен.
Ну а, почему бы не проверить спред и в случае, если он больше установленного лимита, не торговать :)