Скачать MetaTrader 5

Помочь с создадинием двух независемых трейлинг стопов

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Планируешь заказать программу? Узнай, как получить желаемый результат
Kirill Andreev
827
Kirill Andreev 2016.11.10 16:10 

Идея такая, нужно сделать так.

Открылся один ордер его тралим допустим первым трейлинг стопом с его индивидуальными параметрами, и открылась еще одна такая же позиция и ее надо тралить трелингом но уже с другими параметрами трала.

Как осущиствить???

У меня в советнике обычный трал вот такой?

{
//---------------------------------
   double buy_last_price  = -1;
   double sell_last_price  = -1;

   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice();}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice();}
       }

       //TrailingStart//
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
   {
     if (Trailing>0 && (Bid-buy_last_price)>=StartTrailing*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing *Point,Digits), OrderTakeProfit(), 0, Blue);
     if (Trailing>0 && (sell_last_price-Ask)>=StartTrailing*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing *Point,Digits), OrderTakeProfit(), 0, Red);
     }  //TrailingEnd//
     }
Taras Slobodyanik
13061
Taras Slobodyanik 2016.11.10 16:47  

...потом появится мысль про отдельные стоплоссы и тейкпрофиты)

Нужно делать многосерийный советник. Во входных параметрах задается серия стопов, серия профитов, серия траллов...
При запуске создаются структуры для каждой серии и это всё раскладывается по структурам. Далее советник каждый тик перебирает Серию структур и каждую ведёт по своим параметрам.

То есть получается неограниченное число советников в одном... 

Artem Ashikhmin
1479
Artem Ashikhmin 2016.11.10 16:53  

Элементарно, пользуйтесь на здоровье))

extern int StartTrailing1 = 250;
extern int Trailing1 = 100;
extern int StartTrailing2 = 150;
extern int Trailing2 = 50;

{
//---------------------------------
   double buy_last_price  = -1;
   double sell_last_price = -1;
   double buy_orders      =  0;
   double sell_orders     =  0;

   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice(); buy_orders++;}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice(); sell_orders++;}
       }

       //TrailingStart//
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
   {
     if (buy_orders==1){ //если в рынке 1 ордер buy
     if (Trailing1>0 && (Bid-buy_last_price)>=StartTrailing1*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing1 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing1 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing1 *Point,Digits), OrderTakeProfit(), 0, Blue);
       }
     if (sell_orders==1){ //если в рынке 1 ордер sell
     if (Trailing1>0 && (sell_last_price-Ask)>=StartTrailing1*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing1 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing1 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing1 *Point,Digits), OrderTakeProfit(), 0, Red);
       }
//------------------------------------------------------------+
     if (buy_orders>=2){ //если в рынке 2 и больше ордера buy
     if (Trailing2>0 && (Bid-buy_last_price)>=StartTrailing2*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing2 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing2 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing2 *Point,Digits), OrderTakeProfit(), 0, Blue);
       }
     if (sell_orders>=2){ //если в рынке 2 и больше ордера sell
     if (Trailing2>0 && (sell_last_price-Ask)>=StartTrailing2*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing2 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing2 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing2 *Point,Digits), OrderTakeProfit(), 0, Red);
       }
     }  //TrailingEnd//
   }


 

Kirill Andreev
827
Kirill Andreev 2016.11.10 17:11  
Artem Ashikhmin:

Элементарно, пользуйтесь на здоровье))

extern int StartTrailing1 = 250;
extern int Trailing1 = 100;
extern int StartTrailing2 = 150;
extern int Trailing2  = 50;

{
//---------------------------------
   double buy_last_price  = -1;
   double sell_last_price = -1;
   double buy_orders      = 0;
   double sell_orders     = 0;

   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice(); buy_orders++;}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice(); sell_orders++;}
       }

       //TrailingStart//
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
   {
     if (buy_orders==1){ //если в рынке 1 ордер buy
     if (Trailing1>0 && (Bid-buy_last_price)>=StartTrailing1*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing1 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing1 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing1 *Point,Digits), OrderTakeProfit(), 0, Blue);
       }
     if (sell_orders==1){ //если в рынке 1 ордер sell
     if (Trailing1>0 && (sell_last_price-Ask)>=StartTrailing1*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing1 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing1 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing1 *Point,Digits), OrderTakeProfit(), 0, Red);
       }
//------------------------------------------------------------+
     if (buy_orders>=2){ //если в рынке 2 и больше ордера buy
     if (Trailing2>0 && (Bid-buy_last_price)>=StartTrailing2*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing2 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing2 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing2 *Point,Digits), OrderTakeProfit(), 0, Blue);
       }
     if (sell_orders>=2){ //если в рынке 2 и больше ордера sell
     if (Trailing2>0 && (sell_last_price-Ask)>=StartTrailing2*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing2 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing2 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing2 *Point,Digits), OrderTakeProfit(), 0, Red);
       }
     }  //TrailingEnd//
   }


 

абау))) спасибо большое))) а можно как то привязать к 1 ордеру и к второму, просто у меня одновременно 2 ордера открываются на бай, и получается для первого ордера свои значения будут а для 2 и 3 ордер если 3 ордер откроется, значения будут как у второго? правильно понял?

Artem Ashikhmin
1479
Artem Ashikhmin 2016.11.10 17:46  
Kirill Andreev:

а можно как то привязать к 1 ордеру и к второму, просто у меня одновременно 2 ордера открываются на бай, и получается для первого ордера свои значения будут а для 2 и 3 ордер

Оооо, это уже другая история, тут надо с циклом ордеров работать, искать последний ордер, потом предпоследний.
Проще поставить дистанцию следующего ордера, например 2-ой ордер откроется на расстоянии 10-15пп от предыдущего.
Там где условия для открытия ордера надо поставить:

extern int     DistDopOrder = 100;

условия бай && MathAbs(Ask-buy_last_price)>=DistDopOrder*Point
условия селл && MathAbs(Bid-sell_last_price)>=DistDopOrder*Point

если 3 ордер откроется, значения будут как у второго? правильно понял?

 Правильно, 2-ой, 3-ий и последующие ордера будут по значениям Trailing2 работать.

Kirill Andreev
827
Kirill Andreev 2016.11.10 17:50  
Artem Ashikhmin:

Оооо, это уже другая история, тут надо с циклом ордеров работать, искать последний ордер, потом предпоследний.
Проще поставить дистанцию следующего ордера, например 2-ой ордер откроется на расстоянии 10-15пп от предыдущего.
Там где условия для открытия ордера надо поставить:

extern int     DistDopOrder = 100;

условия бай && MathAbs(Ask-buy_last_price)>=DistDopOrder*Point
условия селл && MathAbs(Bid-sell_last_price)>=DistDopOrder*Point

 Правильно, 2-ой, 3-ий и последующие ордера будут по значениям Trailing2 работать.

а если магик номер для 1 типа ордеров и для 2типа ордеров разные сделать?
Artem Ashikhmin
1479
Artem Ashikhmin 2016.11.10 18:02  
Kirill Andreev:
а если магик номер для 1 типа ордеров и для 2типа ордеров разные сделать?

Ну можно и так, ток это будет ужас в коде.
Будет тогда всё по 2 (циклы, траллы, OrderSend и модификации)

Проще найти пример цикла где определяются ордера по порядку от последнего  
Что то вроде этого:

OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES) //последний ордер
и
OrderSelect(OrdersTotal()-2,SELECT_BY_POS,MODE_TRADES) //предыдущий от последнего ордера

Вот пример поиска ордеров по порядку: https://www.mql5.com/ru/forum/100530


 

Как определить предыдущий ордер SELL или BUY
Как определить предыдущий ордер SELL или BUY
  • www.mql5.com
Что можно использовать для определения предидущего оредера он был SELL или BUY, для входа в сделку...
Kirill Andreev
827
Kirill Andreev 2016.11.10 18:21  
Artem Ashikhmin:

Ну можно и так, ток это будет ужас в коде.
Будет тогда всё по 2 (циклы, траллы, OrderSend и модификации)

Проще найти пример цикла где определяются ордера по порядку от последнего  
Что то вроде этого:

OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES) //последний ордер
и
OrderSelect(OrdersTotal()-2,SELECT_BY_POS,MODE_TRADES) //предыдущий от последнего ордера


 

как я захотел сделал, но ошибка какая то в коде наверно, 1 трал нормально работает, а другой трал на определенном расстоятнии от цены всегда бегает.

extern int  StartTrailing=5;     // трейлинг для 1 типа ордеров(кол-во пнуктов для начала)
extern int  Trailing=10;         // трейлинг для 1 типа (диапазонтрейлинга
extern int  StartTrailing2=20;    // трейлинг для 2 типа ордеров(кол-во пнуктов для начала)
extern int  Trailing2=50;        // трейлинг для 2 типа (диапазонтрейлинга


{
      // Трейлинг стоп для 1 типа ордеров
      double buy_last_price=-1;
      double sell_last_price=-1;

      for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
        {
         if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice();}
         if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice();}
        }

      //TrailingStart//
      for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
        {
         if(Trailing>0 && (Bid-buy_last_price)>=StartTrailing*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing+1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
            && NormalizeDouble(Bid-Trailing *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
            int modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Trailing *Point,Digits),OrderTakeProfit(),0,Blue);
         if(Trailing>0 && (sell_last_price-Ask)>=StartTrailing*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing+1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
            && NormalizeDouble(Ask+Trailing *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
            modify=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Trailing *Point,Digits),OrderTakeProfit(),0,Red);
        }  //TrailingEnd//
     }

     {
      // трейлинг стоп для 2 типа ордеров
      double buy_last_price2=-1;
      double sell_last_price2=-1;

      for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY) {if(buy_last_price2==-1) buy_last_price2=OrderOpenPrice();}
         if(OrderType()==OP_SELL){if(sell_last_price2==-1)sell_last_price2=OrderOpenPrice();}
        }

      //TrailingStart//
      for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(Trailing2>0 && (Bid-buy_last_price2)>=StartTrailing2*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing2+1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
            && NormalizeDouble(Bid-Trailing2 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
            int modify2=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Trailing2 *Point,Digits),OrderTakeProfit(),0,Blue);
         if(Trailing2>0 && (sell_last_price2-Ask)>=StartTrailing2*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing+1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
            && NormalizeDouble(Ask+Trailing2 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
            modify2=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Trailing2 *Point,Digits),OrderTakeProfit(),0,Red);
        }  //TrailingEnd//
     }


Artem Ashikhmin
1479
Artem Ashikhmin 2016.11.10 18:31  
Kirill Andreev:

как я захотел сделал, но ошибка какая то в коде наверно, 1 трал нормально работает, а другой трал на определенном расстоятнии от цены всегда бегает. 

Ужас))
Такое разделение роли не сыграет!! 
делить на две части надо не так 

Artem Ashikhmin
1479
Artem Ashikhmin 2016.11.10 18:58  

extern int StartTrailing1 = 250;
extern int Trailing1 = 100;
extern int Magik1  = 1

extern int StartTrailing2 = 150;
extern int Trailing2  = 50;
extern int Magik2  = 2;


//----------------------------+
   double buy_last_price  = -1;
   double sell_last_price = -1;
   double buy_orders      =  0;
   double sell_orders     =  0;

   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik1)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice(); buy_orders++;}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice(); sell_orders++;}
       }
   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik2)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice(); buy_orders++;}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice(); sell_orders++;}
       }

       //TrailingStart//
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik1)
   {
     if (Trailing1>0 && (Bid-buy_last_price)>=StartTrailing1*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing1 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing1 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing1 *Point,Digits), OrderTakeProfit(), 0, Blue);
      
     if (Trailing1>0 && (sell_last_price-Ask)>=StartTrailing1*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing1 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing1 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing1 *Point,Digits), OrderTakeProfit(), 0, Red);
     }
//------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik2)
   {
     if (Trailing2>0 && (Bid-buy_last_price)>=StartTrailing2*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing2 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing2 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing2 *Point,Digits), OrderTakeProfit(), 0, Blue);
    
     if (Trailing2>0 && (sell_last_price-Ask)>=StartTrailing2*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing2 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing2 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing2 *Point,Digits), OrderTakeProfit(), 0, Red);
     }
//------------------------------------------------------------------------------------|
//И добавить магик в условия для открытия ордеров
if (Условия для бай && buy_orders==0) OrderSend(OP_BUY, Lot, -, -, -, -, Magik1, -);
if (Условия для бай && buy_orders==0) OrderSend(OP_BUY, Lot, -, -, -, -, Magik2, -);

if (Условия для селл && sell_orders==0) OrderSend(OP_SELL, Lot, -, -, -, -, Magik1, -);
if (Условия для селл && sell_orders==0) OrderSend(OP_SELL, Lot, -, -, -, -, Magik2, -);
Вроде так, пробуй.
Kirill Andreev
827
Kirill Andreev 2016.11.10 19:21  
Artem Ashikhmin:

extern int StartTrailing1 = 250;
extern int Trailing1 = 100;
extern int Magik1  = 1

extern int StartTrailing2 = 150;
extern int Trailing2  = 50;
extern int Magik2  = 2;


//---------------------------------
   double buy_last_price  = -1;
   double sell_last_price = -1;
   double buy_orders      = 0;
   double sell_orders     = 0;

   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik1)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice(); buy_orders++;}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice(); sell_orders++;}
       }
   for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik2)
   {
      if(OrderType()==OP_BUY) {if(buy_last_price==-1) buy_last_price=OrderOpenPrice(); buy_orders++;}
      if(OrderType()==OP_SELL){if(sell_last_price==-1)sell_last_price=OrderOpenPrice(); sell_orders++;}
       }

       //TrailingStart//
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik1)
   {
     if (Trailing1>0 && (Bid-buy_last_price)>=StartTrailing1*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing1 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing1 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     int modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing1 *Point,Digits), OrderTakeProfit(), 0, Blue);
      
     if (Trailing1>0 && (sell_last_price-Ask)>=StartTrailing1*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing1 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing1 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing1 *Point,Digits), OrderTakeProfit(), 0, Red);
     }
//------------------------------------------------------------+
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magik2)
   {
     if (Trailing2>0 && (Bid-buy_last_price)>=StartTrailing2*Point && OrderType()==OP_BUY && NormalizeDouble(Bid-(Trailing2 +1)*Point,Digits)>NormalizeDouble(OrderStopLoss(),Digits)
     && NormalizeDouble(Bid-Trailing2 *Point,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-Trailing2 *Point,Digits), OrderTakeProfit(), 0, Blue);
    
     if (Trailing2>0 && (sell_last_price-Ask)>=StartTrailing2*Point && OrderType()==OP_SELL && (NormalizeDouble(Ask+(Trailing2 +1)*Point,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0)
     && NormalizeDouble(Ask+Trailing2 *Point,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits))
     modify = OrderModify (OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+Trailing2 *Point,Digits), OrderTakeProfit(), 0, Red);
     }
//------------------------------------------------------------------------------------|
//И добавить магик в условия для открытия ордеров
if (Условия для бай && buy_orders==0) OrderSend(OP_BUY, Lot, -, -, -, -, Magik1, -);
if (Условия для бай && buy_orders==0) OrderSend(OP_BUY, Lot, -, -, -, -, Magik2, -);

if (Условия для бай && sell_orders==0) OrderSend(OP_SELL, Lot, -, -, -, -, Magik1, -);
if (Условия для бай && sell_orders==0) OrderSend(OP_SELL, Lot, -, -, -, -, Magik2, -);
Вроде так, пробуй.
получилось!!! Работает
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий