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

 
используйте глобальные переменные, как вариант
 

Вот так я делал фиксацию прибыли в одном из своих экспертов:

extern double ProfitAutoClose = 100.0; // Прирост средств для фиксации прибыли

double Depo;

int init()
{
//----
Depo=AccountEquity();
GlobalVariableSet("Depo",Depo);
//----
return(0);
}

int start()
{

Depo=GlobalVariableGet("Depo");

if(AccountEquity()-Depo>ProfitAutoClose)
{

ClosePositions("0",-1, Mn);//закрываем все позиции

Depo=AccountEquity();

GlobalVariableSet("Depo",Depo);

}

...

 
Rita >>:

Именно в этом и трудность. Как определить эквити на предыдущем шаге (шагах)?

Надо отталкиваться от какой-то предыд. величины эквити. У где её взять, - предыд. в-ну?

ЗАВЕДИТЕ ПЕРМЕННУЮ.

 

Благодарю всех . Да, действительно. 

Закрытие по фиксации прибыли (от khorosh-а)  я вставила и работает эта опция оч. неплохо. И после оптимизации параметра ProfitAutoClose  - просадка изрядно уменьшилась!


Но, все-таки это же "не совсем" трайлинг эквити.

А как реализовать -добавить здесь трейлинг эквити ?  Вводить еще одну переменную ?

 
Посмотрите трейлинг эквити в новом советнике Игоря Кима.
 

Спасибо, granit77 !

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

А при работе моего эксперта - эквити всегда постоянно находится ниже баланса и эта конструкция не подходит.

Я чуть ранее (посл. пост на 7-й стр) об этом писала:

"Как же мне тралить эквити, если у меня при работе советника постоянно отражается отрицательная прибыль ?
    Т.е. - прибыли нет - а есть текущий убыток (- такова специфика работы советника, каждая отдельная позиция закрывается (в основном) в плюсе, но все открытые позиции при этом суммарно всегда находятся в убытке)
."

 
Rita >>:

А при работе моего эксперта - эквити всегда постоянно находится ниже баланса и эта конструкция не подходит.

Закрывайте сначала убыточные сделки, потом прибыльные. Баланс опустится ниже эквити (что эквивалентно эквити выше баланса).

// На доходности это никак не отразится.

А то, как я понял, вы склонны нервничать по поводу самого факта "эквити<баланса". Настолько расстраиваетесь, что изрядно тормозите. ;)

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

 

Рита, вот гляньте код (как пример), когда-то делал себе, НЕ использую, но работало, как сейчас помню :)

никаких привязок к балансам, прибыли от баланса и прочего не нужного

(перед употреблением проверить досконально, переделать на свой лад и под свои нужды)

if (!GlobalVariableCheck("StopTrading"))
     {
      if (!GlobalVariableCheck("TrStopEquity"))
         {
         int sl=SL_Equity; int tp=TP_Equity;

         if ((sl!=0 && AccountEquity()<=sl) || (tp!=0 && AccountEquity()>=tp))
            {
             GlobalVariableSet("StopTrading",1);
             Sleep(500);
             ClosePositions();
             if (ShowComment)
                {
                 comm="Торговля завершена. Все сделки закрыты.\n";
                 comm=comm+"Советники остановленны в: "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
                 Comment(pref,comm);
                }
            }
         }
     }

  if (!GlobalVariableCheck("StopTrading"))
     {
      bool tr_stop=TrStop_Equity; int  tr_step=TrStep_Equity; int  tr_dist=TrDist_Equity; int  tr_lvl =TrStartLvl_Equity;

      if ((tr_stop)||(tr_lvl!=0 && AccountEquity()>=tr_lvl)||(GlobalVariableCheck("TrStopEquity")))
         {
         if (!GlobalVariableCheck("TrStopEquity"))
            {
             GlobalVariableSet("TrStopEquity",1);
            } Sleep(500);
         if (!GlobalVariableCheck("SL_Equity"))
            {
             GlobalVariableSet("SL_Equity",(AccountEquity()-tr_dist));
            } Sleep(500);

         sl=GlobalVariableGet("SL_Equity");

         if (AccountEquity()<=sl)
            {
             GlobalVariableSet("StopTrading",1);
             Sleep(500);
             GlobalVariableDel("TrStopEquity");
             Sleep(500);
             GlobalVariableDel("SL_Equity");
             Sleep(500);
             ClosePositions();
             if (ShowComment)
                {
                 comm="Торговля завершена. Все сделки закрыты.\n";
                 comm=comm+"Советники остановленны в: "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
                 Comment(pref,comm);
                }
            }
         else
            {
            if (AccountEquity()>(sl+tr_dist+tr_step))
                GlobalVariableSet("SL_Equity",(AccountEquity()-tr_dist));
                Sleep(500);
                if (ShowComment)
                   {
                    comm="Работает Трэйлинг-Стоп:\n";
                    comm=comm+"Уровень Стоп-Лосс: "+DoubleToStr(NormalizeDouble(sl,2),2)+"\n";
                    comm=comm+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
                    Comment(pref,comm);
                   }
            }
         }
     }
ЗЫ:используемые функции - Кима, найдете на форуме, если их еще нет у Вас.
 

Киньте пожалуйста, если у кого есть, простенький трал по эквити.Условие одно - закрыть все позиции и удалить все ордера, если средства стали = ХХХХ, т.е. к примеру, до открытия позиций баланс был 10000, установил в трале эквити 10500, и как только средства стали = 10500 - закрыть все ордера и открытые позиции.:)

Посмотрел у Кима.. вроде чё-т не то.. выше в этой ветке вобще всё как-то сложно)).. Заранее спасибо:)

 

А, всё, кажется чуть выше нашёл.. stCloseOrders вроде то, что надо:)

Но если у кого есть чё-нить похожее, то кидайте.. лишнего полезного не бывает:)