Fermeture des demi-lots. - page 7

 
  if(OrderSelect(OrdersTotal(),SELECT_BY_TICKET,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1 && OrderType()==OP_BUY){ // Even though I am calling "OP_BUY" here, it doesn't seem to work?
         
         }
         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;
            }
            
           double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );
           {
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
           }
            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                
               Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2))
                  {
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }

         } 
   }
     
Je sais que c'est un peu négligé ! J'ai beaucoup joué avec elle - alors remettez-la rapidement à l'endroit d'où nous parlions ? Je suppose que tu voulais dire toute cette partie, non ?
 
   if (direction==0){ //--Buy--//
      
      double bsl=buy_stop_price;
      double btp=buy_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_bsl/pips))/10;
      
      if(OpenOrdersThisPair(Symbol())==0){
         int BuyTicketOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // This puts out the initial order.
      }
      
         if(OrderStopLoss()<iMA(NULL,0,MA_Period,0,1,0,0)-MA_PadAmount*pips){// This triggers the For loop if the pending order needs adjusting relative to where the MA is.
         
               for(int b=OrdersTotal()-1; b >=0; b--) 
                  {
    
                     if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)==true){
                     Print(" Stop loss value for the order is ", OrderStopLoss());
                     }
    
                     else if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)==false){
                     Print(" OrderSelect failed error code is ",GetLastError());
                     }
                     if(OrderMagicNumber()==MagicNumber)
                        if(OrderSymbol()==Symbol())
                           if(OrderType()==OP_BUYSTOP)
                              if(OrderStopLoss()<iMA(NULL,0,MA_Period,0,1,0,0)-MA_PadAmount*pips)
                                if(OpenOrdersThisPair(Symbol())==1) 
                                 DeleteOrder = OrderDelete(OrderTicket());
                                    if(DeleteOrder!=TRUE)Print("DeleteOrder Last Error = ", GetLastError());
                                  
                                 if(OpenOrdersThisPair(Symbol())==0) 
                                  NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // New Pending order with calibrated stops, lots and targets.
                                   if(NewBuyOrder!=TRUE)Print("New Buy Order Last Error = ", GetLastError());  // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...?   

                  }
                 } 
             
               if(NewBuyOrder == true){
               Print("New Buy Order Placed #", NewBuyOrder);
               }
               else{
               Print("New Buy Order Send Failed, error # ", GetLastError());   
               }
               }
C'est la section d'achat - il y a juste un "OP_BUYSTOP".
 
DomGilberto:
Je sais que c'est un peu brouillon ! J'ai joué avec des tas de choses - alors remettez-le rapidement à l'endroit d'où nous parlions ? Je suppose que tu voulais dire toute cette partie, non ?

Erm ... vous devez prendre du recul, respirer profondément et lire votre code attentivement, fonction par fonction, ligne par ligne ... demandez-vous "qu'est-ce que j'essaie de faire ici ?" et vérifiez ensuite si votre code va le faire ... par exemple :

  if(OrderSelect(OrdersTotal(), SELECT_BY_TICKET,   MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1 && OrderType()==OP_BUY)

         { // Even though I am calling "OP_BUY" here, it doesn't seem to work?
         
         }

Ce test if exécute un commentaire s'il est vrai ? ? ? ? ? en ignorant cela pour un moment . ... comment OrdersTotal() peut-il être un numéro de ticket ? SELECT_BY_TICKET n'est même pas une position valide si vous utilisez SELECT_BY_POS.


Je ne pense pas que ce code soit à l'origine de votre problème... même s'il présente quelques problèmes.

 

Oui - bon point, bien que cela ne fasse pas de différence matérielle pour être honnête.

Hmmm....

 
DomGilberto:

Oui - bon point, bien que cela ne fasse pas de différence matérielle pour être honnête.

Hmmm....

Non, ça n'en fait pas...

RaptorUK:


Je ne pense pas que ce code soit à l'origine de votre problème... même s'il présente quelques problèmes.

Je ne pense pas que tu montres le code qui crée le problème...

 
DomGilberto:
C'est la section d'achat - il y a juste un "OP_BUYSTOP".

Ce...

if(OpenOrdersThisPair(Symbol())==0) 
   NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // New Pending order with calibrated stops, lots and targets.

if(NewBuyOrder!=TRUE)Print("New Buy Order Last Error = ", GetLastError());  // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...? 

. . . c'est un problème d'accolades {}. . .

if(OpenOrdersThisPair(Symbol())==0) 
   {
   NewBuyOrder = OrderSend(Symbol(),OP_BUYSTOP,LotSize,buyPrice,3,bsl,btp,NULL,MagicNumber,0,Green); // New Pending order with calibrated stops, lots and targets.

   if(NewBuyOrder != TRUE)Print("New Buy Order Last Error = ", GetLastError());  // This is giving me an "Error 0", despite the trade ACTUALLY being placed correctly...? 
   }

Contrôlez votre indentation et vous verrez rapidement ces problèmes.

 
Oui, encore une fois, j'ai parcouru et résolu quelques problèmes d'indentation... mais toujours les mêmes problèmes ? Quel autre code insinuez-vous que ça pourrait être ? Je ne peux pas imaginer que ça vienne d'une autre partie de mon code... ?
 
if(OrderSelect(OrdersTotal(),SELECT_BY_POS,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1) // If I put "OrderType() == OP_BUY" it won't work at all. This means that it could just grab a pending order - which is wrong.
  { 
         
         
         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()); 
           continue;
           }

           double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );
           {
           Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
           }
            
            if(OrderMagicNumber()==MagicNumber)
              if(OrderSymbol()==Symbol())
                
               Print("Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                
                if(OrderType()==OP_BUY && Bid >= FirstTarget_Buy +(Point / 2)) // Does not go further than this. I do not get an error from OrderClose?
                  {
                  Print("Bid >= FirstTarget_Buy - Current Bid: ", DoubleToStr(Bid, Digits), " FirstTarget_Buy: ", DoubleToStr(FirstTarget_Buy, Digits)  );
                  bool Close_Half_Order_Buy = OrderClose(OrderTicket(),half,Bid,3,CLR_NONE);
                  if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ", GetLastError());
                  }
                   
       } 
   }
Je suis coincé - j'ai essayé de changer et de modifier beaucoup de choses et maintenant il doit me manquer quelque chose dont je ne connais pas l'existence... ça doit être ça ? OrderType()==OP_BUY ne semble pas fonctionner ? Voir les notes dans le code ci-dessus - j'ai vérifié l' indentation... C'est épique ! haha...
 
DomGilberto:
Oui, encore une fois, j'ai parcouru et résolu quelques problèmes d'indentation... mais toujours les mêmes problèmes ? Quel autre code insinuez-vous que ça pourrait être ? Je ne peux pas imaginer que ça vienne d'une autre partie de mon code... ?
LOL, je ne sais pas, je n'ai pas tout vu ... mais quelque chose empêche le code qui fait l'impression de s'exécuter lorsque vous avez un OP_BUY.
 
2013.08.02 10:52:47	2013.02.01 15:00  trendfishing_play_ground EURUSD,H1: NEW BUY ORDER:-  Lots to open: 0.18215 Entry Price: 1.36790 Buy Stop Loss: 1.35649 Buy Take Profit: 1.39072 Magic Number is: 1234.00000

Cela s'imprime dans le journal pendant ma boucle for, où, dans le cas d'un ordre d'achat stop en attente, si la 60 EMA est > à la perte de l'ordre stop, il fermera l'ordre en attente, en ouvrira un nouveau avec un nouveau SL (qui est derrière la 60EMA), ajustera le take profit pour recevoir la récompense 1:2, et changera les lots relatifs à l'arrêt en points et mon profil de risque (disons 2%).

Donc, lorsque tout cela est fait, la variable personnalisée "Current Lots" qui est "LotSize" dans OrderSend fonctionne, mais elle envoie une taille de lot qui n'est pas correcte pour que le serveur reçoive "0.18215" ? Cela pourrait-il être un problème, bien que les ordres soient envoyés de toute façon - cette question est plus en rapport avec "cela pourrait-il être la raison pour laquelle je ne peux pas appeler "OrderType==OP_BUY" ?

C'est un long processus lol...