Trailing Stops y Trailing Profit - página 5

 
Arav007:


TP de la 3ª operación= 108.536 [He puesto este TP a tal distancia que funcionará como si no hubiera TP].

Ahora, de acuerdo a mi requerimiento, cuando el precio sea digamos 7 pip [103.603] de ganancia, el Stop Loss de

1ra y 2da operación se convertirán en 1 pip de ganancia [103.543] y el Stop Loss de la 3ra operación se mantendrá en 103.386.

Como en la siguiente imagen:

La primera orden de GBPUSD se cerró con 10 pips de ganancia.

La segunda orden sigue funcionando y su SL se movió.

Para la 3ª operación el SL se movió también, lo cual no quiero.

BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,0, "Buy Order",MagicNumber, 0,Blue);//tp 0
 
deVries:


Gracias. Esta es otra manera y buena manera de hecho para establecer No TP.

¿Pero qué pasa con el SL? ¿Cómo puedo hacerlo sin la forma de la entrada de la orden variable?

Saludos

 
if(OrdersTotal()>0){
 

for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
        
        if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber){
                
        
                sl     = OrderStopLoss(); // Stop Loss. 
                tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
                
                if(OrderType()==OP_BUY){

if (OrdersTotal()==3){

if (cnt==1){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}    // end of  if (OrdersTotal()==3)

else{    // Looking for 2nd option                           

if (OrdersTotal()==2){                           // 10 pips TP trade can be closed already

if(cnt== 0){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}  // End of  if (OrdersTotal()==2)

}  // End of  else

 

¿Qué opina de esto? ¿Está bien para la parte de Stop Loss?

 
Arav007:

¿Qué opina de esto? ¿Esto está bien para la parte de Stop Loss?


no, está mal

pero lo que no me gusta más es cómo tengo que leer

¡¡¡¡es ilegible codificación lo que tienes aquí cambiar su estilo de escribir su código !!!!

las líneas vacías no son necesarias esto es lo mismo que lo tuyo

¿puedes hacerlo así?

if(OrdersTotal()>0)
   {
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
     if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber)
        {
        sl     = OrderStopLoss(); // Stop Loss. 
        tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
        if(OrderType()==OP_BUY)
           {
           if (OrdersTotal()==3) 
              {
              if (cnt==1)
                 {
                 Fixed Stop Loss     
                 }
               else{
                   Trailing Stop Loss
                   }
              }    // end of  if (OrdersTotal()==3)
           else{    // Looking for 2nd option                           
               if (OrdersTotal()==2)
                 {                           // 10 pips TP trade can be closed already
                 if(cnt== 0)
                   {
                   Fixed Stop Loss
                   }
                   else{
                       Trailing Stop Loss
                       }
                 }  // End of  if (OrdersTotal()==2)
   }  // End of  else

no hay líneas vacías

es fácil ver dónde empieza '{' y para qué parte del código está dentro de dónde termina '}

puede ocurrir que tengas más de 20 operaciones abiertas que no puedes usar dentro del bucle if (OrdersTotal()==

o if(cnt==

por qué haces este bucle de órdenes

haces este orderloop para recorrer todas tus operaciones una por una

Lo que tienes que codificar es un BreakEven

qué hace el Fixed Stop Loss????

 
deVries:


no, está mal

pero lo que más me disgusta es cómo tengo que leer

¡¡¡¡es una codificación ilegible lo que tienes aquí cambia tu estilo escribiendo tu código !!!!

las líneas vacías no son necesarias esto es lo mismo que lo tuyo

¿puedes hacerlo así?

no hay líneas vacías

es fácil ver dónde empieza '{' y para qué parte del código está dentro de dónde termina '}

puede ocurrir que tengas más de 20 operaciones abiertas que no puedes usar dentro del bucle if (OrdersTotal()==

o if(cnt==

por qué haces este bucle de órdenes

haces este orderloop para recorrer todas tus operaciones una por una

Lo que tienes que codificar es un BreakEven

qué hace el Stop Loss fijo ????


Lo siento, en realidad me siento más cómodo con las líneas vacías. De todos modos, voy a seguir mientras que la publicación de códigos aquí.

Pensaba que 'OrdersTotal()' traería las órdenes 'Sólo' del par al que está unido el EA.

Pero probablemente se recuperan todas las órdenes y luego distinguimos las órdenes del par relacionado con otras órdenes

utilizando esta línea:

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

¿Correcto?

Por Stop Loss fijo me refiero a que el Stop Loss 'inicial' no se moverá.

Saludos

 
deVries:


¡¡¡¡cambia tu estilo escribiendo tu código !!!!

Las líneas vacías no son necesarias


Es una cuestión de opinión, pero generalmente se considera una buena práctica utilizar líneas vacías (en los lugares lógicos) cuando se codifica. En cualquier caso, no es algo que merezca la pena señalar en el código de otros de esta manera.

Si se mira el código fuente de Apache o del Kernel de Linux (dos proyectos abiertos de gran colaboración) se verán muchas líneas en blanco.


SERVIDOR WEB APACHE:

AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
                                                   void *struct_ptr,
                                                   const char *arg)
{
    int offset = (int)(long)cmd->info;

    *(const char **)((char *)struct_ptr + offset) = arg;

    return NULL;
}

KERNEL DE LINUX:


static int jz4740_musb_init(struct musb *musb)
{
 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 if (!musb->xceiv) {
 pr_err("HS UDC: no transceiver configured\n");
 return -ENODEV;
 }

 /* Silicon does not implement ConfigData register.
 * Set dyn_fifo to avoid reading EP config from hardware.
 */
 musb->dyn_fifo = true;

 musb->isr = jz4740_musb_interrupt;

 return 0;
} 
 
Arav007:


a veces una línea vacía puede ser comfartable pero no si lo haces después de cada línea escrita

también el lugar de las llaves hace que sea más fácil leer el código


de MACD para usarlo como ejemplo

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return;
                    }
                 }
              }
           }
        }
     }

ahora ves como comparar el precio del gráfico de divisas con el precio de la orden de tu operación

tienes que hacer algo así también...

 
ydrol:

Es una cuestión de opinión, pero generalmente se considera una buena práctica utilizar líneas vacías (en los lugares lógicos) cuando se codifica. En cualquier caso, no es algo que merezca la pena señalar en el código de otros de esta manera.

Si se mira el código fuente de Apache o del Kernel de Linux (dos proyectos abiertos de gran colaboración) se verán muchas líneas en blanco.


SERVIDOR WEB APACHE:

KERNEL DE LINUX:

la cuestión es que con cada línea escrita una línea vac ía

se hace difícil leer los códigos grandes que usted mantiene el desplazamiento hacia arriba / abajo para leer el código

y cuando además no hay una lógica de colocación de { } entonces se hace aún más difícil encontrar bugs

 
deVries:


de MACD para usarlo como ejemplo

ahora ves como comparar el gráfico de precios de la divisa con el precio de la orden de tu operación

tienes que hacer algo así también...


Tengo esta función de comparación de precios.

¿Cómo puedo comparar el 'Comentario' de la orden seleccionada de OrderSend() como el Número Mágico de la orden seleccionada?

Como si quisiera verificar si OrderComment() coincide con el comentario de la orden seleccionada?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Ahora puedo comparar así:

OrderComment()=="Orden de venta" // ?

También puedo definir el comentario de la función OrderSend() así:

string comment_sell="Orden de venta";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

Y luego comparar :

if (OrderComment()=="comment_sell") // ?

Saludos

 
Arav007:


Tengo esa función de comparación de precios.

¿Cómo puedo comparar el 'Comentario' de la orden seleccionada de OrderSend() como el Número Mágico de la orden seleccionada?

Como si quisiera verificar si OrderComment() coincide con el comentario de la orden seleccionada?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Ahora puedo comparar así:

OrderComment()=="Orden de venta" // ?

También puedo definir el comentario de la función OrderSend() así:

string comment_sell="Orden de venta";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

Y luego comparar :

if (OrderComment()=="comment_sell") // ?

Saludos


OrderComment puede ser sobrescrito por su corredor

que está queriendo... Ahora, según mi requisito, cuando el precio sería digamos 7 pip [103.603] en beneficio, el Stop Loss de

1er y 2do comercio se convertirá en digamos 1 pip de ganancia [103.543] y el Stop Loss del 3er comercio se mantendrá en 103.386.

make extern int BreakEven = 7

         if(OrderType()==OP_BUY)
           {

            //--- check for BreakEven
            if(BreakEven>0)
              {
               if(Bid-OrderOpenPrice()>Point(*10)*BreakEven)
                 {
                  if(OrderStopLoss()<OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point(*10),OrderTakeProfit(),0,Green);
                    }
                 }
              }
           }

(* 10 ) corrección en el broker de 5 dígitos para obtener el valor del pip

Razón de la queja: