Questions des débutants MQL4 MT4 MetaTrader 4 - page 230

 
Aleksey Mavrin:

et quoi, il y a toujours plus de profit après 10 secondes ?)

Pas toujours bien sûr, mais il arrive souvent que le prix s'envole en une minute et que l'EA se ferme brutalement à un prix fixe.
 
Nargiz Ravanova:

J'ai fait comme vous l'avez dit, mais pour une raison quelconque après la fermeture de l'Expert Advisor ouvre des trades plusieurs fois, malgré le fait qu'après la fonction CloseAll() j'ai un glissement pendant une heure.

datetime sleep = TimeCurrent();
if(sleep > TimeCurrent())
     return;
//---
double op = CalculateProfit();

if(op >= Profit && LastTime == 0)
     LastTime = TimeCurrent();
if(LastTime > 0 && TimeCurrent() - LastTime >= Second)

    {
     CloseAll();
     LastTime = 0;

     SendNotification("Trade is end");
     sleep = TimeCurrent()+60*60;
    }

C'est comme ça. Bien sûr, c'était juste écrit sur mon genou.

 
Konstantin Nikitin:

Quelque chose comme ça. Bien sûr, il a été écrit sur le vif.

Merci, maintenant l'EA ne ferme qu'une seule transaction parmi toutes celles du marché, et j'ai une grille EA.

Je n'ai pas eu de slips et EA ouvre à nouveau une nouvelle transaction et ignore les slips. Si je regarde l'EA, je ne pense pas qu'il soit possible d'en ouvrir un autre, mais je dois le rendre tel qu'il était avant. Je ne sais pas quoi faire avec cette EA et je ne pourrai rien faire d'autre.

 
Nargiz Ravanova:

Merci, maintenant l'EA ne ferme qu'une seule transaction parmi toutes celles du marché, et j'ai une grille EA.

J'ai beaucoup de problèmes avec ça, mais je ne sais pas trop quoi en faire, alors je ne sais pas trop quoi faire. Je pense qu'il n'est pas possible de l'implémenter, je vais juste le rendre tel qu'il était avant. Je tiens à les remercier pour leur aide.

Vous devez le mettre en œuvre dans son ensemble
les raisons peuvent être différentes

 
Nargiz Ravanova:

Merci, maintenant l'EA ne ferme qu'une seule transaction parmi toutes celles du marché, et j'ai une grille EA.

Cela me pose beaucoup de problèmes, mais je ne sais pas trop quoi en faire. Je pense qu'il n'est pas possible de l'implémenter, je vais juste le rendre tel qu'il était avant. Je l'ai déjà mis en œuvre et il n'a pas encore été mis en œuvre, donc je vais juste le remettre comme il était avant.

Ça devrait avoir plus de sens, non ?

input double Profit   = 100.0;
input int    Second   = 10;
//+------------------------------------------------------------------+
void CloseAllSleep(void)
    {
     static datetime sleep_all = TimeCurrent();
     static datetime LastTime = 0;
     if(sleep_all > TimeCurrent())
          return;
//---
     if(LastTime == 0)
         {
          if(CalculateProfit() < Profit)
               return;
          LastTime = TimeCurrent();
         }
     if(TimeCurrent() - LastTime >= Second)
          return;
//---
     if(!CloseAll())
          return;
     LastTime = 0;

     SendNotification("Trade is end");
     sleep_all = TimeCurrent()+60*60;
    }

//--- Считаем профит открытых позиций
double CalculateProfit(void)
    {
     return 0.0;
    }
//--- Закрываем все позиции
bool CloseAll(void)
    {
     return true;
    }

Encore une fois, il s'agit d'un simple souci de clarté. Et ce que vous devez mettre en œuvre et comment, pensez-y vous-même.

 
Nargiz Ravanova:
Bien sûr, pas toujours, mais il arrive souvent que le prix s'envole pendant une minute et que le conseiller expert ferme brutalement à un prix fixe.

Pourtant, je pense que cette approche est sous-optimale. Si le prix s'envole, il devrait y avoir un slippage positif. Si vous attendez le moment venu - c'est un jeu de roulette - alors à quoi sert la stratégie, votre bénéfice peut déjà être inférieur aux 2 livres données.

Il est plus raisonnable de mesurer la vitesse de changement de prix, et si elle est élevée vers le profit - attendre, quand elle est descendue - pour couvrir.

 
Konstantin Nikitin:

Je pense que c'est plus logique, non ?

Encore une fois, il s'agit d'une simple question de compréhension. C'est à vous de déterminer ce qu'il faut mettre en œuvre et comment le faire.

Je ne comprends pas pour être honnête, oublie ça, je vais trouver quelque chose.

 
Aleksey Mavrin:

Pourtant, je pense que cette approche est sous-optimale. Si le prix s'envole, il devrait y avoir un slippage positif. Si vous attendez le moment venu - c'est un jeu de roulette - alors à quoi sert la stratégie, votre bénéfice peut déjà être inférieur aux 2 livres données.

Il est plus raisonnable de mesurer la vitesse de changement de prix, et si elle est élevée vers le profit - attendre, quand elle est descendue - pour couvrir.

on ne peut pas réparer une simple erreur ici et tu parles de vitesse))))
 
Nargiz Ravanova:
nous ne pouvons pas réparer une simple erreur ici et vous parlez de vitesse))))

Si vous vous fixez des objectifs élevés, le Tout-Puissant vous aidera à les atteindre ! ;)

 
Nargiz Ravanova:
nous ne pouvons pas réparer une simple erreur ici et vous parlez de vitesse))))

Eh bien, pour être plus précis, on dirait que vous ne pouvez pas. Et à propos du SOMMEIL. Voulez-vous geler l'ensemble du conseiller expert pendant un certain temps ? Ou simplement une certaine fonction, après qu'elle ait été élaborée. Dans tous les cas, même pour l'interruption du travail de l'Expert Advisor, il est préférable d'utiliser le drapeau pour les longs délais, et lors de la vérification, s'il n'y a pas de permission, il suffit de sortir à OnTick/OnTimer. Pour les délais courts, oui, vous pouvez utiliserSLEEP.
Au fait,SLEEP ne fonctionne pas dans les indicateurs.

La fonction Sleep() ne peut pas être appelée par des indicateurs personnalisés, car les indicateurs sont exécutés dans le thread de l'interface et ne doivent pas le ralentir.

Comprenez donc l'utilisation des drapeaux, vous en aurez besoin à l'avenir.