Функция трейлинга средств (эквити) - может кто встречал готовую? - страница 4

 

мой вариант :

//+------------------------------------------------------------------+
//|Трал по эквити                                                    |
//+------------------------------------------------------------------+
bool EcvitiTral3(double EqvTralStep){
if(OrdersTotal()<1){gEqviti=AccountBalance();return(false);}
if(!GlobalVariableCheck("step")){EqvTralStep=EqvTralStep;}
  else{EqvTralStep=GlobalVariableGet("step");}
EqvTralStep=EqvTralStep*(GlobalVariableGet("multi")-GlobalVariableGet("disable"));
  if(WithoutLoss){
    if(AccountEquity()>=AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*(EqvTralStep*2))){EqvTralStep=EqvTralStep*2;}
      if(AccountEquity()>(gEqviti+(gEqviti/100*EqvTralStep))){
        gEqviti=gEqviti+(gEqviti/200*EqvTralStep);
        eqvtrade=true;
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<=gEqviti){CloseAll();Print("CloseAll");GlobalVariableDel("stop");return(false);}
      else{Comment(AccountFreeMargin()+AccountMargin(),"\n",
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =",EqvTralStep," %",
                 "\nACCOUNT BALANS         = ",AccountBalance(),
                 "\nCLOSE LEVEL                  = ",gEqviti,
                 "\nACCOUNT EQUITY        = ",AccountEquity(),
                 "\nNEXT STEP                     = ",gEqviti+(gEqviti/100*EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");} 
  }else{
    if(AccountEquity()>AccountBalance()){
      if(AccountEquity()-AccountBalance()>((AccountBalance()/100)*(EqvTralStep*2))){EqvTralStep=EqvTralStep*2;}      
      if(AccountEquity()>(gEqviti+(gEqviti/100*EqvTralStep))){
        gEqviti=gEqviti+(gEqviti/200*EqvTralStep);
        eqvtrade=true;
        if(!GlobalVariableCheck("stop")){GlobalVariableSet("stop",0);}
      }
      if(AccountEquity()<=gEqviti){CloseAll();Print("CloseAll");GlobalVariableDel("stop");return(false);}
      else{Comment(AccountFreeMargin()+AccountMargin(),"\n",
                 "EQUITY TRALING MODE\n",
                 "EQUITY TRALING STEP   =",EqvTralStep," %",
                 "\nACCOUNT BALANS         = ",AccountBalance(),
                 "\nCLOSE LEVEL                  = ",gEqviti,
                 "\nACCOUNT EQUITY        = ",AccountEquity(),
                 "\nNEXT STEP                     = ",gEqviti+(gEqviti/100*EqvTralStep));
                 return(true);
      }
    }else{GlobalVariableDel("stop");}  
  }
return(false);
}
вызов ставится в начале, и перекрывает работу остальных блоков советника на время трала, шаг трейлинга переменный - квадратичный, что позволяет хорошо отрабатывать резкие скачки эквити захватывая максимальную прибыль. режим БУ позволяет резать убыточные ордера в зародыше.
 
xrust >>:

мой вариант :

вызов ставится в начале, и перекрывает работу остальных блоков советника на время трала, шаг трейлинга переменный - квадратичный, что позволяет хорошо отрабатывать резкие скачки эквити захватывая максимальную прибыль. режим БУ позволяет резать убыточные ордера в зародыше.

Добрый день, xrust ! Пож. обьясните чуть подробнее работу этого блока. Никак я не могу его запусить. 

Неясности вот какие.

1. Функция CloseAll(), это видимо ф-я, кот. удаляет все ордера и/или закрывает позиции.

Аналог этой функции у меня есть и проблем здесь нет..

2. в свойствах я задал

extern bool WithoutLoss = true;

- что это за параметр ?

3. Еще задал -

extern double gEqviti=200;// - это видно размер достижения эквити, при котором начинается работа трала ?

4. Еще задал-

bool eqvtrade;

Что ещё надо задать? Как задается параметр EqvTralStep; ?

И пож.(если не трудно)  опишите в 2-3 словах работу функции в общем виде.

 
Функция вызывается в самом начале эксперта сразу за int Start(), вызов происходит таким образом :
//удаляем запрет на торговлю после удаления всех ордеров 
  if(OrdersTotal()<1){
    if(GlobalVariableCheck("stop")){GlobalVariableDel("stop");}  
    gEqviti=AccountBalance(); 
  } 
//тралим эквити
  if(EcvitiTral3(EqwTralStep)){return(0);}
  if(GlobalVariableCheck("stop")){return(0);}

если еквити поднялась над балансом, то она блокирует все стальные функции эксперта и тралит.

теперь по переменным : в глобальных переменных static double gEqviti;

во внешних переменных extern double EqwTralStep=0.03; шаг трейлинга в процентах от эквити extern bool WithoutLoss=false; разрешение на применение метода безубытка

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

 
Благодарю! Буду пробовать.
 

Не за что, если будут трудности - беспокойте...

 

Сделал. Запустил. Пока всё работает нормально. Слежу в онлайне вторую неделю

Но. Изредка бывают редкие глюки.

Обычно у меня в рынке 3-10 позиций одновременно .

Но - Когда в рынке одна позиция, бывает так, что она вдруг без видимых причин позиция закрывается с профитом =1-2 пипса!

Не пойму почему. В основном коде моего эксперта такого не предусмотрено.

 

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

Сделайте так :

организуйте в функции стическую переменную static double prewlewel;

потом перед , или за комментами 

  if(prewlewel!=gEqviti){
    prewlewel=gEqviti;
    Print(prewlewel);
  } 

А здесь добавьте обнуление переменной 
if(OrdersTotal()<1){gEqviti=AccountBalance();prewlewel=0;return(false);}
 

xrust - у меня к вам предложение-просьба - можете ли вы привести код вашей версии трала эквити в виде самостоятельного советника. 

Это был бы очень полезный инструмент для торгующих руками.

Ищу такую вещь очень давно, но ничего подходящего не встречал, а сам я в коде не силен (точнее - слаб).

 
ToKa_TuXa писал(а) >>

xrust - у меня к вам предложение-просьба - можете ли вы привести код вашей версии трала эквити в виде самостоятельного советника.

Это был бы очень полезный инструмент для торгующих руками.

Неплохая мысль! Поддерживаю...

Действительно. Такая конструкция не останется незамеченной.

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