Cierre de medios lotes. - página 12

 
DomGilberto:
Ah sí - ¡lo tengo! Creo que ya sé cómo hacerlo, ahora vuelvo a jugar :)
 
int start()
   {
   if(IsNewCandle())
      {
      CheckForMaTrade();
      if(UseCandleTrail)AdjustTrail();
      }

   if(OpenOrdersThisPair(Symbol())>0)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
      }
   }
¿Funcionaría? ¿Comprobaría cada tick a partir de ahí? (CloseHalfOrder() )

ACTUALIZACIÓN DE ABAJO - sí funciona :)
 

Lo siento - debería dejar de hacer 101 preguntas antes de probar las cosas :P

Si - eso funciona. ¡Ahora tengo que trabajar donde por lo que se cierra tan pronto como la garrapata viene en y la oferta es > = el precio OrderClose especificado :D

Niza gran paso en la dirección correcta! Ahora a ponerle una pinza para que no se cierre constantemente a medias cada vez que el precio vuelve a pasar por ese mismo precio especificado en la función OrderClose :)

(Me deshice de ese molesto error OrderModify 1 también!) Hmmm, no puedo pensar en la lógica correcta para que luego ESPERE después de que el primer objetivo (1:1) ha hecho su orden de cierre ... ¿Alguna idea? El número de OrderTicket() es el mismo... así que no puede ser así? Estoy atascado en esa parte ahora :) después de tener este trozo, se ha descifrado más o menos :)

¡Hombre estoy muy agradecido por tu ayuda!

 
DomGilberto:


Tío, ¡estoy tan agradecido por tu ayuda!

De nada, no tengo ningún problema en ayudar a las personas que escuchan y están contentas de intentar ayudarse a sí mismas primero
 
increíble 1 2 3 4 5 6 7 8 9 10 11 12

lo que es un gran tema

Cerrando medias parcelas.

espero que puedas explicar a otra persona como hacer el momento que tu sabes

101 preguntas... quien quiere leerlas todas...

Para (¡se deshizo de ese molesto error de OrderModify 1 también!)

esto ocurre la mayoría de las veces si intentas modificar la operación con la configuración que ya tiene

 

¡Hombre es tan gratificante una vez que lo descubres también! ¡Obviamente, gracias a su entrada también!

La última parte en la que estoy atascado es decirle al bucle que deje de reducir a la mitad la orden abierta en ese precio de salida de OrderClose(), continuamente? Sinceramente no puedo entender la lógica? Está en el punto con CUÁNDO y QUÉ precio para cerrar parcialmente en. Sólo tengo que decirle que se detenga una vez que haya reducido la orden a la mitad una vez?

El problema es que una vez que el OrderClose() ha cerrado la mitad de la posición abierta, seguirá siendo llamado una y otra vez porque el "int start" está llamando a "CloseHalfOrder()" cada vez que hay una "OP_BUY" abierta... ¿Alguna idea?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...


//+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   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=MathFloor(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())
            if(OrderLots()>minLot)
            {
            Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
            int HalfCloseTicket = OrderTicket();
            
            if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as 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(HalfCloseTicket,half,Bid,3,CLR_NONE);
               if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
               if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
               }
            }
         if(Close_Half_Order_Buy==True)
         {
         MoveToBreakEven(); // This is a void.
         EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
         }    
     }
}
 
deVries:
increíble 1 2 3 4 5 6 7 8 9 10 11 12

lo que es un gran tema

Cerrando medias parcelas.

espero que puedas explicar a otra persona como hacer el momento que tu sabes

101 preguntas... quien quiere leerlas todas...

Para (¡se deshizo de ese molesto error de OrderModify 1 también!)

esto sucede la mayoría de las veces si intentas modificar la operación con la configuración que ya tiene


¡Amigo estaré más que feliz de escribir un hilo explicando una manera simple y efectiva de cerrar parcialmente una orden abierta - estoy atascado con sólo un último pedazo, y luego está trabajando menta! Voy a cotejar todo en un tema concisa / hilo para que otros puedan utilizar? (no estoy seguro de cómo voy a hacer esto?)

Ver el último post de arriba - Casi lo he hecho, sólo que no puedo averiguar la lógica para decirle al bucle que DEJE de cerrar las mitades en el mismo precio de salida OrderClose() continuamente?

Gracias por el consejo con respecto a OrderModify error 1 también :)
 
DomGilberto:

¡Amigo, estaré más que feliz de escribir un hilo explicando una manera simple y efectiva de cerrar parcialmente una orden abierta - estoy atascado con sólo un último pedazo, y luego está trabajando menta! Voy a cotejar todo en un tema concisa / hilo para que otros puedan utilizar? (no estoy seguro de cómo voy a hacer esto?)

Ver el último post de arriba - Casi lo he hecho, sólo que no puedo averiguar la lógica para decirle al bucle que DEJE de cerrar las mitades en el mismo precio de salida OrderClose() continuamente?

Gracias por el consejo con respecto a OrderModify error 1 también :)

¿Por qué no mover primero su entrada a breakeven esto se le dice antes y luego cerrar una parte del comercio .... si OrderLots() >= .......
 
deVries:

Por qué no mover primero su entrada a breakeven esto se le dice antes y luego cerrar una parte del comercio .... si OrderLots() >= .......

¿Por esto? No importa si me muevo a break even primero... El primer obstáculo es esta parte que no puedo entender? Incluso si me muevo a break even primero, y luego cierro la mitad, esto llamará a CUALQUIER posición abierta de nuevo y OrderClose() al mismo precio de nuevo llamando "CloseHalfOrder();"?

int start()
   {
    
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
      
   }
 
DomGilberto:

¿Por esto? No importa si me muevo para llegar al punto de equilibrio primero... El primer obstáculo es esta parte que no puedo entender? ¿Incluso si me muevo a break even primero, y luego cierro la mitad, esto llamará a CUALQUIER posición abierta de nuevo y a OrderClose() al mismo precio de nuevo llamando a "CloseHalfOrder();"?


Solo te mueves a BE y cierras la mitad si el SL no está ya en BE
Razón de la queja: