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

 
crossy:

O.K. Voici la version modifiée, qui m'a valu la même erreur.

Y.

Vous n'avez pas besoin de la fonction... Débarrassez-vous-en.

 

Recommençons la partie 2 :(

 ...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         // Do the selection and OrderClose() INSIDE HERE ..., please
         
         
         /*
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
         */
      }   
      //if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... ) // this selection goes up there
    
         //CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
/*
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;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow); // close it up there, and you have to rewrite the parameters
   }
   */
 

Faites ceci... ( répété à partir d'ici : https://www.mql5.com/en/forum/139543 )

if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
   {
   Print("Trying to close Order: ", OrderTicket());                             // <---- tells you that the   if  returned true
   if ( ! OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)
      Print("OrderClose failed, error # ", GetLastError());                          // <------- reports the error if the OrderClose failed . . 
   } 

... et vous n'aurez plus besoin de la Fonction du tout.

 
onewithzachy:

Recommençons la partie 2 :(


Je voudrais votre exuss, s'il vous plaît, car j'ai un jour férié, donc je serai de retour dimanche soir.

Je vais faire ce que vous avez suggéré, et j'espère réussir.

Merci à vous deux.

Y.

 
crossy:


Je veux votre accord, s'il vous plaît, car j'ai un jour férié, donc je serai de retour dimanche soir.


OK, profitez de vos vacances :-)
 
crossy:


Je veux votre exuss, s'il vous plaît, puisque j'ai un jour férié, donc je serai de retour le dimanche soir.

Je vais faire ce que vous avez suggéré, et j'espère réussir.

Je vous remercie tous les deux.

Y.

Passez un bon moment :D

Moi j'ai F1 Monaco à regarder ce dimanche :D

 
onewithzachy:

Passez un bon moment :D

Moi j'ai F1 Monaco à regarder ce dimanche :D

Et demain, FP3 et Qualifications ;-)
 
crossy:


Merci onewithzachy,

D'abord je pense que vous avez une petite erreur avec :

for(int cnt = OrdersTotal() -1 ; cnt >= 0 ; cnt--)

Vous devez ajouter la correction en vert et en gras.

Mais, je ne comprends pas comment la ligne suivante peut nous aider ?

#include "..\libraries\stdlib.mq4"

Merci, Y.

Je trouve cela beaucoup plus simple, et cela fonctionne pour moi :

//---------------------------------------------+

void CheckForClose()
{
int i, res, order_id ;

//-------+
for(i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continuer ;
order_id= OrderTicket() ;


//--suite et fermeture
if (OrderType() == OP_BUY)
{
if (Is_Close_Buy==true) //-- le signal pour clôturer
{
RefreshRates();// Rafraîchir les taux
res= 0 ;
res= OrderClose(order_id,Lots,Bid,3,Gold) ;
while(IsTradeAllowed() == false) Sleep(100) ; //--attendre un peu pour obtenir la réponse du serveur
if (res>0){
PlaySound("cash_register.wav");} //--son joyeux, on espère gagner de l'argent ! !!!
si (res<0)
{
PlaySound("creak.wav") ;
Print("OrderSend failed with error #",GetLastError()) ;
return(0) ;
}
return ;
}
}//end close Buy Order check
//---
si (OrderType() == OP_SELL)
{
if (Is_Close_Sell==true) //--le signal de clôture
{
RefreshRates();// Rafraîchit les taux
res= 0 ;
res= OrderClose(order_id,Lots,Ask,3,Gold) ;
while(IsTradeAllowed() == false) Sleep(100) ; //--attendre un peu pour obtenir la réponse du serveur
if (res>0){
PlaySound("cash_register.wav");}
si(res<0)
{
PlaySound("creak.wav") ;
Print("OrderSend failed with error #",GetLastError()) ;
return(0) ;
}
return ;
}
}//end close Sell Order check
}//--------+
retour ;
}

//----------------------------------------------+

 
RaptorUK:
Et demain, FP3 et Qualification ;-)

RaptorUK, j'envisage de porter un casque de protection pour pouvoir penser plus loin que je ne le fais actuellement. N'est-ce pas ce que font ces conducteurs, penser à l'avance ? :D


Skaboy, je vous demande poliment, si cela ne vous dérange pas, d'utiliser le bouton SRC pour poster votre code. Nous avons demandé cela trop de fois dans ce seul fil.


@ crossy, il y a presque une semaine depuis ton premier message. Je comprends certainement que vous n'ayez pas l'esprit clair maintenant face à 4000 lignes, en ce moment j'ai moi-même la mienne ici aussi. Si vous ne comprenez toujours pas, - ehm - vous pouvez nous demander d'écrire ce code Close pour vous. Cependant, vous devez encore écrire le code, même juste un peu - et nous montrer :D, le code de RaptorUK juste au-dessus est plus direct que le mien, pensez-y et ensuite vous pourrez avancer avec votre EA.

Avec la façon dont vous écrivez le code ici - trop de code répété inutile - vous devriez avoir un peu d'inquiétude avec vos 4000 lignes de code qui peuvent ralentir votre EA et lui faire manquer un tick. Il n'y a pas de mal à manquer un ou deux points, mais que se passe-t-il si vous manquez 10 points ? et probablement que vos 4000 lignes peuvent encore être réduites à seulement 400 lignes. Qui sait ? votre EA deviendra plus léger et plus rapide :D

 
skaboy:

Je trouve cela beaucoup plus simple, et cela fonctionne pour moi :


Cela ne fonctionne pas si vous avez plusieurs commandes à fermer... lisez ceci et apprenez : Boucles et fermeture ou suppression d'ordres
Raison: