Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yaten
72
Yaten  

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

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

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

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

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

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

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

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

kombat
3278
kombat  

Кстати! ;)

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);}
Yaten
72
Yaten  

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

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

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

kombat
3278
kombat  
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%, б\у и СО

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

*

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

sever30
3343
sever30  

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

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

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