Блог им. kreativ_25
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); }
Контртрендовый на рабочем ТФ, но трендовый на вышестоящим ТФ.
Т.е. заявки открываются на 15 минутном ТФ, а определение тренда на часовике (H1)
просто затык именно выставлении стопов.
Можно конечно без проблем выставить фиксированный стоп, но это в моем случае не совсем подходит.
Говори :))))
Но в общем, я тебе скажу так, стратегически — стоп надо выставлять с учетом предыдущей волатильности. А в тактике написания программ и кодов я не силён.
NormalizeDouble(Ask -((Ask-iLow(NULL,0,1))/Point),Digits);
пример Аск 1,54321 — (1,54321-1,54300 = 0.00021) 0.00021/1 (я всегда умножаю а вы почему то делите)
На что при проверке мне выдает:
2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: invalid lots amount for OrderSend function
2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: OrderSend error 4051
void EditOrder(int tic,double sl)
{while(!IsTradeAllowed()) Sleep(100);
if(OrderSelect(tic,SELECT_BY_TICKET))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE))
Print(«Ошибка редактирования ордера: »,GetLastError());
return;}
Т.е. будто мы используем фиксированное значение для установления стопа при модификации ордера. Т.к. если прописать фиксированное значение (руками, обычное целое число) то проблем нет.
Но такой вариант не прошел…
Полученое целое число я хотел использовать в стандартной модификации ордера, которая работает при вводе фиксированного значения (не рассчетного — как в примере).
Вы правы!
Сейчас принтовку сделаю.
Огромное спасибо Вам!
if (TrendDOWN() == True) {…
Можно же просто:
if (TrendDOWN()) {…
forum.mql4.com/ru/38949
Вам нужен эта функция
forum.mql4.com/ru/38949#434193
double
SL_Buy = NormalizeDouble(Ask -((AskiLow(NULL,0,1))/Point),Digits);
возвращает отрицательное значение…
значение возвращаемое iLov можно и не нормализовать оно корректно.