нужен совет от профи трал который управляет двумя позициями независимо друг от друга, как можно реализовать? - страница 6

 
charony:

примерно так он и работает


только меня не интерисуют критерии активации трала

мне нужно чтобы трал вел каждую открытую позицию отдельно от других

Тралл что я выложил начинает траллить только те позиции которые вышли в плюс, у минусовых позиций он стопы вообще не трогает.

"возможно поставить трал в 50 пунктов для обоих позиций,

но они не закроются одновременно

трал у обоих 50 пунктов"

Закроются оба только если будут в плюсе, если 1 в плюсе а другой в минусе то будет стоп двигать только у плюсового.

 
PozitiF:

Все страницы не читал, но кажется уловил общюю суть.

https://www.mql5.com/ru/articles/1390 тут, создаёш массив с ордерами, при создании ордера бери откуда нибудь магик, можеш во входных параметрах советника написать Magic = 1; для примера, и с последующим открытым ордером увеличивать значение на 1,

при падении терминала сможеш восстановить массив.

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



там массив не правильный, в один массив нельзя пихать вместе int, и double.
 
charony:

там массив не правильный, в один массив нельзя пихать вместе int, и double.
Можно, помещается просто целое число перед точкой.
 
PozitiF:
Можно, помещается просто целое число перед точкой.


double цена EUR/USD 1,3915 в int 1

int sell = 1, в double sell = 1.0

потом ищем почему не работает программа????????

или еще хуже приходит дядя "Коля Маржин"

 

а зачем тебе цену в инт помещать, об этом я вообще ничего не писал и не предлагал.

я писал что можно инт число помещать в переменную типа double.

из double потом снова в int и опять у тебя 1 всё работает ) https://www.mql5.com/ru/forum/136406

 

В ордер опен поставил int MN= TimeCurrent(); и это OrderSend(Symbol(),OP_BUY,Lots_New,Ask,2,0,0,NULL,MN,0,Green);

т.е каждому ордеру присваевается магик

в трале после селекта

int Tip=OrderType();

if(OrderSymbol()!=Symbol()||Tip>1)continue;

if(OrderMagicNumber()==MN)

сейчас попробую

 

нет не работает, что-то еще наверно накосячено, я о трале сейчас

будем искать

 
PozitiF:

а зачем тебе цену в инт помещать, об этом я вообще ничего не писал и не предлагал.

я писал что можно инт число помещать в переменную типа double.

из double потом снова в int и опять у тебя 1 всё работает ) https://www.mql5.com/ru/forum/136406

double цена EUR/USD 1,3915 в int 1 потом снова в double получаем 1.0

double цена EUR/USD 1,3915 =========> double 1.0

где смеятся??????????????????



int 1------> double 1.0 ------> int 1 здесь наверно будет работать, но это не есть гут

 
charony:

нет не работает, что-то еще наверно накосячено, я о трале сейчас

будем искать

Тралл 100% рабочий, он у меня практически во всех советниках работает.

int Trall = 50;

int MN= TimeCurrent();

OrderSend(Symbol(),OP_BUY,Lots_New,Ask,2,0,0,NULL,MN,0,Green);

int Tip=OrderType();

if(OrderSymbol()!=Symbol()||Tip>1)continue;
for(int i = 0; i<OrderTotals(); i++){
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){
      if(OrderMagicNumber()==MN) TrailingStop(Trall, 5, MN);
   }
}

Должен тралить.

 
//+-----------------------------trailingstop----------------------------------------------+
 total=OrdersTotal();
    for(int n=0;n<total;n++)
     {
      if(OrderSelect(n, SELECT_BY_POS, MODE_TRADES) == true)
         { 
         int Tip=OrderType();                  
         if(OrderSymbol()==Symbol()&&OrderType()==Tip)
            {
                MN = OrderMagicNumber();
                TrailingStop(level_ts, level_step , MN);
            } 
         }    
      }
 
  

   
   return;                             // exit start()
  }
//+-----------------------------start end----------------------------------------------+

void TrailingStop(int level_ts,int level_step , int MN) 
{
   int ot, err, quantity_orders, cx;
   bool fm;
   double op, as, bd, pt, sl, tp, ut;
//----
   quantity_orders = OrdersTotal();
   if(quantity_orders >= 0) {
      for(cx = 0; cx < quantity_orders; cx++) {
         if(!OrderSelect(cx, SELECT_BY_POS, MODE_TRADES)) {
            Print("Error: SimpleTrailing(), OrderSelect: " + cx + ". Îøèáêà: " + GetLastError());
         }
         if (OrderMagicNumber()==MN ) 
         {   
            pt = MarketInfo(OrderSymbol(), MODE_POINT);
            bd = MarketInfo(OrderSymbol(), MODE_BID);
            as = MarketInfo(OrderSymbol(), MODE_ASK);
            op = OrderOpenPrice();
            ot = OrderType();
            sl = OrderStopLoss();
            tp = OrderTakeProfit();
            ut = level_ts + level_step;
         
            if(ot == OP_BUY) {
               if(sl == 0 || sl < op) {                              
                  if(op <  (bd - ut * pt)) {                         
                     sl = bd - level_ts * pt;
                  }
               }
               else {
                  if(sl < (bd - ut * pt) && bd > (op + ut * pt)) {
                     sl = bd - level_ts * pt;
                  }
               }
            }
            if(ot == OP_SELL) {
               if(sl == 0 || sl > op) {
                  if(op > (as + ut * pt)) {
                     sl = as + level_ts * pt;
                  }
               }
               else {
                  if(sl > (as + ut * pt) && as < (op - ut * pt)) {
                     sl = as + level_ts * pt;
                  }
               }
            }
            if (sl != OrderStopLoss()) {
               op = NormalizeDouble(op, Digits);
               tp = NormalizeDouble(tp, Digits);
               sl = NormalizeDouble(sl, Digits);
               fm = OrderModify(OrderTicket(), op, sl, tp, 0, CLR_NONE);
               
            }
         }
      }
   }
}

//+-----------------------------trailingstop end----------------------------------------------+

вставил код, трал работает

но проблема осталась

Причина обращения: