Как грамотно запомнить значение AccountEquity() и выйти из просадки

 

Всем привет!

Задача : Нужно запомнить AccountEquity() в момент, когда AccountEquity() отрицательно разойдётся с AccountBalance() , т.е когда начнётся просадка депозита. И хотелось бы закрыть все позиции при достижении вернувшегося из просадки эквити до уровня того самого эквити что мы запомнили в начале просадки. Для наглядности и  понимания, на графике , как зону закрытия всех сделок я нарисовал красный круг.




Например: если просадка началасть при балансе и эквити примерно 1000 , то при возврате эквити примерно к 1000 --   закрыть все ордера.

Файлы:
h868a0.jpg  96 kb
 

Ну так пропишите условие сие, что мол если от эквити отнять баланс и результат меньше нуля, то присвоить переменной такой-то текущее значение эквити, если значение этой переменной ноль. А если не ноль, то уже присвоили ей значение некое ранее.

А если эквити больше той самой переменной, а она сама не равна нулю, то закрыть все сделки. И обнуляем значение переменной.

Это если я правильно понял ваши хотелки, конечно же.

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

 
intercool:

Нужно запомнить AccountEquity() в момент, когда AccountEquity() отрицательно разойдётся с AccountBalance(), т.е когда начнётся просадка депозита.

Для начала надо установить уровень наверно когда начинать запоминать просевший Equity, т.к. при открытии первой позиции Equity будет сразу меньше Balance.
Потом когда достигли этого уровня, присвоить значение глобальной переменной, например HelpAccount = true
и далее если if (HelpAccount && (AccountEquity() - AccountBalance()) > 0) то закрыть всё

ну как-то так

 
FXwin:

Для начала надо установить уровень наверно когда начинать запоминать просевший Equity, т.к. при открытии первой позиции Equity будет сразу меньше Balance.
Потом когда достигли этого уровня, присвоить значение глобальной переменной, например HelpAccount = true
и далее если if (HelpAccount && (AccountEquity() - AccountBalance()) > 0) то закрыть всё

ну как-то так

&& (AccountEquity() - AccountBalance()) > 0)    --- к сожалению это условие в данной защите не подходит - отрабатывают тралы и баланс идёт в рост - пока не сольёт,  а эквити может болтаться туда сюда.  А так пример хороший.
 
Aleksandr Volotko:

Ну так пропишите условие сие, что мол если от эквити отнять баланс и результат меньше нуля, то присвоить переменной такой-то текущее значение эквити, если значение этой переменной ноль. А если не ноль, то уже присвоили ей значение некое ранее.

А если эквити больше той самой переменной, а она сама не равна нулю, то закрыть все сделки. И обнуляем значение переменной.

Это если я правильно понял ваши хотелки, конечно же.

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

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

С кодом разобрался - вот рабочая версия.

 //Объявляем глобальную переменную
 double HelpAccount =0;
/////Защита по эквити /////////////////////////////////////////////////////////////////////////////////////////////

//если от эквити отнять баланс и результат меньше нуля, то присвоить переменной такой-то текущее значение AccountBalance()

if(AccountEquity()-AccountBalance() <0 && HelpAccount == 0)  HelpAccount = NormalizeDouble( AccountBalance(),Digits);

// если эквити больше той самой переменной, а она сама не равна нулю, то закрыть все сделки.И обнуляем значение переменной.

if(AccountEquity()> HelpAccount+5 && HelpAccount != 0){
       CloseAll();
       HelpAccount=0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

итого:

Всем СПАСИБО!

 
intercool:
Спасибо, похоже алгоритм тот что нужно!

На здоровье.

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