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

 
Andrey Barinov:

ExpertRemoveが機能しない場合、ChartClose()もあります。何が問題なのか理解できない。アカウントを変更した後はどうなりますか?Expert Advisorで追加チャートが表示されるのか?それとも、現在のチャートシンボルだけが変化するのでしょうか?おそらく、ChartIDが変更されたため、以前のソリューションが機能しないのでしょう。 チックはいずれにせよ処理されるので、OnInitが機能しない場合、OnTickにそれらをアンロードする必要があることを意味します。

これらの質問にすべて答えたとして、それからどうする?本題に入りたいなら、自分のマシンで試さないことにはどうにもならない。

この解決策に辿り着きました。

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

// Выгружает себя, если после смены счета отсутствует символ.
void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
  {
    MqlTick Tick;
    
    if (!SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM) && !SymbolInfoTick(_Symbol, Tick))
    {
      Alert("Account is changed!");
      
      if (EXPERT::Remove())
        Alert("Expert is removed!");
      
      // ExpertRemove(); // Не поможет.
      // ChartClose();   // Не лучшее решение.
    }
//  else
      // Для кастомных и других случаев дополнить код следущим решением.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819    
  }  
}


SZY コンバットアドバイザーに必要なもの。

 
fxsaber:

口座変更時にアンロードするEAのソースコードをここに示してください。

ソースコードは後日公開予定です。これが自分にとっての機能かどうか、まず確認してください。

 
Alexey Viktorov:

ソースコードは後日公開予定です。これらが自分にとっての特別な機能であるかどうか、まず確認してください。

走っています。動作しない。

2020.05.21 10:49:58.028 00 (EURUSD,M1)  Идиот
2020.05.21 10:49:58.028 00 (EURUSD,M1)  ExpertRemove() function called

どうやら、ログにロシア語の単語を使うのがすでにトレンドになっているようです。

 
fxsaber:

稼働しています。うまくいかない。

どうやら、過去ログにロシア語の単語を使うのは、すでにトレンドになっているようです。

これはログではありません。悪気はなかったんです。自分のために書いているんです、何かうまくいかないときに。そして、削除するのを忘れてしまった。

もし期待外れだったら、ご容赦ください。口座変更時にチャートからEAを削除 したかったのでしょう、EAがそうしています。どうしてうまくいかないのか、私は知りたくありません。
 
Alexey Viktorov:

これはログではありません。悪気はなかったんです。これは、何かがうまくいかなかったときに、自分のために書いているんです。そして、削除するのを忘れてしまった。

もし、私が提案した以外の実行可能な解決策が見つかったら、面白いことになりますよ。

 
Alexey Viktorov:

口座変更時にチャートからEAを削除したかったのでしょう、EAがそうしてくれるのです。

残念ながら、そうではありません。



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

 
fxsaber:

残念ながら、そうではありません。



一般に、REASON_ACCOUNT を指定してExpertRemove を呼び出す ことは、全く意味のないことです。

初心者でない方は、Expert Advisorはチャートでしか動作しないことを知っておく必要があります。図表がないと、サービスだけしか機能しない。その仕組みは?

 
Alexey Viktorov:

初心者でない方は、EAがチャートでしか動作しないことを知っておく必要があります。図表がないと、サービスだけしか機能しない。どのように機能するのですか?

この件に関しては、残念ながらあなたは全く無能です。ここで提示されるワーキングソリューションは、実際にどのように機能するかを理解するための、本当の意味での繊細なものです。

 
fxsaber:

この件に関しては、残念ながらあなたは全く無能です。ここで提案されたワーキング・ソリューションは、実際に物事がどのように動いているかを理解するための、本当の意味での繊細なものです。

そうですね、有能な人はここに一人しかいませんね。

 

オプションとして

int OnInit(void)
{
     string name_global = "exp_account";
     if( GlobalVariableCheck(name_global) )
     {
          if( AccountInfoInteger(ACCOUNT_LOGIN) !=  GlobalVariableGet(name_global) )
               if( GlobalVariableDel(name_global) )
                    ExpertRemove();
     }
     else
          GlobalVariableSet( name_global, AccountInfoInteger(ACCOUNT_LOGIN) );

     return(INIT_SUCCEEDED);
}
理由: