Помогите с Трейлинг-стопом

 
Ни как не могу правельно написать инициализацию трейлинг-стопа, чтоб начинал модифицироввать ордера только после перехода в безубыток...
 
Вы попали на хороший форум и поиском в codebase вы обрятете все
 

Посмотрите кто чем может... плиз.. что не так

double SL;
if(OrderSelect(ticket1, SELECT_BY_TICKET)==true)
         {
            SL=Bid-Point*TrailingStop1;
            if(OrderOpenPrice()< SL)
              { 
                if (!OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0,0)) 
                       Print("Error ", GetLastError(), ": Start()->OrderModify() [trailing stop]");
               else 
                     {
                       Print("Trailing stop on #", OrderTicket()," [place stop loss at ",
                               SL, "]");
                      TrailingStop1=TrailingStop1+10;
                     }
              }
            return(0);
          } 
 

посмотри вот этот, для тестера он должен подойти (не для реала)

extern bool Trall = true;
extern int FilterTrall = 15;

int flagTrallBuy = 0, flagTrallSell = 0;

void Trall()
{
if(Trall == true)
     {
     if(CollPoz(OP_BUY, MN) == 0)//если произошло закрытие по стоплоссу(выбило резким скачком)
          {
          TicketBuy = 0;
          flagTrallBuy = 0;
          }
     if(CollPoz(OP_SELL, MN) == 0)//если произошло закрытие по стоплоссу(выбило резким скачком)
          {
          TicketSell = 0;
          flagTrallSell = 0;
          }
     if(TicketBuy > 0)//тралим БАЙ
          {
          if(OrderSelect(TicketBuy, SELECT_BY_TICKET, MODE_TRADES) == true)
               {
               double trallCellBuy = Bid - Point * FilterTrall;
               if(flagTrallBuy == 0)
                    {
                    if(trallCellBuy >/* OrderStopLoss()*/OrderOpenPrice())
                         {
                         flagTrallBuy = 1;
                         PriceTrallBuy = trallCellBuy;
                         }
                    }
               if(flagTrallBuy == 1)
                    {
                    if(Bid <= PriceTrallBuy)
                         CloseOrder(TicketBuy);
                    if(trallCellBuy > PriceTrallBuy)
                         PriceTrallBuy = trallCellBuy;  
                    }     
               }
          }
     if(TicketSell > 0)//тралим СЕЛЛ
          {
          if(OrderSelect(TicketSell, SELECT_BY_TICKET, MODE_TRADES) == true)
               {
               double trallCellSell = Ask + Point * FilterTrall;
               if(flagTrallSell == 0)
                    {
                    if(trallCellSell < OrderStopLoss()/*OrderOpenPrice()*/)
                         {
                         flagTrallSell = 1;
                         PriceTrallSell = trallCellSell;
                         }
                    }
               if(flagTrallSell == 1)
                    {
                    if(Ask >= PriceTrallSell)
                         CloseOrder(TicketSell);
                    if(trallCellSell < PriceTrallSell)
                         PriceTrallSell = trallCellSell;
                    }    
               }
          } 
     }
}
//+----------------------------------------------------------------------+
 
indexf:
Ни как не могу правельно написать инициализацию трейлинг-стопа, чтоб начинал модифицироввать ордера только после перехода в безубыток...

Выбирайте (изучайте код) на вкус!

Библиотека тралов (включая тралы с уровня безубытка) от Ю.Дзюбан.

Подключаете к себе в советник, как обычную функцию и всё. Всё работает.

Файлы:
 
indexf:
Ни как не могу правельно написать инициализацию трейлинг-стопа, чтоб начинал модифицироввать ордера только после перехода в безубыток...
If OrderStoploss()>OrderOpenPrice() для покупок. Для продж <
Причина обращения: