2) Возможно не стоит инициализировать заново какие то переменные
staticintChanGeTF = 0; // Признак смены ТФ , держим как статическую переменную в памяти эксперта
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit()
{
if( ChanGeTF == 0) // при первом вызове код в OnInit полностью обрабатывается , но не отработает если просто менялся ТФ
{
// тут сформируем переменные для нашего эксперта которые отработают при первом старте экперта
// возможно сформируем графические объекты
}
else
{
ChanGeTF=0;
// сюда попадет при смене ТФ
// а формировать ничего уже не будем , у нас все сформировано и мы не желаем делать инициализацию переменных
// но если необходимо - что то обработаем в код OnInit
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
Print(__FUNCTION__,"_UninitReason = ",getUninitReasonText(_UninitReason)); // пишем в лог причину входа в DeInit - очень полезная информация
if ( REASON_CHARTCHANGE != _UninitReason )
{
// сюда не попадаем , если произошла смена ТФ
// удалим графические объекты - для полноценного завершения работы эксперта
//
}
else
{
// сюда попадем если просто произошла смена ТФ
// сделаем то что нам интересно - но при этом - к примеру - не будем удалять с графика графические объекты
ChanGeTF=1;
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+string getUninitReasonText(int reasonCode)
{
string text="";
//--- switch(reasonCode)
{
caseREASON_ACCOUNT:
text="Account was changed";break;
caseREASON_CHARTCHANGE:
text="Symbol or timeframe was changed";
break;
caseREASON_CHARTCLOSE:
text="Chart was closed";break;
caseREASON_PARAMETERS:
text="Input-parameter was changed";break;
caseREASON_RECOMPILE:
text="Program "+__FILE__+" was recompiled"; break;
caseREASON_REMOVE:
text="Program "+__FILE__+" was removed from chart";break;
caseREASON_TEMPLATE:
text="New template was applied to chart";break;
default:text="Another reason";
}
//--- return text;
}
Как тогда обрабатывать эти коды деинициализации в Inite индикатора, для чего нужны эти коды? Ведь в индикаторе нет возможности подождать, Sleep не работает.
Вы не читали разве то, что я написал несколько раз?
В индикаторах - никак. В пятёрке с самого начала было никак. Так как загружается совсем новая копия индикатора со всеми вытекающими последствиями
Ну не совсем корректно утверждать , что разумно а что не разумно. По теме я пробежался перед тем как писать.
Я посадил в тему пример кода , теперь те кто читают тему видят, что в индикаторе предложенный механизм не работает а в советнике работает.
Спасибо конечно за код. Только с советниками и так все замечательно, т. к. при смене ТФ не происходит переинициализации переменных, тогда как в индикаторах происходит. Если хотите реально помочь советом, "пробежитесь" пожалуйста ещё раз менее торопливо.
Вариант решения проблем при смене таймфрейма
Если просто произошла смена ТФ
1) Возможно не стоит удалять графические объекты
2) Возможно не стоит инициализировать заново какие то переменные
Вариант решения проблем при смене таймфрейма
Если просто произошла смена ТФ
1) Возможно не стоит удалять графические объекты
2) Возможно не стоит инициализировать заново какие то переменные
.
Вариант решения проблем при смене таймфрейма
Если просто произошла смена ТФ
1) Возможно не стоит удалять графические объекты
2) Возможно не стоит инициализировать заново какие то переменные
Ваш код не будет работать.
Еще раз повторяю:
В Ините нельзя контролировать результаты Деинита, т.к Деинит может сработать после выполнения Инита.
Ваш код не будет работать.
Еще раз повторяю:
В Ините нельзя контролировать результаты Деинита, т.к Деинит может сработать после выполнения Инита.
Имеете ввиду не будет работать - в индикаторе ? В экспертах он работает.
Как тогда обрабатывать эти коды деинициализации в Inite индикатора, для чего нужны эти коды? Ведь в индикаторе нет возможности подождать, Sleep не работает.
Вы не читали разве то, что я написал несколько раз?
В индикаторах - никак. В пятёрке с самого начала было никак. Так как загружается совсем новая копия индикатора со всеми вытекающими последствиями
С экспертами проблем нет. Эта тема как раз о индикаторах. Читайте внимательно.
Я прочитал первый пост.
Там написанро, цитирую:
"Написан индикатор или соаетник"
Я прочитал первый пост.
Там написанро, цитирую:
"Написан индикатор или соаетник"
На этом про советники заканчивается.
Ну не совсем корректно утверждать , что разумно а что не разумно.
По теме я пробежался перед тем как писать.
Я посадил в тему пример кода , теперь те кто читают тему видят, что в индикаторе предложенный механизм не работает а в советнике работает.
Автор темы по крайней мере на один вопрос ответ получил, причём с примером.
Ну не совсем корректно утверждать , что разумно а что не разумно.
По теме я пробежался перед тем как писать.
Я посадил в тему пример кода , теперь те кто читают тему видят, что в индикаторе предложенный механизм не работает а в советнике работает.