Cierre de medios lotes.

 

Así que me las arreglé para incorporar un bucle que borra la orden pendiente y vuelve a aplicar otra en base a que el stop se sincroniza con la media móvil. Los lotes se calcularían en base a la distancia en pips de la entrada al stop. No sólo esto, sino que he conseguido que el objetivo de beneficios funcione con la distancia del stop como un ratio (extern int - algo que elijo 1-2-3 R;R etc.) - así que esto también se mueve.

¡Así que gracias por los comentarios en los mensajes anteriores con respecto a la impresión de mi código y otros bits y bobs!


De todos modos - Estoy tratando de cerrar la mitad de la posición cuando el precio alcanza el 50% de mi objetivo de beneficio de la relación 2x ... Sé que tengo que imprimir las cosas en el Diario y estoy escribiendo que en este momento, pero ¿podría alguien decirme si estoy escribiendo esto mal en cualquier caso? ¿Tal vez con respecto a "OrderLots()/2"?

"btp" = devuelve un precio específico.

         if(Bid == btp-OrderOpenPrice()/2+OrderOpenPrice()){
         
         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)
               
               CloseHalfLong = OrderClose(OrderTicket(),OrderLots()/2,Bid,3,CLR_NONE);
         
            if(CloseHalfLong!=TRUE)Print("LastError = ", GetLastError());
         }
         }
 
DomGilberto:

Así que me las arreglé para incorporar un bucle que borra la orden pendiente y vuelve a aplicar otra en base a que el stop se sincroniza con la media móvil. Los lotes se calcularían en base a la distancia en pips de la entrada al stop. No sólo esto, sino que he conseguido que el objetivo de beneficios funcione con la distancia del stop como un ratio (extern int - algo que elijo 1-2-3 R;R etc.) - así que esto también se mueve.

¡Así que gracias por los comentarios en los puestos anteriores con respecto a la impresión de mi código y otros bits y bobs!


De todos modos - Estoy tratando de cerrar la mitad de la posición cuando el precio alcanza el 50% de mi objetivo de beneficio 2x ratio ... Sé que tengo que imprimir las cosas en el Diario y estoy escribiendo que en este momento, pero ¿podría alguien decirme si estoy escribiendo esto mal en cualquier caso? ¿Tal vez con respecto a "OrderLots()/2"?

"btp" = devuelve un precio específico.

No creo que OrderLots()/2 sea suficiente (perdón por el juego de palabras) en todas las situaciones, estoy bastante seguro de que necesitas validar el tamaño de la posición que estás buscando cerrar contra MarketInfo() MODE_LOTSTEP y MODE_MINLOT

Mira aquí: https://www.mql5.com/en/forum/143966

 
RaptorUK: No creo que OrderLots()/2 sea suficiente (perdón por el juego de palabras) en todas las situaciones, estoy bastante seguro de que necesitas validar el tamaño de la posición que estás buscando cerrar contra MarketInfo() MODE_LOTSTEP y MODE_MINLOT
Exactamente. Ver mi CloseOrder()
 

Gracias RaptorUK - No estoy seguro de dónde estoy buscando WHRoeder en su enlace, pero gracias.

Es sólo yo, o es el proceso para el cierre de lotes en una posición abierta un poco contra la intuición ... parece innecesariamente complicado, teniendo en cuenta lo que es que estoy queriendo hacer ...

Hombre, creo que he mirado este código suficiente para un día - No estoy entendiendo cómo uso MarkerInfo() con OrderClose... parece innecesariamente complejo.

 
DomGilberto:

Gracias RaptorUK - No estoy seguro de dónde estoy buscando WHRoeder en su enlace, pero gracias.

Es sólo yo, o es el proceso para el cierre de lotes en una posición abierta un poco contra la intuición ... parece innecesariamente complicado, teniendo en cuenta lo que es que estoy queriendo hacer ...

Hombre, creo que he mirado este código suficiente para un día - No estoy entendiendo cómo uso MarkerInfo() con OrderClose... parece innecesariamente complejo.

Si el tamaño de la posición de su Orden es de 0.3 lotes y quiere cerrar la mitad, eso sería 0.15 lotes, si el MODE_LOTSTEP de su Broker es 0.1 entonces 0.15 es un tamaño de lote inválido... así que antes de usar el OrderClose() valide el tamaño de la posición que va a cerrar.
 
¡Ah, lo tengo! ¡Gracias RaptorUK! Última pregunta, cuando dices validar el tamaño del lote, ¿estás diciendo que lo compare usando sentencias If?
 
DomGilberto: No estoy seguro de dónde estoy buscando WHRoeder en su enlace, pero gracias.
El enlace más alto de esa página
 
¡Ah, ya lo tengo! Esa es una codificación épica... :o!

Espero poder mantener ese nivel de programación algún día... (con un poco más de paciencia por tu parte - es broma :P)


¡Gracias WHRoeder!
 
DomGilberto:
¡Ah ya lo tengo! ¡Gracias RaptorUK! Última pregunta, cuando dices validar el tamaño del lote, ¿dices compararlo usando sentencias If?

Nop, lo que digo es que lo ajustes para que cumpla con MODE_LOTSTEP y MODE_MINLOT ... entonces es válido ( validado ), si te fijas en el enlace que puse....

mlots = MathFloor(mlots / lotstep) * lotstep; 

Supongamos que mlots era 0.15 mlots (MODE_MINLOT) era 0.1 y lotstep (MODE_LOTSTEP) es 0.1 entonces el código haría lo siguiente

mlots = MathFloor(0.15 / 0.1) * 0.1; 
//  MathFloor(0.15 / 0.1) ==  MathFloor( 1.5 )  gives 1

//  mlots = 1 * 0.1;  

por lo que mlots se ajustaría de 0,15 a 0,1 y sería válido.

 
Ah, ¡has dado en el clavo! Gracias por aclararlo, ya lo tengo.