Problemas con mi Trailing Stop

 

Hola a todos!


Tengo este Trailing Stop que me está dando muchos problemas porque hace muchas modificaciones innecesarias, me pueden ayudar a corregirlo por favor?


void ClassicTrailingStop()
     {
      for(int i=0;i<=OrdersTotal();i++)
        {
         int a2=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderType()==0 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
           {
            if(Bid-OrderOpenPrice()>SL*point && OrderStopLoss()<Bid-SL*point)
              {
               bool mb=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-SL*point,Bid+TP*point,0,clrNONE);
              }
           }
         if(OrderType()==1 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
           {
            if(OrderOpenPrice()-Ask>SL*point && (OrderStopLoss()>Ask+SL*point || OrderStopLoss()==0))
              {
               bool ms=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+SL*point,Ask-TP*point,0,clrNONE);
              }
           }
        }
     }

SL = StopLoss

TP = TakeProfit


Lo que quiero es que me mueva el SL y TP hacia arriba si la orden es de compra, pero no hacia abajo.  Viceversa si es orden de venta.

 
Angel Antonio Martinez Velasquez:

Hola a todos!


Tengo este Trailing Stop que me está dando muchos problemas porque hace muchas modificaciones innecesarias, me pueden ayudar a corregirlo por favor?


SL = StopLoss

TP = TakeProfit


Lo que quiero es que me mueva el SL y TP hacia arriba si la orden es de compra, pero no hacia abajo.  Viceversa si es orden de venta.

Listo, lo arreglé colocando un Trailing Step y eliminando "|| OrderStopLoss()==0".


Por si a alguien le sirve. 

 

Ahora tengo otro problema a resolver:


void ClassicTrailingStop()
     {
      for(int i=0; i<OrdersTotal(); i++)
       {
        int a1     = OrderSelect(i,SELECT_BY_POS,MODE_TRADES),
            type   = OrderType(),
            ticket = OrderTicket();
      
        double jump   = MathMax(TStep,0.1)*point,
               slbuy  = NormalizeDouble(Ask-(ATR*SL*0.01),Digits),
               tpbuy  = NormalizeDouble(Ask+(ATR*TP*0.5*0.01),Digits),
               slsell = NormalizeDouble(Bid+(ATR*SL*0.01),Digits),
               tpsell = NormalizeDouble(Bid-(ATR*TP*0.5*0.01),Digits),
               oop    = OrderOpenPrice(),
               osl    = OrderStopLoss();
      
        if( type==0 && ticket==OrderTicket() )
          {
           if (Bid>oop && osl+jump<slbuy)
              {
               bool mb=OrderModify(ticket,oop,slbuy,tpbuy,0,clrNONE);
              }
          }
        
        if( type==1 && ticket==OrderTicket() )
          {
           if (Ask<oop && osl-jump>slsell)
              {
               bool ms=OrderModify(ticket,oop,slsell,tpsell,0,clrNONE);
              }
          }
        if ( OrdersTotal()>1 )
           {
            bool r = OrderModify(ticket,oop,0,0,0,clrNONE);
           }
       }
     }

Le añadí algunas cositas al código y todo iba muy bien hasta que le coloqué las últimas 2 líneas:

if ( OrdersTotal()>1 )
           {
            bool r = OrderModify(ticket,oop,0,0,0,clrNONE);
           }

y me da el "error 1".


Hace lo que necesito pero me da urticaria que genere ese error, me pueden ayudar por favor?

 
Angel Antonio Martinez Velasquez:

Ahora tengo otro problema a resolver:


Le añadí algunas cositas al código y todo iba muy bien hasta que le coloqué las últimas 2 líneas:

y me da el "error 1".



Debes seleccionar la orden con "OrderSelect" antes de modificarla.
Espero te oriente un poco

Saludos!!!

 
Miguel Antonio Rojas Martinez:

Debes seleccionar la orden con "OrderSelect" antes de modificarla.
Espero te oriente un poco

Saludos!!!

Muchas gracias