Caractéristiques du langage mql5, subtilités et techniques - page 178

 
Andrey Barinov:

Là où ExpertRemove ne fonctionne pas - il y a aussi ChartClose(). Je ne comprends pas quel est le problème. Que se passe-t-il après la modification du compte ? Affiche-t-il le graphique supplémentaire avec le conseiller expert ? Ou bien seul le symbole actuel du graphique change ? Peut-être, le ChartID a changé, et c'est pourquoi votre solution précédente ne fonctionne pas. Les ticks sont gérés de toute façon, cela signifie que nous devons les décharger dans OnTick, si OnInit ne fonctionne pas.

Disons que vous avez répondu à toutes ces questions, alors quoi ? Si vous voulez approfondir le sujet, vous ne pouvez pas le faire sans l'essayer sur votre machine.

J'ai trouvé cette solution qui fonctionne.

#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 Requis pour un conseiller de combat.

 
fxsaber:

Veuillez montrer ici le code source de l'EA qui se décharge lorsque le compte est modifié.

Le code source sera disponible ultérieurement. Vérifiez d'abord si cette fonctionnalité vous convient.

 
Alexey Viktorov:

Le code source sera disponible ultérieurement. Vérifiez d'abord s'il s'agit de caractéristiques spéciales pour vous.

C'est en cours. Ça ne marche pas.

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

Apparemment, c'est déjà une tendance d'utiliser des mots russes dans le journal.

 
fxsaber:

Il est en place et fonctionne. Ça ne marche pas.

Apparemment, c'est déjà une tendance d'utiliser des mots russes dans les journaux.

Ce ne sont pas des journaux. Je ne voulais pas vous offenser. J'écris ça pour moi, quand quelque chose ne fonctionne pas. Et puis j'ai oublié de le supprimer.

Si ce n'est pas ce que vous attendiez, alors veuillez m'excuser. Vous vouliez supprimer l'EA du graphique lorsque vous avez changé de compte, l'EA le fait. Je ne veux pas savoir pourquoi ça ne marche pas pour toi.
 
Alexey Viktorov:

Ce ne sont pas des journaux. Je ne voulais pas vous offenser. C'est moi qui écris pour moi-même quand quelque chose ne marche pas. Et puis j'ai oublié de le supprimer.

Si vous trouvez une solution viable autre que celle que j'ai suggérée, ce sera intéressant à voir.

 
Alexey Viktorov:

Vous vouliez supprimer l'EA du graphique lorsque vous avez changé de compte, l'EA le fait.

Malheureusement, ce n'est pas le cas.



En général, appeler ExpertRemove avec REASON_ACCOUNT est une chose complètement dénuée de sens.

 
fxsaber:

Malheureusement, ce n'est pas le cas.



En général, appeler ExpertRemove avec REASON_ACCOUNT est une chose absolument dénuée de sens.

Si vous n'êtes pas un débutant, vous devez savoir que le conseiller expert ne fonctionne qu'avec un graphique. Sans carte, seul le service fonctionne. Comment cela fonctionne-t-il ?

 
Alexey Viktorov:

Si vous n'êtes pas un débutant, vous devez savoir que l'EA ne fonctionne qu'avec un graphique. Sans carte, seul le service fonctionne. Comment cela fonctionne-t-il ?

Vous êtes totalement incompétent en la matière, malheureusement. Les solutions de travail proposées ici constituent la véritable subtilité du travail et permettent de comprendre comment il fonctionne réellement.

 
fxsaber:

Vous êtes totalement incompétent en la matière, malheureusement. Les solutions de travail proposées ici sont la véritable subtilité du travail et de la compréhension du fonctionnement réel des choses.

Eh bien, oui. Il n'y a qu'une seule personne compétente ici.

 

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