初期化時に問題があるようです。あなたのコードをチェックしてください。もし助けが必要なら、関連するコードを投稿することができます。
ご返答ありがとうございます。
私のコードは4つのチャート(ペア)ではうまくいくのですが、もう1つ実行しようとするとこのようなことが起こります。
そして、そのコードはちょっと巨大なので、それがあなたの助けになるかどうかは分かりませんが...。
コードのせいではないかもしれません。ターミナルウィンドウをドラッグしているときにターミナルがクラッシュして、一部回復しましたが、グローバル初期化に失敗したと言われました。ターミナルを再起動する必要がありました。build 625以前にはこのようなエラーは見たことがなく、この1週間ほどで複数の報告がありました。
皆さん、このスレッドはもう1ヶ月ほど前のものですが、これはコードの問題ではなく、MetaTraderの問題だと思います。私は作業中のインジケータでランダムにこの現象が起こりました。インジケーターのプロパティを 見たり変更したりすると起こることもあるし、ターミナルをシャットダウンして再起動すると起こることもあるし、ただ自然に起こることもある。間違いなく何らかの初期化の問題です。なぜそう確信できるかというと、今いるフレームとは異なる時間軸でMAを表示するために作成したボタン群があるからです。どの場合も、失敗すると、TFボタンはチャート上に残っていますが、インジケータは削除されています。当然、ボタンはもう何もしません。元に戻すには、手動でボタンを削除して、インジケータをチャートに戻さなければなりません。しばらくはうまくいっていたのですが、ある日突然、ボタンが消えてしまいました。またダメになりました。理由も理由もありません。問題は私たちのコードにあるとは思えません。MT4で何かが狂っているのだと思います。ちなみに私はv625を動かしています。もし、これを回避する方法を思いついたら、投稿します。
Prof
私もこの「グローバル初期化に失敗しました」が発生しました。
チャートのタイムフレームを変更したときに起こりました。
原因がわからず、再現することができません。
奇妙なことに、initの最後の2ブロックのコードはオブジェクトを作成 し、これらはチャート上に作成されました。
deinitが呼ばれなかったので、それらは削除されませんでした。
int OnInit() { //--- indicator buffers mapping IndicatorBuffers(4); //---- drawing settings SetIndexArrow(0,250); SetIndexArrow(1,250); SetIndexStyle(0,DRAW_NONE); SetIndexDrawBegin(0,i-1); SetIndexBuffer(0,CTFresistancetBuffer); SetIndexLabel(0,"Resistance"); SetIndexStyle(1,DRAW_NONE); SetIndexDrawBegin(1,i-1); SetIndexBuffer(1,CTFsupportBuffer); SetIndexLabel(1,"Support"); SetIndexBuffer(2,HTFresistancetBuffer,INDICATOR_CALCULATIONS); SetIndexBuffer(3,HTFsupportBuffer,INDICATOR_CALCULATIONS); switch(S_R_TimeFrame) { case M5: SRPeriod=PERIOD_M5; break; case M15: SRPeriod=PERIOD_M15; break; case M30: SRPeriod=PERIOD_M30; break; case H1: SRPeriod=PERIOD_H1; break; case H4: SRPeriod=PERIOD_H4; break; case Daily: SRPeriod=PERIOD_D1; break; case Weekly: SRPeriod=PERIOD_W1; break; case Monthly: SRPeriod=PERIOD_MN1; break; case Current_Chart: SRPeriod=PERIOD_CURRENT; break; } if(Digits==3 || Digits==5) NewPip=Point*10; else NewPip=Point; string obj_name = "TDR_ARROW" ; ObjectCreate(obj_name, OBJ_LABEL, 0, 0, 0); ObjectSet(obj_name, OBJPROP_CORNER, 1); ObjectSet(obj_name, OBJPROP_XDISTANCE, 30); ObjectSet(obj_name, OBJPROP_YDISTANCE, 30); ObjectSetText(obj_name, CharToStr(243), 30, "Wingdings", clrBlue); obj_name = "TDR_LINE" ; ObjectCreate(obj_name, OBJ_TREND, 0, 0, 0); ObjectSetInteger(0,obj_name,OBJPROP_WIDTH,LineWidth+1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(i=ObjectsTotal()-1;i>=0;i--) { string ObName=ObjectName(i); if(StringFind(ObName,"TDR",0)!=-1) ObjectDelete(ObName); } return; } //+------------------------------------------------------------------+
私の問題は、新しいOnInit()とOnDeinit()の代わりにinit()とdeinit()を使っていたことだったようです。新しい呼び出しに切り替えた後、物事はうまくいっているようです。MetaQuotesは私を笑っていないはずです。私は、膨大な変更点のリストのどこかで、古いコールはまだMQL4と互換性があると読んだように記憶しています。実のところ、私の別のインジケータはまだそれらを使用しており、何の問題もなく多数のラベルオブジェクトを 作成しています。準備ができたら両方のインジケータを販売する予定なので、念のため変更することになりそうです。
とにかく、問題はインジケータが初期化されるときにdeinit()が呼ばれなかったことで、オブジェクトが本来削除されるはずのところ削除されなかったようです。オブジェクトがまだ存在していたため、初期化に失敗したのです。エラーチェックはしていたのですが、オブジェクト生成の失敗が報告されていませんでした。どうやら、私のエラー処理コードを実行する前に、MQLのエラーが発生したようです。
GumRaiさん、StringFindの代わりにSubStrを使ってみてはいかがでしょうか。問題ないはずなのですが、MQLはときどき不穏な動きをすることがあるのです。OnDeinit()は本当に呼ばれていないのでしょうか?私の場合、deinit()メソッドにAlertステートメントを入れて、それが呼び出されないことに気づいたことが、問題の手がかりになりました。また、削除のコードをエラー処理のコードでラップして、それが何をやっているのか見てみるのもいいかもしれません。
Prof.
私の問題は、新しいOnInit()とOnDeinit()の代わりにinit()とdeinit()を使っていたことだったようです。新しい呼び出しに切り替えた後、物事はうまくいっているようです。MetaQuotesは私を笑っていないはずです。私は、膨大な変更点のリストのどこかで、古いコールはまだMQL4と互換性があると読んだように記憶しています。実のところ、私の別のインジケータはまだそれらを使用しており、何の問題もなく多数のラベルオブジェクトを作成しています。準備ができたら両方のインジケータを販売する予定なので、念のため変更することになりそうです。
とにかく、問題はインジケータが初期化されるときにdeinit()が呼ばれなかったことで、オブジェクトが本来削除されるはずのところ削除されなかったようです。オブジェクトがまだ存在していたため、初期化に失敗したのです。エラーチェックはしていたのですが、オブジェクト生成の失敗が報告されていませんでした。どうやら、私のエラー処理コードを実行する前に、MQLのエラーが発生したようです。
GumRaiさん、StringFindの代わりにSubStrを使ってみてはいかがでしょうか。問題ないはずなのですが、MQLはときどき不穏な動きをすることがあるのです。OnDeinit()は本当に呼ばれていないのでしょうか?私の場合、deinit()メソッドにAlertステートメントを入れて、それが呼び出されないことに気づいたことが、問題の手がかりになりました。また、削除のコードをエラー処理のコードでラップして、それが何をやっているのか見てみるのもいいかもしれません。
Prof.
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
4つのチャートペアでエキスパートアドバイザーを動かしていますが、5番目のペアで動かすと、読み込みに成功した後、グローバル初期化に失敗し、その後削除 されます...
少なくとも、何を探せばいいのかご指導いただければ幸いです。
ありがとうございます。