2) Talvez não seja necessário reinicializar algumas variáveis
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;
}
Como processar esses códigos de desinicialização em um indicador, para que precisamos desses códigos? Afinal de contas, não há possibilidade de esperar no indicador, Dormir não funciona.
Você não leu o que eu escrevi várias vezes?
Não há como nos indicadores. Você não pode fazer isso em cinco, desde o início. Porque você baixa uma cópia completamente nova do indicador com todas as suas conseqüências.
Bem, não é realmente preciso dizer o que é razoável e o que não é. Eu fiz uma pequena pesquisa sobre o assunto antes de escrever.
Agora quem lê o assunto pode ver que este mecanismo não funciona em um indicador e funciona em um EA.
Obrigado pelo código, é claro. Funciona bem com os Expert Advisors porque quando mudamos a TF, as variáveis não são reinicializadas, enquanto nos indicadores elas são reinicializadas. Se você realmente quer ajudar com conselhos, por favor, "corra" novamente com menos pressa.
Opção para resolver problemas ao alterar os prazos
Se você acabou de mudar a TF
1) Provavelmente não é necessário apagar objetos gráficos.
2) Talvez não seja necessário reinicializar algumas variáveis
Opção para resolver problemas ao alterar os prazos
Se você acabou de mudar a TF
1) Provavelmente não é necessário apagar objetos gráficos.
2) Talvez não seja necessário reinicializar algumas variáveis
.
Opção para resolver problemas ao alterar os prazos
Se houvesse apenas uma mudança de tempo
1) Talvez você não deva excluir objetos gráficos.
2) Talvez você não deva reinicializar nenhuma variável
Seu código não vai funcionar.
Mais uma vez:
Você não pode controlar os resultados de Deinit em Inite, porque Deinit pode trabalhar depois de Inite ser feito.
Seu código não vai funcionar.
Mais uma vez:
Você não pode controlar os resultados de Deinit em Inite, porque Deinit pode ser acionado depois de Inite ter corrido.
Quer dizer que não vai funcionar- em um indicador ? em especialistas funciona.
Como processar esses códigos de desinicialização em um indicador, para que precisamos desses códigos? Afinal de contas, não há possibilidade de esperar no indicador, Dormir não funciona.
Você não leu o que eu escrevi várias vezes?
Não há como nos indicadores. Você não pode fazer isso em cinco, desde o início. Porque você baixa uma cópia completamente nova do indicador com todas as suas conseqüências.
Não há nenhum problema com os especialistas. Este tópico é apenas sobre indicadores. Leia-o com atenção.
Eu li o primeiro post.
Diz, e eu cito:
"Indicador Escrito ou Co-Assessor"
Eu li o primeiro post.
Diz, e eu cito:
"Escrito por um indicador ou co-autor".
Esse é o fim dos Consultores Especialistas.
Bem, não é totalmente preciso dizer o que é razoável e o que não é.
Fiz uma pequena pesquisa sobre o assunto antes de escrevê-lo.
Coloquei um exemplo de código no assunto e agora quem leu o assunto pode ver que este mecanismo não funciona em um indicador e que funciona em um EA.
O autor do tópico obteve pelo menos uma resposta a uma pergunta, e com um exemplo.
Bem, não é realmente preciso dizer o que é razoável e o que não é.
Eu fiz uma pequena pesquisa sobre o assunto antes de escrever.
Agora quem lê o assunto pode ver que este mecanismo não funciona em um indicador e funciona em um EA.