Расчет цены символа, при которой произойдет стоп аут

 

Как рассчитать цену символа, при которой стоп аут произойдет?

То есть у меня есть сетка из открытых ордеров. Хочу рассчитать на каком уровне цены счет сольет.

 
Mover:

Как рассчитать цену символа, при которой стоп аут произойдет?

То есть у меня есть сетка из открытых ордеров. Хочу рассчитать на каком уровне цены счет сольет.

Это возможно только в том случае, если базовая валюта символа совпадает с валютой депозита. Например, символ EURUSD и валюта депозита USD. При этом под другим символам не должно быть позиций. Во всех остальных случаях более-менее точный расчет невозможен, т. к. в процессе изменения цены символа изменяется стоимость тика.

 
Ihor Herasko #:
Это возможно только в том случае, если базовая валюта символа совпадает с валютой депозита. Например, символ EURUSD и валюта депозита USD. При этом под другим символам не должно быть позиций. Во всех остальных случаях более-менее точный расчет невозможен, т. к. в процессе изменения цены символа изменяется стоимость тика.

Хорошо. Как это сделать?

 
Mover #:

Хорошо. Как это сделать?

Количество пунктов в направлении убытка до достижения Stop Out:

(FreeMargin - SOLevel * Margin) / (TickValue * Lots * TickSize / Point)

где:

FreeMargin - текущая величина свободных средств

SOLevel - уровень стопаута для текущего типа счета в единица (не процентах). Узнать можно в договоре с ДЦ/брокером

Margin - текущая маржа по позиции

TickValue - стоимость тика

Lots - объем текущей позиции

TickSize - размер тика в пунктах

Point - величина пункта

 
Ihor Herasko #:

Количество пунктов в направлении убытка до достижения Stop Out:

(FreeMargin - SOLevel * Margin) / (TickValue * Lots * TickSize / Point)

где:

FreeMargin - текущая величина свободных средств

SOLevel - уровень стопаута для текущего типа счета в единица (не процентах). Узнать можно в договоре с ДЦ/брокером

Margin - текущая маржа по позиции

TickValue - стоимость тика

Lots - объем текущей позиции

TickSize - размер тика в пунктах

Point - величина пункта

 А как всё-таки рассчитать ЦЕНУ УРОВНЯ стоп аута? Не кол-во пунктов, не процент, а именно ЦЕНУ уровня? Например, советник открыл 5 ордеров buy, цена движется против нас, с каждым новым открытым ордером buy уровень стоп аут становится все ближе - нужна ЦЕНА этого уровня.
Как это вычислить?

 
FEEX #:

 А как всё-таки рассчитать ЦЕНУ УРОВНЯ стоп аута? Не кол-во пунктов, не процент, а именно ЦЕНУ уровня? Например, советник открыл 5 ордеров buy, цена движется против нас, с каждым новым открытым ордером buy уровень стоп аут становится все ближе - нужна ЦЕНА этого уровня.
Как это вычислить?

Это же очевидно: отнять/добавить полученное количество пунктов от/к текущей цены(е).

 
Ihor Herasko #:

Это же очевидно: отнять/добавить полученное количество пунктов от/к текущей цены(е).


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

 double   d_shift_3,u_shift_3=0; 
     if ( lots > 0) // lots - сумма всех лотов сетки
       {
         d_shift_3 = AccountEquity() / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots); 
         if (GetLot(0))
           {
             u_shift_3 = Bid - d_shift_3*Point;  // уровень полного слива сетки buy
           }
         if (GetLot(1))
           { 
             u_shift_3 = Ask + d_shift_3*Point;  // уровень полного слива сетки sell
           }
       }                     
         else u_shift_3 = 0.0;

SM("StopOut price           : " + DoubleToString(u_shift_3,Digits)); // вывод цены SO на график
 
FEEX #:


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

d_shift_3 = AccountEquity() / (MarketInfo(Symbol(), MODE_TICKVALUE) * lots); 


Вы берете от средств счета. Стоп аут наступает раньше, чем закончатся средства. То есть, нужно по этой формуле:


Ihor Herasko #: Количество пунктов в направлении убытка до достижения Stop Out: (FreeMargin - SOLevel * Margin) / (TickValue * Lots * TickSize / Point)
 

Yevhenii Levchenko #:


Вы берете от средств счета. Стоп аут наступает раньше, чем закончатся средства. То есть, нужно по этой формуле:


немного не понятен параметр SOLevel
"
SOLevel - уровень стопаута для текущего типа счета в единица (не процентах). Узнать можно в договоре с ДЦ/брокером" -  что значит "в единицах"? Каких? Узнать в договоре?)) Непонятно...
Не могли бы Вы, или кто понимает о чем речь идет, изобразить это на языке mql4?
К сожалению моих знаний на это не хватает...

 
FEEX #:

немного не понятен параметр SOLevel
"
SOLevel - уровень стопаута для текущего типа счета в единица (не процентах). Узнать можно в договоре с ДЦ/брокером" -  что значит "в единицах"? Каких? Узнать в договоре?)) Непонятно...
Не могли бы Вы, или кто понимает о чем речь идет, изобразить это на языке mql4?
К сожалению моих знаний на это не хватает...

AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) выдает уровень стоп аута.  Вот и справочника:

ACCOUNT_MARGIN_SO_SO

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


То есть, при достижении этого уровня будет SO_SO.

Вот это вот выведет тип SO_SO (в процентах либо в валюте депозита) и сам уровень:

  string info = StringFormat("ACCOUNT_MARGIN_SO_MODE: %s\nSO_SO: %f",EnumToString((ENUM_ACCOUNT_STOPOUT_MODE)AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE)),AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
  Comment(info);
 
Yevhenii Levchenko #:

AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) выдает уровень стоп аута.  Вот и справочника:

ACCOUNT_MARGIN_SO_SO

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


То есть, при достижении этого уровня будет SO_SO.

Вот это вот выведет тип SO_SO (в процентах либо в валюте депозита) и сам уровень:

К сожалению, для меня пока это тоже не совсем понятно... Не могли бы Вы это как-то расписать иначе?
Вот у меня есть вывод переменной цены SO: 

SM("StopOut price           : " + DoubleToString(u_shift_3,Digits)); // вывод цены SO на график

Какую функцию нужно добавить в код советника, чтобы переменная u_shift_3 вывела на график цену SO?
Извините что достаю с этим вопросом. Просто уже третьи сутки сканирую гугл, и ноль информации по получению цены SO. Только тут нашел подобный вопрос, но и ответы для моих знаний пока слишком сложны..
Нашел даже один индикатор, с открытым кодом, который, типа, выводит цену SO, но в итоге, взяв оттуда логику расчета, получил такой же результат, который показал выше, т.е и там ошибка в расчетах.. 

P.S. Вот то, что выдала Ваша строка:

(2) - 40 процентов.. Мне не нужны проценты)) Проценты можно получить проще: AccountStopoutLevel()
А вот то, что должно выдать (1) - цену уровня слива (Stop Out), только правильную)

Нужен вывод именно ЦЕНЫ!

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