2) Forse non è necessario reinizializzare alcune variabili
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;
}
Come trattare questi codici di deinizializzazione in un indicatore, a cosa ci servono questi codici? Dopo tutto, non c'è la possibilità di aspettare nell'indicatore, Sleep non funziona.
Non hai letto più volte quello che ho scritto?
Non c'è modo negli indicatori. Non si può fare in cinque dall'inizio. Perché si scarica una copia completamente nuova dell'indicatore con tutte le sue conseguenze.
Nikolai Semko: Questa è la fine degli Expert Advisors.
Non è sempre saggio limitarsi a leggere il primo post prima di scrivere qualcosa.
Beh, non è del tutto esatto dire cosa è ragionevole e cosa no. Ho fatto un po' di ricerche sull'argomento prima di scriverlo.
Ho incollato un esempio di codice nel soggetto e ora chi legge il soggetto può vedere che questo meccanismo non funziona in un indicatore e che funziona in un EA.
L'autore del topic ha almeno ottenuto una risposta a una domanda, e con un esempio.
Beh, non è proprio esatto dire cosa sia ragionevole e cosa no. Ho fatto una piccola ricerca sull'argomento prima di scrivere.
Ora chi ha letto il topic può vedere che questo meccanismo non funziona in un indicatore e funziona in un EA.
Grazie per il codice, naturalmente. Funziona bene con Expert Advisors perché quando cambiamo TF, le variabili non vengono reinizializzate, mentre negli indicatori vengono reinizializzate. Se vuoi davvero aiutare con un consiglio, per favore "eseguilo" di nuovo con meno fretta.
Opzione per risolvere i problemi quando si cambiano i tempi
Se hai appena cambiato TF
1) Probabilmente non è necessario cancellare gli oggetti grafici.
2) Forse non è necessario reinizializzare alcune variabili
Opzione per risolvere i problemi quando si cambiano i tempi
Se hai appena cambiato TF
1) Probabilmente non è necessario cancellare gli oggetti grafici.
2) Forse non è necessario reinizializzare alcune variabili
.
Opzione per risolvere i problemi quando si cambiano i tempi
Se ci fosse solo un cambio di orario
1) Forse non si dovrebbero cancellare gli oggetti grafici.
2) Forse non si dovrebbe reinizializzare nessuna variabile
Il vostro codice non funzionerà.
Ancora una volta:
Non potete controllare i risultati di Deinit in Inite, perché Deinit può funzionare dopo che Inite è stato fatto.
Il vostro codice non funzionerà.
Ancora una volta:
Non potete controllare i risultati di Deinit in Inite, perché Deinit può essere attivato dopo l'esecuzione di Inite.
Vuoi dire che non funziona- in un indicatore? Negli esperti funziona.
Come trattare questi codici di deinizializzazione in un indicatore, a cosa ci servono questi codici? Dopo tutto, non c'è la possibilità di aspettare nell'indicatore, Sleep non funziona.
Non hai letto più volte quello che ho scritto?
Non c'è modo negli indicatori. Non si può fare in cinque dall'inizio. Perché si scarica una copia completamente nuova dell'indicatore con tutte le sue conseguenze.
Non ci sono problemi con gli esperti. Questo argomento riguarda solo gli indicatori. Leggete attentamente.
Ho letto il primo post.
Dice, e cito:
"Indicatore scritto o Co-Assessore"
Ho letto il primo post.
Dice, e cito:
"Scritto da un indicatore o coautore".
Questa è la fine degli Expert Advisors.
Beh, non è del tutto esatto dire cosa è ragionevole e cosa no.
Ho fatto un po' di ricerche sull'argomento prima di scriverlo.
Ho incollato un esempio di codice nel soggetto e ora chi legge il soggetto può vedere che questo meccanismo non funziona in un indicatore e che funziona in un EA.
L'autore del topic ha almeno ottenuto una risposta a una domanda, e con un esempio.
Beh, non è proprio esatto dire cosa sia ragionevole e cosa no.
Ho fatto una piccola ricerca sull'argomento prima di scrivere.
Ora chi ha letto il topic può vedere che questo meccanismo non funziona in un indicatore e funziona in un EA.