Chiusura di mezzi lotti. - pagina 2

 

Ho bisogno di leggere su MathFloor e il tuo link lì - questo è tutto nuovo per me e sto lottando per capirlo. Lo affronterò domani.

Grazie ragazzi!

 
         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());
         }
         } 
Qualcuno potrebbe darmi una piccola guida su dove sto sbagliando? Ho appena iniziato a dare un'occhiata ora. A parte la linea dove ho scritto una nota, qualcuno potrebbe indicarmi la direzione giusta?
 
Qualche idea?
 
DomGilberto:
Qualche idea?
Vuoi chiudere metà di OrderLots() ? ma come puoi usare OrderLots() prima di aver selezionato un ordine ?
 
Ops - sì, risolto il problema lol. Questo non ha cambiato nulla però?

Mi manca qualcosa?
 
DomGilberto:
Ops - sì, l'ho risolto lol. Questo non ha cambiato nulla però?

Mi manca qualcosa?

Perché stai facendo quanto segue anche se il tuo OrderSelect() è fallito?

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

Non chiudi un ordine in sospeso, cosa ti ha detto il tuo rapporto di errore?

 

Credo che stiate cercando di selezionare lo stesso trade due volte

non dovrebbe essere solo "altro"?

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

Potresti ricevere messaggi contrastanti se la prima volta che provi a selezionare la compravendita, fallisce, ma ha successo la seconda volta.

 
Non sto ricevendo alcun errore...

Sto diventando un po' frustrato... Continuo a ricevere "OrderModify error 1" - ma lo controllerò più tardi. A parte questo, niente!
            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());
         
         } 
Avevo l'impressione che MathFloor arrotondasse solo la risposta al numero intero? Quindi non sono sicuro che MathFloor sia corretto? I broker che sto usando useranno 0.01 come passo di lotto... (IBFX per iniziare con il test in avanti - quindi dimensione nano)
 
DomGilberto:
Non sto ricevendo alcun errore...

Sto diventando un po' frustrato da questo... Continuo a ricevere "OrderModify error 1" - ma lo controllerò più tardi. A parte questo, niente! Avevo l'impressione che MathFloor arrotondasse solo la risposta al numero intero? Quindi non sono sicuro che MathFloor sia corretto? I broker che sto usando useranno 0.01 come passo di lotto... (IBFX per iniziare il test in avanti - quindi dimensione nano)

Ti ho dato un codice che funzionerà, perché non lo stai usando? Perché non stai stampando le tue variabili per vedere cosa sta succedendo? Non hai un OrderModify() nel codice che hai postato, come è rilevante? Come ho già detto... perché stai chiamando funzioni di trading che si basano su OrderSelect() se OrderSelect() è fallito?

Smetti di codificare, guarda il tuo codice, leggilo riga per riga, capisci cosa sta effettivamente facendo e se non è quello che volevi allora hai un problema che devi risolvere.

 

MathFloor arrotonda i decimali al numero INTERO più vicino?

FirstTarget ha senso come parametro personalizzato all'interno di "OrderClose()" - Supponendo che "sizeClose" sia corretto? (vedere il codice citato)

Il tuo codice non mi ha aiutato - mi dispiace.

Si possono stampare variabili personalizzate? Se è così, devo averlo fatto male perché non viene visualizzato nel diario.

OrderModify non è rilevante, hai ragione.

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