Fermeture des demi-lots. - page 2

 

Il faut que je me documente sur MathFloor et sur votre lien - tout cela est nouveau pour moi et j'ai du mal à le comprendre. Je m'y attaquerai demain.

Merci à tous !

 
         if(Bid == btp-OrderOpenPrice()/2+OrderOpenPrice()){ // need to double check this.
               
               
         double  minLot  = MarketInfo(Symbol(), MODE_MINLOT),
                 lotStep = MarketInfo(Symbol(), MODE_LOTSTEP),
                 Lots    = OrderLots(),
                 half_close = MathFloor(Lots/2/lotStep)*lotStep;
                 
                    
               
         for(int q=OrdersTotal()-1; q >=0; q--)
         {
            if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               if (half_close > minLot)

                
               CloseHalfLong = OrderClose(OrderTicket(),half_close,Bid,3,CLR_NONE);
               if(CloseHalfLong!=TRUE)Print("LastError = ", GetLastError());
         }
         } 
Quelqu'un pourrait-il me donner quelques conseils sur ce que je fais de mal ? Je viens juste de commencer à y jeter un coup d'œil. À part la ligne où j'ai écrit une note, quelqu'un pourrait-il m'indiquer la bonne direction ?
 
Des idées ?
 
DomGilberto:
Des idées ?
Vous voulez fermer la moitié de OrderLots() ? mais comment pouvez-vous utiliser OrderLots() avant d'avoir sélectionné un ordre ?
 
Oups - oui, c'est réglé, lol. Mais ça n'a rien changé ?

Est-ce que j'ai raté quelque chose ?
 
DomGilberto:
Oups - oui, c'est réglé, lol. Mais cela n'a rien changé ?

Est-ce que quelque chose m'échappe ?

Pourquoi faites-vous ce qui suit même si votre OrderSelect() a échoué ?

if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               if (half_close > minLot)

Vous ne fermez pas un ordre en attente, que vous a dit votre rapport d'erreur ?

 

Je crois que vous essayez de sélectionner deux fois la même transaction.

Cela ne devrait-il pas être "autre" ?

else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){

Vous pouvez obtenir des messages contradictoires si la première fois que vous essayez de sélectionner la transaction, elle échoue, mais réussit la deuxième fois.

 
Je ne reçois aucune erreur...

Je suis un peu frustré par ce problème... Je continue à obtenir "OrderModify error 1" - mais je vais examiner cela plus tard. A part cela, rien !
            if(OrderSelect(NewOrder,SELECT_BY_TICKET,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(NewOrder,SELECT_BY_TICKET,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            
            double  minLot = MarketInfo(Symbol(), MODE_MINLOT),
            lotStep     = MarketInfo(Symbol(), MODE_LOTSTEP),
            sizeCurr    = OrderLots(),
            sizeClose   = MathFloor(sizeCurr/lotStep)*lotStep/2,
            sizeRem     = sizeCurr - sizeClose;
           //if (sizeClose < minLot)                                     return(false);
            //if (sizeRem   < minLot){ sizeClose = sizeCurr;
                 
           if(OrderTakeProfit()-OrderOpenPrice()/2+OrderOpenPrice() == Bid) // Does this make sense? I am wanting this "if" statement to be true, if price (bid) reaches the price in this comparison statement?

             if(OpenOrdersThisPair(Symbol())==1)
               
               CloseHalfLong = OrderClose(OrderTicket(),sizeClose,Bid,3,CLR_NONE);
                
                if(CloseHalfLong!=TRUE)Print("Last Error = ", GetLastError());
         
         } 
J'
avais l'impression que MathFloor arrondissait simplement la réponse au nombre entier ? Je ne suis donc pas sûr que MathFloor soit correct ? Les courtiers que j'utilise utilisent 0.01 comme pas de lot... (IBFX pour commencer sur le test avant - donc taille nano)
 
DomGilberto:
Je ne reçois pas d'erreur...

Je suis un peu frustré... Je continue à obtenir "OrderModify error 1" - mais je vais examiner cela plus tard. À part cela, rien ! J'avais l'impression que MathFloor arrondissait simplement la réponse au nombre entier ? Je ne suis donc pas sûr que MathFloor soit correct ? Les courtiers que j'utilise utilisent 0,01 comme pas de lot... (IBFX pour commencer sur le test avant - donc taille nano)

Je vous ai donné un code qui va fonctionner, pourquoi ne l'utilisez-vous pas ? pourquoi n'imprimez-vous pas vos variables pour voir ce qui se passe ? vous n'avez pas de OrderModify() dans le code que vous avez posté, en quoi est-ce pertinent ? comme je l'ai déjà dit ... pourquoi appelez-vous des fonctions de trading qui dépendent de OrderSelect() si le OrderSelect() a échoué ?

Arrêtez de coder, regardez votre code, lisez-le ligne par ligne, comprenez ce qu'il fait réellement et si ce n'est pas ce que vous vouliez, alors vous avez un problème à résoudre.

 

MathFloor arrondit-il les décimales au nombre entier le plus proche ?

Est-ce que FirstTarget a un sens en tant que paramètre personnalisé dans "OrderClose()" - en supposant que "sizeClose" était correct ? (voir le code cité)

Votre code ne m'a pas aidé - désolé.

Pouvez-vous imprimer des variables personnalisées ? Si c'est le cas, je dois m'y prendre mal car elles n'apparaissent pas dans le journal.

OrderModify n'est pas pertinent, vous avez raison.

           double FirstTarget = OrderTakeProfit()-OrderOpenPrice()/2+OrderOpenPrice();
              CloseHalfLong = OrderClose(OrderTicket(),sizeClose,FirstTarget,3,CLR_NONE);
Raison: