Это MQL4!
--------------------
Всем привет!
Уже больше недели меня мучает один вопрос — как правильно выставить стопы. Перебрал уже больше десятка вариантов и никак :(
Постоянно фигурируют две ошибки:
130 - Слишком близкие стопы или неправильно рассчитанные
4051 - Недопустимое значение параметра функции
----------------------
А всего то требуется выставить стоп на уровне Хая или Лоя предыдущего бара.
Мои варианты:
if(TrendDOWN() == True && OrderCloseTimeBool() != True && EMA_Filtr() == True)
{
if(UpWhite() == True ||
UpBlack() == True ||
PatternBuy_0() == True ||
PatternBuy_1() == True ||
PatternBuy_2() == True ||
PatternBuy_3() == True)
{
int Ticket = OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slippage,0,0,"",Magic,0,Blue);
if(Ticket > 0 )
{
double SL_Buy = NormalizeDouble(Ask -((Ask-iLow(NULL,0,1))/Point),Digits);
bool mod = OrderModify(Ticket,OrderOpenPrice(),SL_Buy,0,0);
}
}
}
Еще вариант в качестве функции:
double StopLossOP_BUY()
{
if(OrdersTotal()>0)
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
{
double StopOP_BUY = NormalizeDouble(OrderOpenPrice(),Digits) - //цена открытия ордера
(NormalizeDouble(OrderOpenPrice()-iLow(NULL,0,1),Digits)+ //разница между ценой открытия ордера и Лоем предыдщей свечи
NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits));//спред
return(NormalizeDouble(StopOP_BUY,Digits));
}
}
}//for
}//if
return(0);
}
Второй вариант, также в качестве функции:
double StopLossOP_BUY2()
{
if(OrdersTotal()>0)
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
{
RefreshRates();
double StopOP_BUY = NormalizeDouble(OrderOpenPrice(),Digits)- //цена открытия ордера
(NormalizeDouble(OrderOpenPrice()-iLow(NULL,0,1),Digits)+ //разница между ценой открытия ордера и Лоем предыдщей свечи
NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD)*Point,Digits));//спред
if(StopOP_BUY >= NormalizeDouble(Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits))
{
RefreshRates();
return(NormalizeDouble(Ask - MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits));
}
else
{
RefreshRates();
return(NormalizeDouble(StopOP_BUY,Digits));
}
}
}
}//for
}//if
return(0);
}
Люди добрые, помогите чем можно :(
Или приведите свои примеры
правильного выставления стопов на уровне Хая/Лоя предыдущего бара.
Я схожу с ума :)
Благодаря общему разуму и особенно помощи
Twilight_reg73 нашел ошибку в коде!
Спасибо вам друзья!
Ошибка заключалась в том, что всем стопам присваивалось одно и тоже значение!