Aide pour ajouter MaxTradesPerBar à l'EA - page 2

 
serpentsnoir:

megamixx,

Si vous êtes toujours là, je peux vous suggérer quelques modifications de code qui feront ce que vous recherchez. Faites-moi savoir si vous êtes toujours intéressé.

Puis recompilez pour vous assurer que c'est sans erreur. Faites-moi savoir quand vous l'aurez et je collerai la prochaine modification.

Je l'ai eu et compilé avec succès, merci sn.
 
megamixx:

Je l'ai eu et compilé avec succès grâce à Sn.


ok, bien.

Ensuite, il y a un bloc de code comme celui-ci

int openPositions()
{
//... blah...
}

copier le bloc entier, le coller juste après et le renommer en OpenTradesOnThisCandle

Ensuite, recompilez pour vous assurer qu'il n'y a pas d'erreur.

Je pars au travail maintenant, donc vous n'aurez pas de nouvelles de moi avant plus tard. Postez les changements si vous êtes bloqué.

 

J'ai copié ce bloc et l'ai renommé, maintenant il ressemble à ceci :

int OpenTradesOnThisCandle( )
{ int op =0 ;
for(int i=OrdersTotal()-1;i>=0;i--) // analyse tous les ordres et positions...
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
if (OrderMagicNumber() != MagicNumber) continue ;
if ( OrderSymbol()==Symbol() )
{
if ( OrderType() == OP_BUY ) op++ ;
if ( OrderType() == OP_SELL ) op++ ;
}
}
return(op) ;
}

J'espère que je l'ai bien fait. J'ai compilé et je n'ai pas eu d'erreur mais un avertissement :

Lafonction "OpenTradesOnThisCandle" n'est pas référencée et sera supprimée du fichier exp
0 erreur(s), 1 avertissement(s)

 

Bien. Le message n'est qu'un avertissement et disparaîtra bientôt.

Maintenant, changez la ligne où vous voyez MODE_TRADES pour MODE_HISTORY dans la nouvelle sous-routine que vous avez créée.

Maintenant, remplacez les deux instructions if par OrderType() par ceci

if (OrderOpenTime() > Time[0]) op++;

Lorsque vous aurez obtenu ce résultat (et vous obtiendrez le même avertissement), compilez-le pour vous assurer qu'il ne contient aucune erreur.

 
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
  1. Que sont les valeurs de retour des fonctions ? Comment les utiliser ? - MQL4 forum
  2. S'il y a des appels au serveur dans la boucle Vous devez compter à rebours ET vérifier les codes de retour Boucles et fermeture ou suppression des commandes - MQL4 forum
 

Voici à quoi ressemble le bloc maintenant :

int OpenTradesOnThisCandle( )
{ int op =0 ;
for(int i=OrdersTotal()-1;i>=0;i--) // analyse tous les ordres et positions...
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ;
if (OrderMagicNumber() != MagicNumber) continue ;
si ( OrderSymbol()==Symbol() )
{
si (OrderOpenTime() > Time[0]) op++ ;
si (OrderOpenTime() > Time[0]) op++ ;
}
}
return(op) ;
}

Compilé, 0 erreur, 1 avertissement

 

Salut megamix,

Je ne lis pas le fil de discussion depuis le début, mais ...

1. Utilisez le bouton SRC lorsque vous postez du code

2. Le retour de OrderSelect() est soit vrai soit faux, donc c'est la façon correcte d'écrire OrderSelect(),

int OpenTradesOnThisCandle( )
  { 
  int op =0;
  for(int i = OrdersTotal() - 1;i >= 0; i-- ) // scan all orders and positions...
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true   // if order select is true ...
        && OrderMagicNumber() != MagicNumber                  // ... and magic number is our magic number ...
        && OrderSymbol()      == Symbol() )                   // ... and symbol is chart symbol
        { 
        if (OrderOpenTime() > Time[0]) op++;             
        if (OrderOpenTime() > Time[0]) op++; 
        }
    } 
    return(op);
  }

:D

 
onewithzachy:

Salut megamix,

Je ne lis pas le fil de discussion depuis le début, mais...

1. Utilisez le bouton SRC lorsque vous postez du code

2. Le retour de OrderSelect() est soit vrai soit faux, donc c'est la façon correcte d'écrire OrderSelect(),

:D


Merci pour le conseil sur l'affichage du code. C'est logique. Pour ce qui est du point 2, je m'en remets à Sn, car il me guide à travers les étapes et je ne veux pas perturber son processus. Merci beaucoup !

 
megamixx:


Merci pour le conseil sur l'affichage du code. C'est logique. Pour ce qui est du point 2, je m'en remets à Sn, car il me guide à travers les étapes et je ne veux pas perturber son processus. Merci beaucoup !


Nous allons rester simples pour l'instant. onewithzacky a raison, vérifier les codes de retour est une bonne habitude.

if (OrderOpenTime() > Time[0]) op++ ; <<== ceci ne doit être là qu'une fois. Donc enlevez-en un.

La prochaine chose à faire est de trouver ce code et de le dupliquer juste en dessous.

     if(TradesInThisSymbol > 0) 
     {
      return(0);
     }

Puis changez

(TradesInThisSymbol > 0)

en

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Puis compilez - l'erreur devrait disparaître.

 
serpentsnoir:


Nous allons rester simples pour le moment. onewithzacky a raison, vérifier les codes de retour est une bonne habitude.

if (OrderOpenTime() > Time[0]) op++ ; <<== ceci ne doit être là qu'une fois. Alors enlevez-en un.

La prochaine chose à faire est de trouver ce code et de le dupliquer juste en dessous.

Puis changez

(TradesInThisSymbol > 0)

en

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Puis compilez - l'erreur devrait disparaître.


C'est fait.

Suppression du doublon if (OrderOpenTime() > Time[0]) op++ ;

et trouvé et modifié

(TradesInThisSymbol > 0)

en

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Merci beaucoup pour votre aide précieuse à ce sujet.