Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 178

 
Andrey Barinov:

Wo ExpertRemove nicht funktioniert, gibt es auch ChartClose(). Ich verstehe nicht, wo das Problem liegt. Was geschieht, nachdem das Konto geändert wurde? Wird das zusätzliche Diagramm mit dem Expert Advisor angezeigt? Oder ändert sich nur das aktuelle Diagrammsymbol? Vielleicht hat sich die ChartID geändert, und das ist der Grund, warum Ihre vorherige Lösung nicht funktioniert. Ticks werden sowieso behandelt, das bedeutet, dass wir sie in OnTick entladen müssen, wenn OnInit nicht funktioniert.

Angenommen, Sie haben alle diese Fragen beantwortet, was dann? Wenn Sie sich mit dem Thema befassen wollen, müssen Sie es auf Ihrem Rechner ausprobieren.

Ich habe diese funktionierende Lösung gefunden.

#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    
  }  
}


ZZY Erforderlich für einen Kampfberater.

 
fxsaber:

Bitte zeigen Sie hier den Quellcode des EAs, der sich selbst entlädt, wenn das Konto geändert wird.

Der Quellcode wird später verfügbar sein. Prüfen Sie zunächst, ob dies eine Funktion für Sie ist.

 
Alexey Viktorov:

Der Quellcode wird später verfügbar sein. Prüfen Sie zunächst, ob es sich um besondere Merkmale für Sie handelt.

Es läuft. Funktioniert nicht.

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

Offenbar ist es bereits ein Trend, russische Wörter im Protokoll zu verwenden.

 
fxsaber:

Es läuft und läuft. Es funktioniert nicht.

Offenbar ist es bereits ein Trend, russische Wörter in den Protokollen zu verwenden.

Das sind keine Protokolle. Ich wollte Sie nicht beleidigen. Ich schreibe das für mich selbst, wenn etwas nicht funktioniert. Und dann habe ich vergessen, sie zu löschen.

Wenn Sie das nicht erwartet haben, dann entschuldigen Sie mich bitte. Sie wollten den EA aus dem Chart entfernen, als Sie das Konto gewechselt haben, und der EA macht das. Warum es bei Ihnen nicht funktioniert, will ich nicht wissen.
 
Alexey Viktorov:

Dies sind keine Protokolle. Ich wollte Sie nicht beleidigen. So schreibe ich für mich selbst, wenn etwas nicht klappt. Und dann habe ich vergessen, sie zu löschen.

Wenn Sie eine andere praktikable Lösung als die von mir vorgeschlagene finden, wird es interessant sein, dies zu sehen.

 
Alexey Viktorov:

Sie wollten den EA aus dem Chart entfernen, als Sie das Konto gewechselt haben, der EA macht das.

Leider ist das nicht der Fall.



Im Allgemeinen ist der Aufruf von ExpertRemove mit REASON_ACCOUNT völlig sinnlos.

 
fxsaber:

Leider ist das nicht der Fall.



Generell ist der Aufruf von ExpertRemove mit REASON_ACCOUNT eine absolut sinnlose Sache.

Wenn Sie kein Anfänger sind, sollten Sie wissen, dass der Expert Advisor nur mit einem Chart funktioniert. Ohne eine Karte funktioniert nur der Dienst. Wie funktioniert das?

 
Alexey Viktorov:

Wenn Sie kein Anfänger sind, sollten Sie wissen, dass der EA nur mit einem Chart funktioniert. Ohne eine Karte funktioniert nur der Dienst. Wie funktioniert das?

Sie sind in dieser Angelegenheit leider völlig inkompetent. Die Lösungen, die hier angeboten werden, sind die eigentliche Subtilität des Arbeitens und des Verstehens, wie es tatsächlich funktioniert.

 
fxsaber:

Sie sind in dieser Angelegenheit leider völlig inkompetent. Die hier vorgeschlagenen Lösungen sind die wirklichen Feinheiten der Arbeit und des Verständnisses, wie die Dinge tatsächlich funktionieren.

Nun, ja. Es gibt hier nur eine kompetente Person.

 

Als Option.

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);
}