Arraste e solte SL e TP no testador. - página 14

 
Ainda decidi adicionar SL e TP arrastando para a terceira variante. Ou seja, após o algoritmo 3 opções definidas SL e TP, podemos arrastá-las onde for necessário. Esta é, em minha opinião, a melhor opção (universal). No vazio OnTick() deve haver uma linha: if(PriceModify<Point()) {OnSL=0;OnTP=0;}
void ModifySlTp2(double priceModify=0)
 {
  double sl=0,tp=0;
  
  for(int i=0; i<OrdersTotal(); i++) 
     { 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
        { 
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
           {
            if(MathAbs(OrderOpenPrice()-priceModify)<10*Point())  {OnOrd=true;}    
            if(MathAbs(OrderStopLoss()-priceModify)<10*Point())   {OnSL=true;}
            if(MathAbs(OrderTakeProfit()-priceModify)<10*Point()) {OnTP=true;}
            if(OnOrd || OnSL || OnTP) {TicketModifyOrder=OrderTicket();}
            if(OnOrd) {OnOrd=false; return;}
           }
        }  
     }  
   if(TicketModifyOrder>0)
     {
      if(OrderSelect(TicketModifyOrder, SELECT_BY_TICKET))
        {
         bool typOrdBuy = OrderType()==OP_BUY  || OrderType()==OP_BUYSTOP  || OrderType()==OP_BUYLIMIT;
         bool typOrdSell= OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT;
         if(!OnOrd && !OnSL && !OnTP)
           {
            if(typOrdBuy)
              {
               sl = NormalizeDouble(priceModify,Digits);
               tp = NormalizeDouble(OrderOpenPrice()+Ktp*(OrderOpenPrice()-sl),Digits);
              }
            if(typOrdSell)
              {
               sl = NormalizeDouble(priceModify,Digits);
               tp = NormalizeDouble(OrderOpenPrice()-Ktp*(sl-OrderOpenPrice()),Digits);
              }
            }    
            if(OnSL) {sl=NormalizeDouble(priceModify,Digits);tp=OrderTakeProfit();}
            if(OnTP) {tp=NormalizeDouble(priceModify,Digits);sl=OrderStopLoss();}
                                                             
            ModifyOrder1(-1, sl, tp, 0); 
            if(OnSL || OnTP) {TicketModifyOrder=0;} 
        }           
     }  
 }
 

Eu testei uma estratégia no testador hoje. A prática mostrou que é mais conveniente arrastar sl e tp se você fizer um ajuste nas 2 constantes.

Aqui está:

...

if(MathAbs(OrderOpenPrice()-priceModify)<10*Point())  {OnOrd=true;}    
if(MathAbs(OrderStopLoss()-priceModify)<30*Point())   {OnSL=true;}
if(MathAbs(OrderTakeProfit()-priceModify)<30*Point()) {OnTP=true;}
if(OnOrd || OnSL || OnTP) {TicketModifyOrder=OrderTicket();}
if(OnOrd) {OnOrd=false; return;}

...



 
Obrigado por sua ajuda. Isso é útil. Estava procurando como abrir pedidos no testador. Isto é feito através de variáveis globais. Mas é inconveniente que o indicador tenha que ser colocado em um gráfico.