Опять OnDeinit()

 

Как определить что сменился символ?

void OnDeinit(const int reason)
{
   // 3 - Символ или период графика был изменен
   if (reason == REASON_CHARTCHANGE)
   {

Почему то эти два события объединены в одно, при смене ТФ мне ни чего делать не надо, а вот при смене символа, надо! Приходится запоминать текущий символ в объекте на графике и в OnInit() сравнивать его с текущим, как то не прикольно, может есть более красивые решения?

void OnDeinit(const int reason)
{
   // 6 - Активирован другой счет
   if (reason == REASON_ACCOUNT)
   {

И почему в МТ4 не прилетает событие при смене счета? или я что то не так понял и оно не должно приходить? Приходится тоже самое делать, запоминать счет в объект на графике и анализировать в OnTimer()

Речь про индикатор, не про эксперт, MT4 build 1260
 
pivalexander:

Как определить что сменился символ?

Почему то эти два события объединены в одно, при смене ТФ мне ни чего делать не надо, а вот при смене символа, надо! Приходится запоминать текущий символ в объекте на графике и в OnInit() сравнивать его с текущим, как то не прикольно, может есть более красивые решения?

Вы правильно делаете. Другого пути, к сожалению, нет.

И почему в МТ4 не прилетает событие при смене счета? или я что то не так понял и оно не должно приходить? Приходится тоже самое делать, запоминать счет в объект на графике и анализировать в OnTimer()

Речь про индикатор, не про эксперт, MT4 build 1260

Индикаторы вообще урезаны в правах. Не знаю, почему:

Индикаторы принимают пока только код 1(REASON_REMOVE) и код 2(REASON_RECOMPILE).

Вот это вот "пока" я читаю как "всегда". Хотя имеются расхождения со справкой, если проверить в боевом режиме. Так, смена символа/ТФ, все же, имеется. Смену счета забыли или не захотели добавлять. Сейчас аппелировать к разработчикам по этому поводу, думаю, нет смысла. Для них МТ4 не интересен.