Cierre de medios lotes. - página 2

 

Tengo que leer sobre MathFloor y su enlace allí - todo esto es nuevo para mí y estoy luchando para entenderlo. Lo abordaré mañana.

Gracias, chicos.

 
         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());
         }
         } 
¿Podría alguien orientarme un poco sobre qué es lo que estoy haciendo mal? Acabo de empezar a echar un vistazo a esto. Aparte de la línea donde he escrito una nota, ¿podría alguien indicarme la dirección correcta?
 
¿Alguna idea?
 
DomGilberto:
¿Alguna idea?
¿Quiere cerrar la mitad de OrderLots() ? pero ¿cómo puede utilizar OrderLots() antes de haber seleccionado una Orden?
 
Whoops - sí ordenado que lol. ¿Pero eso no ha cambiado nada?

¿Me he perdido algo?
 
DomGilberto:
Whoops - yea sorted that lol. ¿Pero eso no ha cambiado nada?

¿Me estoy perdiendo algo?

¿Por qué hace lo siguiente aunque su OrderSelect() haya fallado?

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

No cierras una orden pendiente, ¿qué te dice el informe de errores?

 

Creo que está intentando seleccionar el mismo comercio dos veces

¿no debería ser simplemente "otra"?

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

puede recibir mensajes contradictorios si la primera vez que intenta seleccionar la operación, falla, pero tiene éxito la segunda vez.

 
No estoy recibiendo ningún error...

Me estoy frustrando un poco con esto... Sigo recibiendo "OrderModify error 1" - pero voy a mirar en eso más tarde. Apartede eso, nada!
            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());
         
         } 
Tenía la impresión de que MathFloor sólo redondea la respuesta a un número entero? Así que no estoy seguro de si MathFloor es correcto? Los brokers que estoy usando utilizan 0.01 como paso de lote... (IBFX para empezar con la prueba de avance - por lo que el tamaño nano)
 
DomGilberto:
No estoy recibiendo ningún error...

Me estoy frustrando un poco con esto... Sigo recibiendo "OrderModify error 1" - pero voy a mirar en eso más tarde. Aparte de eso, nada. Tenía la impresión de que MathFloor sólo redondea la respuesta a un número entero. Así que no estoy seguro de si MathFloor es correcto? Los corredores que estoy utilizando utilizarán 0,01 como un paso de lote ... (IBFX para empezar con la prueba de avance - por lo que el tamaño nano)

Te he dado un código que funcionará, ¿por qué no lo usas? ¿por qué no imprimes tus variables para ver qué está pasando? no tienes una OrderModify() en el código que has publicado, ¿cómo es relevante? como ya he dicho... ¿por qué estás llamando a funciones de trading que dependen de OrderSelect() si la OrderSelect() ha fallado?

Deje de codificar, mire su código, léalo línea por línea, entienda lo que realmente está haciendo y si no es lo que pretendía entonces tiene un problema que necesita arreglar.

 

¿Redondea MathFloor los decimales hacia abajo al número ENTERO más cercano?

¿Tiene sentido FirstTarget como parámetro personalizado dentro de "OrderClose()" - Asumiendo que "sizeClose" era correcto? (ver código citado)

Su código no ayudó - lo siento.

¿Se pueden imprimir variables personalizadas? Si es así, debo estar haciéndolo mal ya que no aparece en el diario.

OrderModify no es relevante, tienes razón.

           double FirstTarget = OrderTakeProfit()-OrderOpenPrice()/2+OrderOpenPrice();
              CloseHalfLong = OrderClose(OrderTicket(),sizeClose,FirstTarget,3,CLR_NONE);
Razón de la queja: