Aide : Pourquoi l'EA ne ferme pas une transaction - page 3

 
crossy:


Ici, si Orderselect est FAUX, comment l'EA peut revenir à la ligne de code : for(int cnt=OrdersTotal() ; cnt > 0 ; cnt-- )

? ??

Vous pouvez passer à la valeur suivante dans la boucle en utilisant continue. . ou sortir de la boucle avec break. . . cliquez sur les liens pour obtenir de la documentation sur chacun d'eux.
 
crossy:

Ici, si Orderselect est FALSE, comment l'EA peut revenir à la ligne de code : for(int cnt=OrdersTotal() ; cnt > 0 ; cnt-- )


? ??

Ce code est erroné....

cnt doit commencer à OrdersTotal() - 1 et décrémenter jusqu'à cnt >= 0 ... ... la première entrée est 0 et non 1

C'est pourquoi j'ai demandé à voir le code. . . et vous en avez montré assez pour identifier le problème . . . probablement. ;-)

 
RaptorUK:

Ce code est erroné...

cnt doit commencer à OrdersTotal() - 1 et décrémenter jusqu'à cnt >= 0 ... ...la première entrée est 0 et non 1

C'est pourquoi j'ai demandé à voir le code. . . et vous en avez montré assez pour identifier le problème . . . probablement. ;-)


Très juste. Merci, Wizeman !
 
crossy:

Très correct. Merci, Wizeman !


Et une autre idée :

Si j'ai plusieurs conditions, vous pouvez écrire :

If( X>b && B>S && NB<F......)

{

BBB= 5 ;

}f.e.

Ici, l'EA doit calculer chaque condition à l'intérieur de la parenthèse.

Mais, si vous recherchez l'efficacité (4 000 lignes de code...), je préfère avoir :

Si ( X>b )

{

while (B>S)

{

Tandis que (NB<F..)

{

BBB=5 ;

}

break ;

}

pause ;

}

Les 2 variantes sont-elles les mêmes ?

Y.

 

crossy, lorsque vous écrivez le code, veuillez utiliser le bouton SRC, il sera beaucoup plus lisible.

Ainsi, il sera affiché comme ceci

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

Il y a des explications sur les boucles "if, while et for" dans mql4 https://book.mql4.com/operators/assign

Pour le deuxième code, c'est OK puisque vous utilisez break, mais c'est un long chemin juste pour obtenir BBB = 5, je préfère le premier code, il utilise moins de ressources.

 
crossy:


Et une autre idée :

Si j'ai plusieurs conditions, vous pouvez écrire :

If( X>b && B>S && NB<F......)

{

BBB= 5 ;

}f.e.

Ici, l'EA doit calculer chaque condition à l'intérieur de la parenthèse.

Mais, si vous recherchez l'efficacité (4 000 lignes de code...), je préfère l'avoir :

En utilisant while comme ça, vous pouvez vous retrouver dans une boucle infinie...
 
Merci à vous deux !
 
onewithzachy:

Utilisez le bouton SRC pour afficher votre code pour une meilleure lecture, s'il vous plaît :)

Votre OrderSelect() est codé d'une manière incorrecte. Comparez votre code avec celui-ci. Puis écrivez si vous avez toujours le problème ou pas :)


Merci à onewithzachy,

Je ne savais pas que le ORDERSELECT ne pouvait pas attraper, donc vous pouvez avoir des erreurs inconnues.

Mon code qui était de 4016 lignes de code est devenu presque 4500 lignes - mais sans erreurs.

Merci à tous, chers amis.

Y.

 

Bonjour mes amis,

Après une longue journée ici, j'ai eu un bon avancement avec mon EA, mais j'ai un autre problème, comme suit :

J'ai la ligne de code suivante :

CLOSE_Single_P(Pair1, "LONG",OrderT,OrderL) ;

comme :

Pair1 est le symbole,

"LONG" est le signe d'une transaction longue,

OrderT est le numéro de ticket de l'ordre,

OrderL est la taille du lot de l'ordre.

La fonction est la suivante :

void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
double PRC ;
bool Check = false ;
for ( int cntt=0 ; cntt<20000 ; cntt++ )
{
if ( Check )
{
Check_Ini() ;
return ;
}
for ( int vvv = OrdersTotal()-1 ; vvv >= 0 ; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
Check = false ;
si ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID) ;
else
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK) ;

Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow) ;
if ( Check )
break ;
} }
}
}
return ;
}

Mon PROBLÈME est le suivant : L'EA ferme parfois très bien la transaction, mais parfois l'EA ferme la tarde MAIS il continue à chercher le ticket pour la fermer, bien qu'elle ait déjà été fermée.

(J'obtiens l'erreur : "Numéro de ticket inconnu..." .

Je pense que j'ai une erreur de logique.

Merci pour votre aide.

Y

 

S'il vous plaît...


Raison: