Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 178

 
Andrey Barinov:

Dove ExpertRemove non funziona - c'è anche ChartClose(). Non capisco quale sia il problema. Cosa succede dopo il cambio dell'account? Mostra il grafico aggiuntivo con l'Expert Advisor? O cambia solo il simbolo del grafico corrente? Forse, il ChartID è cambiato, ed è per questo che la tua soluzione precedente non funziona. I tick sono gestiti comunque, significa che dobbiamo scaricarli in OnTick, se OnInit non funziona.

Diciamo, risposto a tutte queste domande, e poi? Se volete approfondire l'argomento, non potete farlo senza provarlo sulla vostra macchina.

Sono arrivato a questa soluzione funzionante.

#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 Richiesto per un consigliere di combattimento.

 
fxsaber:

Per favore mostra qui il codice sorgente dell'EA che si scarica quando il conto viene cambiato.

Il codice sorgente sarà disponibile più tardi. Controlla prima se questa è una caratteristica per te.

 
Alexey Viktorov:

Il codice sorgente sarà disponibile più tardi. Controlla prima se queste sono caratteristiche speciali per te.

Sta correndo. Non funziona.

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

A quanto pare, è già una tendenza a usare parole russe nel registro.

 
fxsaber:

È attivo e funzionante. Non funziona.

A quanto pare, è già una tendenza a usare parole russe nei registri.

Questi non sono registri. Non volevo offenderti. Lo scrivo per me stesso, quando qualcosa non funziona. E poi ho dimenticato di cancellarlo.

Se non è quello che vi aspettavate, vi prego di scusarmi. Volevi rimuovere l'EA dal grafico quando hai cambiato account, l'EA lo fa. Come non funziona per voi non lo voglio sapere.
 
Alexey Viktorov:

Questi non sono registri. Non volevo offenderti. Questo sono io che scrivo per me stesso quando qualcosa non funziona. E poi ho dimenticato di cancellarlo.

Se trovi una soluzione praticabile diversa da quella che ho suggerito, sarà interessante vedere.

 
Alexey Viktorov:

Volevi rimuovere l'EA dal grafico quando hai cambiato account, l'EA lo fa.

Sfortunatamente, non è così.



In generale, chiamare ExpertRemove con REASON_ACCOUNT è una cosa completamente senza senso.

 
fxsaber:

Sfortunatamente, non è così.



In generale, chiamare ExpertRemove con REASON_ACCOUNT è una cosa assolutamente senza senso.

Se non sei un principiante, devi sapere che l'Expert Advisor funziona solo con un grafico. Senza un grafico funziona solo il servizio. Come funziona?

 
Alexey Viktorov:

Se non sei un principiante, devi sapere che l'EA funziona solo con un grafico. Senza un grafico funziona solo il servizio. Come funziona?

Lei è totalmente incompetente in questa materia, purtroppo. Le soluzioni di lavoro offerte qui sono la vera sottigliezza del lavoro e la comprensione di come funziona realmente.

 
fxsaber:

Lei è totalmente incompetente in questa materia, purtroppo. Le soluzioni di lavoro suggerite qui sono la vera sottigliezza del lavoro e della comprensione di come funzionano realmente le cose.

Beh, sì. C'è solo una persona competente qui.

 

Come opzione.

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