Здравствуйте. Подскажите код или мысль - как на одной свече открыть не более одной сделки, если сработал SL, то нужно ждать следующей свечи. Как это можно осуществить?
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
- Как закрыть оредер, если он -100?
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
if(OrderTotal() < 1){ ...;}
else {...}
Это вообще для одной сделки.
А для одной сделки не свече нужно запомнить время открытия текущей свечи и если оно не равно с временем открытия текущей свечи, тогда что-то там делаем.
https://www.mql5.com/ru/forum/102366 - поиск рулит
спасибо за помощь
//+------------------------------------------------------------------+ //| Проверяет был ли открыт последний ордер на этой же свече | //| Checks whether the opened last the order on the same candle | //+------------------------------------------------------------------+ bool IfOrdOpClSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){ if(sy == ""){sy = Symbol();} if(per==0){per=Period();} for(int i = OrdersTotal(); i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()!=sy){continue;} if(OrderType()==typ||typ==-1){ if(OrderMagicNumber()==magik||magik==0){ if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);} } } } } for(i = OrdersHistoryTotal(); i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){ if(OrderSymbol()!=sy){continue;} if(OrderType()==typ||typ==-1){ if(OrderMagicNumber()==magik||magik==0){ if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);} } } } } return(false); } //+------------------------------------------------------------------+ //| Проверяет был ли закрыт последний ордер на этой же свече | //| Checks whether the opened last the order on the same candle | //+------------------------------------------------------------------+ bool IfOrdClSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){ if(sy == ""){sy = Symbol();} if(per==0){per=Period();} for(int i = OrdersHistoryTotal(); i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){ if(OrderSymbol()!=sy){continue;} if(OrderType()==typ||typ==-1){ if(OrderMagicNumber()==magik||magik==0){ if(OrderCloseTime()>=iTime(sy,per,bar)){return(true);} } } } } return(false); } //+------------------------------------------------------------------+ //| Проверяет был ли открыт последний ордер на этой же свече | //| Checks whether the opened last the order on the same candle | //+------------------------------------------------------------------+ bool IfOrdOpSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){ if(sy == ""){sy = Symbol();} if(per==0){per=Period();} for(int i = OrdersTotal(); i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()!=sy){continue;} if(OrderType()==typ||typ==-1){ if(OrderMagicNumber()==magik||magik==0){ if(OrderOpenTime()>=iTime(sy,per,0)){return(true);} } } } } return(false); }
А если так:
if(TimeCurrent()<OrderOpenTime()+Period()*60)
break;
Cos:
но открыв сделку за 2 минуты до конца часовой свечи вы будете ждать на новом баре 58 минут ничего не делая
А если так:
if(TimeCurrent()<OrderOpenTime()+Period()*60)
break;
я такую конструкцию использую:
//+----------------------------------------------------------------------------+ //| Описание : Запрет торговли в одном баре | //+----------------------------------------------------------------------------+ //| Параметры: | //| Type - тип ордера | //| | //| Если функция фозвращает True, то открывать позу можно | //| | //| Пример: if(CheckOpenPosition(OP_BUY)) { // Открытие Buy } | //+----------------------------------------------------------------------------+ bool CheckOpenPosition(int Type) { bool Result = True; for(int i = 0; i < OrdersTotal(); i++) if(OrderSelect(i, SELECT_BY_POS)) if(OrderType() == Type && OrderMagicNumber() == magic_bands_lyg && OrderSymbol() == Symbol()) if(OrderOpenTime() >= Time[0]) Result = False; for(i = 0; i < OrdersHistoryTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) if(OrderType() == Type && OrderOpenTime() >= Time[0] && OrderMagicNumber() == magic_bands_lyg && OrderSymbol() == Symbol()) Result = False; } return(Result); }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь