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;
}
時間軸を変更する際の問題解決オプション
TFを変更しただけの場合
1)グラフィカル・オブジェクトを削除 する必要はないでしょう。
2) 一部の変数の再初期化は必要ないのでは?
時間軸を変更する際の問題解決オプション
TFを変更しただけの場合
1)グラフィカル・オブジェクトを削除 する必要はないでしょう。
2) 一部の変数の再初期化は必要ないのでは?
。
時間軸を変更する際の問題解決オプション
時間軸の変更だけなら
1)グラフィカル・オブジェクトを削除 しない方がいいかもしれません。
2) 変数を再初期化しないほうがいいのかもしれない
あなたのコードは動作しません。
もう一度言います。
Initeが終わった後にDeinitが動作することがあるので、IniteでDeinitの結果を制御することはできません。
あなたのコードは 動作 しません。
もう一度言います。
DeinitはIniteが実行された後に起動することができるので、IniteでDeinitの結果を制御することはできません。
インジケーターでは動かないという ことですか? エキスパートでは動きます。
これらの非初期化のコードをインジケータでどのように処理するか、何のためにこれらのコードが必要なのか?結局のところ、インジケーターで待機する可能性はなく、スリープは機能しません。
私が書いたものを何度も読み返したのではありませんか?
インジケータに方法はない。最初から5つでできるわけがない。なぜなら、あなたはインジケーターの全く新しいコピーとそのすべての結果をダウンロードするからです。
専門家でも問題ない。このトピックは、あくまで指標に関するものです。よく読んでみてください。
最初の投稿を読みました。
と書いてあり、引用します。
"ライティング・インディケーター "または "コ・アセッサー"
最初の投稿を読みました。
と書いてあり、引用します。
"指示者または共著者が書いたもの"
以上でExpert Advisorsは終了です。
まあ、何が合理的で何が合理的でないかというと、まったく正確ではありませんが。
書く前にお題を少し駆け足で書いてみました。
コード例をお題に貼り付けて、これでお題を読んだ人は、この仕組みがインジケーターでは機能せず、EAで機能することがわかると思います。
このトピックの著者は、少なくとも1つの質問に対して、例を挙げての回答を得たのです。
まあ、何が合理的で何が合理的でないかというと、あまり正確ではありませんが。
書く前に少し調べてみたんです。
これで、この仕組みがインジケータでは機能せず、EAで機能することが、このテーマを読まれた方にはお分かりいただけたと思います。