mql5言語の特徴、微妙なニュアンスとテクニック - ページ 179

 
Konstantin Nikitin:

オプションとして

動作しない。

 
fxsaber:

動作しない。

端末のエキスパートが残っていたので、リロードしたようです。アカウントを変更したときにチャートから削除しました。唯一、Expert Advisorの各バリアントのグローバル名を弄る必要があります。charの名前に付加することが可能です。悩んだことはありません。

 
Konstantin Nikitin:

端末に負荷をかけすぎて、エキスパートが残ってしまったようです。アカウントを変更した時にチャートから削除してしまった...。唯一、Expert Advisorの各バリアントのグローバル名を弄る必要があります。charの名前に追加することができます。悩んだことはありません。

Expert Advisorが動作していないチャートで動作させる必要があります。また、勤務体系に合わせたオプションも用意しています。

 
Konstantin Nikitin:

端末に負荷をかけすぎて、エキスパートが残ってしまったようです。アカウントを変更した時にチャートから削除してしまった...。唯一、Expert Advisorの各バリアントのグローバル名を弄る必要があります。charの名前に追加することができます。悩んだことはありません。

  1. ForexTimeFXTM-Demo01でデモを開始します。
  2. BrentシンボルでExpert Advisorを実行します。
  3. MQ-Demoに切り替えます。
  4. Experts メニューの PKM を使用して、Expert Advisor が実行中かどうかを確認します。
 
fxsaber:

  1. ForexTimeFXTM-Demo01でデモを開始します。
  2. BrentシンボルでExpert Advisorを実行します。
  3. MQ-Demoに切り替えます。
  4. Experts メニューの PCM を使用して、Expert Advisor がハングアップしているかどうかを確認します。


fxsaber:

一般に、REASON_ACCOUNTでExpertRemoveを呼び出す ことは、全く意味のないことである。


確認したところ、クリティカルエラーでもEAがアンロードされないのはもっと悲しいことだと思います。

const long login = AccountInfoInteger(ACCOUNT_LOGIN);
//+------------------------------------------------------------------+
int OnInit()
{
   Print(__FUNCTION__);
   Print("_StopFlag = ",_StopFlag);
   Print("_UninitReason = ",_UninitReason);
   Print("login = ",login);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Print(__FUNCTION__);
   Print("_StopFlag = ",_StopFlag);
   Print("_UninitReason = ",_UninitReason);
   Print("login = ",login);
   if(_StopFlag && _UninitReason == 6) {int i=1; int j = 10/--i;}
}
//+------------------------------------------------------------------+

が、アカウントを変更するとグローバルスコープが完全に消去される

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) OnDeinit

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) _StopFlag = 1

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) _UninitReason = 6

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) login = 21796970

2020.05.21 14:30:17.303 tst1 (EURUSD,H1) 'tst1.mq5' (25,60) でゼロディバイド。

2020.05.21 14:30:17.373 Experts 口座が変更されたため、自動売買は無効となりました。

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) OnInit

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) _StopFlag = 0

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) _UninitReason = 0

2020.05.21 14:30:17.797 tst1 (EURUSD,H1) login = 500030706

2020.05.21 14:30:24.492 Experts 自動売買が有効になっています。

 
Igor Makanu:

確認したところ、クリティカルエラーでもEAがアンロードされないので、さらに悲しいと思います。

が、アカウントを変更すると、グローバルスコープが完全に消去されてしまいます。

そこではすべてが論理的に動いています(ただし、ところどころぎこちないですが)。仕組みを理解すればいいのです。

 
fxsaber:

そこではすべてが論理的に動いています(ただし、ところどころぎこちないですが)。仕組みを理解すればいいのです。

まあ、仕組みはヘルプに書いてあるのですが、ヘルプは作業中のすべてのケースを考慮しているわけではありません。この情報は管理者が出したものですが、そこにモデレーターが絡んできて、二人で評決を出すことになりました。妄想です。https://www.mql5.com/ru/forum/334269/page53#comment_16412120


機構を与える、ヘルプは無力だった ;)

 
Igor Makanu:

メカニズムを与える、ヘルプは無力であった ;)

REASON_ACCOUNTの 場合(口座を変更せず、再ログインしただけでも)、EAが完全にアンロードされ、新しいコピーがロード されます。

このため、OnDeinitのExpertRemoveは、アンロードされたものに関係するため、新しいコピーには影響しない。


シンボルがない場合、新しいコピーは何も実行されずにロードされます。

そして、問題は、ハングアップしている新しいコピーをアンロードすることでしたが、実行されていません。


ハンギングコピーとは、シンボルがある他の口座に切り替わった場合、EAが起動することを意味します。

 
fxsaber:

全く動かないのに、なぜおろすのか?

 
Andrey Khatimlianskii:

そして、全く動かないのになぜアンロードするのか?

完全なコントロールが必要です。

理由: