Расчётный трайлингстоп.

 
Уважаемые программисты. Кто-нибудь делал динамический в зависимости от волантильности трал, или он уже есть где-то в Code base? Не хочется изобретать велосипед.
 
khorosh писал(а) >>
Уважаемые программисты. Кто-нибудь делал динамический в зависимости от волантильности трал, или он уже есть где-то в Code base? Не хочется изобретать велосипед.

По моему этот вопрос из серии: "кто-нибудь делал индикатор, показывающий смену тренда?"

Наверняка многие делали и задавались этим вопросом, но есть ли что-нибудь эффективное - совсем другой вопрос.

Поэтому в данной теме нет велосипедов.

 
vasya_vasya >>:

По моему этот вопрос из серии: "кто-нибудь делал индикатор, показывающий смену тренда?"

Наверняка многие делали и задавались этим вопросом, но есть ли что-нибудь эффективное - совсем другой вопрос.

Поэтому в данной теме нет велосипедов.

Мне хотелось хотя бы узнать есть ли эффект от такого трала по сравнению со статическим.

 
khorosh писал(а) >>
...или он уже есть где-то в Code base? Не хочется изобретать велосипед.

Слабо поиском воспользоваться? По слову "трейлинг" первой строкой в результатах поиска.

 
khorosh >>:

Мне хотелось хотя бы узнать есть ли эффект от такого трала по сравнению со статическим.

Вообще-то есть. Метод называтеся "канделябр" - не шучу. Стоп подвешивается на МА на расстоянии k*ATR. Но лучше - ИМХО - двигать стоп по лок. экстремумам. Для лонга по лок впадинам.

Что же касается реализации последнего - то, наверное, есть. Можно взять любой горизонтальный канал - их точно много - и по значениям границ двигать стопы.

А по первому способу - это просто конверт с разнесением МАшек именно на k*ATR. Естественно, подвижка стопа должна быть в сторону позы.

 
Integer >>:

Слабо поиском воспользоваться? По слову "трейлинг" первой строкой в результатах поиска.

спасибо, всё время забываю.

Svinozavr >>:

Вообще-то есть. Метод называтеся "канделябр" - не шучу. Стоп подвешивается на МА на расстоянии k*ATR. Но лучше - ИМХО - двигать стоп по лок. экстремумам. Для лонга по лок впадинам.

Что же касается реализации последнего - то, наверное, есть. Можно взять любой горизонтальный канал - их точно много - и по значениям границ двигать стопы.

А по первому способу - это просто конверт с разнесением МАшек именно на k*ATR. Естественно, подвижка стопа должна быть в сторону позы.


спасибо всё ясно.

 

Сделал вот такой плавный трал удавку:

TrailingStop=(1.2-0.01*MathSqrt(Profit))*Profit+0.1*Profit-0.0006*Profit*Profit;

В прилагаемом файле на диаграмме - зависимость TrailingStop от Profit - розовая кривая, процент TrailingStop от Profit - жёлтая линия( масштаб увеличен в 10 раз).

Как видно величина TrailingStop вначале растёт с некоторым замедлением роста, а после достижения некоторой величины профита начинает падать.

Манипулируя коэффициентами в приведённой формуле, можно менять характер зависимости трейлингстопа от профита и подобрать для себя подходящий вариант.

Файлы:
ts.rar  3 kb
 
Спасибо, Юрий. Посмотрим. К теме появился интерес, Игорь Ким уже выложил на своем сайте советник e-VTrailingByProfit, реализующего виртуальный трейлинг по суммарному эквити, за что ему общая благодарность.
 

Небольшое дополнение кимовского простого трала превращает его в трал удавку

//+------------------------------------------------------------------+ 
//| Сопровождение позиции  тралом  удавкой                           | 
//+------------------------------------------------------------------+ 
void TrailingPositions(int orderTicket) { 
  double pBid, pAsk, pp, TrailingStop; 
  pp = MarketInfo(OrderSymbol(), MODE_POINT); 
  if (OrderType()==OP_BUY) { 
    pBid = MarketInfo(OrderSymbol(), MODE_BID);
    TrailingStop = (OrderTakeProfit()-pBid)/Point;// дополнение
    if(TrailingStop<StopLevel) {TrailingStop=StopLevel+Spread;}  
    if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) { 
      if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) { 
        ModifyStopLoss(pBid-TrailingStop*pp, orderTicket); 
        return; 
      } 
    } 
  } 
  if (OrderType()==OP_SELL) { 
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    TrailingStop = (pAsk-OrderTakeProfit())/Point;
    if(TrailingStop<StopLevel) {TrailingStop=StopLevel+Spread;}  
    if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) { 
      if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) { 
        ModifyStopLoss(pAsk+TrailingStop*pp, orderTicket); 
        return; 
      } 
    } 
  } 
}