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

 
charony:

на 2sell трал должен был поставить SL на уровень 850

но он закрыл его на уровне 950,при ручной торговле такого нет

как это можно решить в коде?

с чего бы вдруг? Если цена дошла только до 899.Трал должен быть на расстоянии 50 пунктов следовательно где-то в районе 950 он должен находится.
 
sanyooooook:
с чего бы вдруг? Если цена дошла только до 899.Трал должен быть на расстоянии 50 пунктов следовательно где-то в районе 950 он должен находится.

он закрыл его по SL от 1sell
 
подождем может быть подтянется кто знающий.
 
неужели никто не знает
 
charony:
неужели никто не знает


вам видимо нужно чтобы тралл для позы включался только тогда, когда цена прошла в нужную сторону не менее чем на X пунктов от цены открытия позы (например 100)?. Если да, то это одна строчка кода дополнительно в функции тралла

Есть ещё вариант, что тралл будет срабатывать при прохождении X пунктов от цены открытия: прошли 100п - тралл -50п, прошли ещё 100п - опять тралл на -50 и т.д.

 
Avals:


вам видимо нужно чтобы тралл для позы включался только тогда, когда цена прошла в нужную сторону не менее чем на X пунктов от цены открытия позы (например 100)?. Если да, то это одна строчка кода дополнительно в функции тралла

Есть ещё вариант, что тралл будет срабатывать при прохождении X пунктов от цены открытия: прошли 100п - тралл -50п, прошли ещё 100п - опять тралл на -50 и т.д.


у меня оно так и есть, т.е трал включается при определенных событиях

при открытой одной позиции проблем нет,

при открытии 2 и более позиций, трал выставляет только один SL,

при достижении какой либо позиции уровня SL

закрываются все позиции этого типа

Мне нужно чтобы трал вел позиции одного типа

независимо друг от друга

 
charony:


у меня оно так и есть, т.е трал включается при определенных событиях

при открытой одной позиции проблем нет,

при открытии 2 и более позиций, трал выставляет только один SL,

при достижении какой либо позиции уровня SL

закрываются все позиции этого типа


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

в настройках SL неставится т.е=0, TP тоже =0,

Трал=50пунктов для всех позиций и всех типов

Трал должен вести позиции независимо друг от друга

при 1000=поз1Buy цена пошла на север при 1050 тралом ставится SL для поз1Buy

цена пошла дальше на север, дошла до 1090, SL для поз1Buy остался 1050, SL для поз2Buy нет.

цена пошла на юг,дошла до 1050 закрылись обе позиции

Мне нужно чтобы по SL закрылась только поз1

поз2 должна закрыться по SL, если цена дойдет до 1140,

т.е на 1130 выставится SL для поз2, и от 1140цена упадет ниже 1130

должен сработать SL для поз2

поз2Buy--------------------------------------------------------------------------1080

SL---------------------------------------------------------------------------------1050

поз1Buy--------------------------------------------------------------------------1000

 

Вот мой тралл принимает в качестве параметров магик, при открытии ордеров в качестве магика можеш брать Time[0] или ещё чего нибудь, дату время да хоть что )

принимает:

level_ts - Трейлинг стоп в пунктах

level_step - Шаг трала

mn - Магик, если -1 то будет траллить все ордера.


//+----------------------------------------------------------------------------+
//| TrailingStop.                                                              |
//|   траллит все ордера, на уровень выставленный во входных параметрах.       |
//+----------------------------------------------------------------------------+
void TrailingStop(int level_ts, int level_step = 5, int mn = -1) 
{
   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 (mn < 0 || 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);
               if (fm) {
                  if (UseSound) PlaySound(NameFileSound);
               }
               else {
                  err=GetLastError();
                  Print("Error(",err,") SimpleTrailing(): ",ErrorDescription(err));
               }
            }
         }
      }
   }
}
 
charony:

в настройках SL неставится т.е=0, TP тоже =0,

Трал=50пунктов для всех позиций и всех типов

Трал должен вести позиции независимо друг от друга

при 1000=поз1Buy цена пошла на север при 1050 тралом ставится SL для поз1Buy

цена пошла дальше на север, дошла до 1090, SL для поз1Buy остался 1050, SL для поз2Buy нет.

цена пошла на юг,дошла до 1050 закрылись обе позиции

Мне нужно чтобы по SL закрылась только поз1

поз2 должна закрыться по SL, если цена дойдет до 1140,

т.е на 1130 выставится SL для поз2, и от 1140цена упадет ниже 1130

должен сработать SL для поз2

поз2Buy--------------------------------------------------------------------------1080

SL---------------------------------------------------------------------------------1050

поз1Buy--------------------------------------------------------------------------1000


если правильно понял, то нужно заменить

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))

на

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
аналогично для селл.
Причина обращения: