Установка Stop Out - страница 2

 

Давайте продолжим тему.

Хочу сделать индюк, который на графике будет рисовать уровень при котором сработает Margin Call

Но уже голову сломал, как высчитать этот уровень в виде конкретной цены которую надо нарисовать на графике.

Разумеется рисовать надо с учетом всех открытых позиций. в данный момент времени.

Полезная будет штука при торговле на микро с большим плечём.

Чтоб небыло иллюзий и сюрпризов для начинающих.

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

берем во внимание только одну текущую пару.

 

Кстати! ;)

double ML=AccountEquity()/AccountMargin()*100; // Уровень маржи

генерит кучу "зеро девайс" при отсутствии открытых позиций...

И честно говоря давно бы надо ввести это штатными средствами в МаркетИнфо.

*

Мой набор функций, так ещё и не причесаный... )))

Но для начала сойдёт. Принцип таков: на одном инструменте. Расчитывается суммарный лот "сумлот".

Далее "смотрится" насколько пипсов хватит остатков денег до разных уровней, сто, т.е. 100% маржин левел,

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

double SumLot(){ double buy=0, sell=0, sl; int y;
for(y=0;y<OrdersTotal();y++) {OrderSelect(y,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderType()==0) buy+=OrderLots();
if(OrderSymbol()==Symbol() && OrderType()==1) sell+=OrderLots();
} return(buy-sell);}
//buy-sell
//+------------------------------------------------------------------------+
double SimProfit() {double sp=0; int i;
for(i=0; i<OrdersTotal(); i++) {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{ if(OrderType()==0 || OrderType()==1)
sp+=(OrderProfit()+OrderCommission()+OrderSwap());}}
return(sp);}
//+------------------------------------------------------------------------+
double SimTikALL(){ double suml=SumLot(); if(SumLot()==0) {return(0);}
double sts=MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml); return(sts);}
//+------------------------------------------------------------------------+
double LevelSO(){ double suml=SumLot(); if(SumLot()==0) {return(0);}
double lso=0, lsP=0, lsM=0, prso=0;
int spr=MarketInfo(Symbol(),MODE_SPREAD);
prso=AccountEquity()-((AccountEquity()/100)*AccountStopoutLevel());
lsP=Bid+(MathAbs(prso)/(MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml))+spr)*Point;
lsM=Ask-(MathAbs(prso)/(MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml))-spr)*Point;
lso=lsP; if(suml>0) lso=lsM;
return(lso);}
//+------------------------------------------------------------------------+
double StoMarLevel(){ double suml=SumLot(); if(SumLot()==0) {return(0);}
double sml=0, smP=0, smM=0;
int spr=MarketInfo(Symbol(),MODE_SPREAD);
smP=Bid+(MathAbs(AccountFreeMargin())/(MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml))+spr)*Point;
smM=Ask-(MathAbs(AccountFreeMargin())/(MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml))-spr)*Point;
sml=smP; if(suml>0) sml=smM;
return(sml);}
//+------------------------------------------------------------------------+
double LevelBU(){ double suml=SumLot(); if(SumLot()==0) {return(0);}
double lbu=0, lbP=0, lbM=0;
int spr=MarketInfo(Symbol(),MODE_SPREAD);
lbP=Bid+(MathAbs(SimProfit())/(MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml)))*Point;
lbM=Ask-(MathAbs(SimProfit())/(MarketInfo(Symbol(),MODE_TICKVALUE)*MathAbs(suml))-spr)*Point;
lbu=lbP; if(suml<0) lbu=lbM;
return(lbu);}
 

вроде все понятно, а функция LevelSO() и LevelBU() что делает? словами если.

StoMarLevel() - возвращает цену маржин колла как я понял.

остальное объяснять не надо.

 
yaten >>:

вроде все понятно, а функция LevelSO() и LevelBU() что делает? словами если.

StoMarLevel() - возвращает цену маржин колла как я понял.

остальное объяснять не надо.

StoMarLevel() показывает цену где будет уровень маржи 100%

Нужно для того, что-бы знать например успеть залочится или частично и т.д...

LevelSO() цена где будет стоп-аут (примерно)

LevelBU() уровень, вернее цена безубытка если открыто несколько поз по этой паре,

например два бая 1 лот и ценой открытия 1.2100 и 1.2200, то б\у = 1.2150

Функция "умеет" считать позиции разного обьёма...

Принцип всё тот-же: вычисляется сумлот, цена тика этого сумлота, вычисление сколько пипсов от текущей

надо прибавить(отнять) если профит(лось) до той цены на которой результат по позициям будет = 0.

профит/ценатика=пипс

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

Направление lbu=lbP; if(suml<0) lbu=lbM; желательно бы перепроверить...

*

Цены возвращенные функциями проставляются для ценовых меток на 0-м баре.

Их три: 100%, б\у и СО

можно и других накидать, например МК, но в нём небыло нужды...

*

Это заготовки для новой версии индикатора. Заглядываю туда редко. Поэтому всё ещё сырое. Так что прошу не пинать...

 

Есть у кого индикатор отрисовывающий, на графике, уровни маржин кол и стоп аут?

Поделитесь пожалуйста..

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