Fermeture des demi-lots. - page 4

 
DomGilberto:
Je ne peux pas croire que je fais ces erreurs de débutant... Ça m'énerve ! Oui, j'ai réussi à imprimer maintenant et à sélectionner la commande. C'est le code qui fonctionne en termes d'impression - les lots ne sont toujours pas fermés cependant ? J'ai également collé les messages du journal ci-dessous.

2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: Order Select returned the error of 0 // Not sure what is going on here?

if(OrderSelect(c,SELECT_BY_TICKET,MODE_TRADES)==true)

c est une POSITION, pas un numéro de ticket....

 

(facepalm - j'ai manifestement besoin d'une pause !) ok, c'est réglé et la commande est maintenant sélectionnée. Voici l'impression du journal maintenant - "Close_Half_Order" error = 0 ? C'est la fonction OrderClose qui échoue. Cela n'a rien à voir avec le nombre de "000" après la deuxième décimale de la partie "lots à fermer", n'est-ce pas ?

2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Close_Half_Order Last Error = 0
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Lots Open = 0.18
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: Order Ticker Number = 9
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
2013.07.31 11:28:49     2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931
 
DomGilberto:

(facepalm - j'ai manifestement besoin d'une pause !) ok, c'est réglé et la commande est maintenant sélectionnée. Voici l'impression du journal maintenant - "Close_Half_Order" error = 0 ? C'est la fonction OrderClose qui échoue. Cela n'a rien à voir avec le nombre de "000" après la deuxième décimale de la partie "lots à fermer", n'est-ce pas ?

Les accolades, les accolades, les accolades... ... parfois il faut les utiliser, parfois non.

Le OrderClose() n'a pas échoué. . .

            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)
                  if(OpenOrdersThisPair(Symbol())==1)   //  if this is true . . . 

                bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy,3,CLR_NONE); // . . .  do this.

            if(Close_Half_Order!=TRUE)Print("Close_Half_Order Last Error = ", GetLastError());  //  do this whatever happens . . .

Donc si le OrderType() n'est pas un OP_BUY, la dernière ligne sera quand même exécutée, d'où l'erreur 0... ajoutez des accolades comme ceci :

            if(OrderMagicNumber() == MagicNumber)
              if(OrderSymbol() == Symbol())
                if(OrderType() == OP_BUY)
                  if(OpenOrdersThisPair(Symbol()) == 1) 
                     {
                     bool Close_Half_Order = OrderClose(OrderTicket(), half, FirstTarget_Buy, 3, CLR_NONE);
                     if(Close_Half_Order != TRUE) Print("Close_Half_Order Last Error = ", GetLastError() );  // only executed if the OrderClose() was also executed
                     } 
 
Une mise en retrait cohérente vous aide également à voir clairement ce qui se passe.
 
Hmmm, il ne veut toujours pas fermer @ "Close_Half_Order" ? Je ne reçois pas non plus de message d'erreur ?
 
DomGilberto:
Hmmm, il ne veut toujours pas fermer @ "Close_Half_Order" ? Je ne reçois pas non plus de message d'erreur.
Quel est votre type de commande?
 
OP_BUY ?

  if(OrderSelect(OrdersTotal(),SELECT_BY_TICKET,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1){
         
         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
         }
         
         double minLot  = MarketInfo(Symbol(), MODE_MINLOT);{
                Print("The minimum lots are: ", DoubleToStr( minLot, Digits ));
                }
                        
         double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);{
                Print("The Lotstep is: ", DoubleToStr( lotStep, Digits ));
                }
                
         double half    = MathCeil(OrderLots()/2/lotStep)*lotStep;{
                Print("The Lots to close is: ", DoubleToStr( half, Digits ));
                }
      for( int c=OrdersTotal()-1; c >=0; c-- )
      {
         if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true){
            Print("Order Ticker Number = ",OrderTicket());
            Print("Order Lots Open = ", OrderLots());
            } 
         else{
           Print("Order Select returned the error of ", GetLastError()); // Order Select does not seem to want to work?
            continue;
            }
            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)
                  if(OpenOrdersThisPair(Symbol())==1){ 
                bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy,3,CLR_NONE);
                if(Close_Half_Order!=TRUE)Print("Close_Half_Order Last Error = ", GetLastError());
                }
      } 
   }
 
DomGilberto:
OP_BUY ?


Vous avez parlé précédemment des ordres en attente, avez-vous réellement un OP_BUY ouvert lors du test ? ou avez-vous un ordre en attente ouvert ?
 

D'ailleurs, ces accolades ne servent à rien d'autre qu'à brouiller les pistes...

         double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );  {  
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
         }  
         
         double minLot  = MarketInfo(Symbol(), MODE_MINLOT);  {  
                Print("The minimum lots are: ", DoubleToStr( minLot, Digits ));
                }  
                        
         double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);  {  
                Print("The Lotstep is: ", DoubleToStr( lotStep, Digits ));
                }  
                
         double half    = MathCeil(OrderLots()/2/lotStep)*lotStep;  {  
                Print("The Lots to close is: ", DoubleToStr( half, Digits ));
                }  
 

J'ai placé un ordre en attente "OP_BUYSTOP" mais j'avais l'impression qu'il se transformerait en "OP_BUY" lorsqu'il serait déclenché ?

Je pensais que le type d'ordre serait "OP_BUY" s'il avait été déclenché ?

Après tout, je ne suis intéressé qu'UNE FOIS que l'ordre a été déclenché ?

Pourquoi ces accolades sont-elles déroutantes ? Voulez-vous dire en termes d'emplacement de la parenthèse gauche ? Si c'est le cas, il semble que ce soit une question individuelle, car j'ai été corrigé à plusieurs reprises à ce sujet ?