Запоминайте в статическую переменную время открытия бара на котором произошло закрытие, и далее при открытии новой сделки проверяйте
static datetime time_prev; if(time_prev!=Time[0]) { //Открываем новую сделку. } if(Проверяем что сделка закрылась) { //Запоминаем время открытия бара на котором произошло закрытие time_prev=Time[0]; }
Запоминайте в статическую переменную время открытия бара на котором произошло закрытие, и далее при открытии новой сделки проверяйте
Неправильно.
При перезагрузке будет бяка.
Находить время закрытия последнего (ордера*) надо прямо перед открытием нового (ордера*).
Неправильно.
При перезагрузке будет бяка.
Находить время закрытия последнего надо прямо перед открытием нового.
а мне нужен именно текущий бар, который в данный момент происходит
Добрый день! Нужно сделать такое условие:
Если ордер закрылся на текущем баре, то ордеров на данном баре больше не открывать.
Спасибо
Нужно в истории найти последнюю закрытую позицию и сравнить её время закрытия с временем открытия самого свежего бара. Проще всё это оформить функцией.
//+------------------------------------------------------------------+ //| false - на данном баре ещё не было закрытых позиций | //| true - на данном баре есть закрытые позиции | //+------------------------------------------------------------------+ bool NewBar_CloseTrade() { for(int i = OrdersHistoryTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL)) { if(OrderCloseTime() < Time[0])return(false); else return(true); } } return(false); }
а мне нужен именно текущий бар, который в данный момент происходит
Бары разные бывают на свете )))
Встречаются и дневные, и недельные.
Вы же спрашиваете про бар? Так бар может закрыться и через 24 часа после открытия.
А за 20 часов много что может произойти с домашним компьютером.
Моё замечание было что Нельзя запоминать время в переменную. Это чревато.
П.С. Вот функцию, что дал Сергей, вызывайте перед открытием ордера - это будет надёжно.
Бары разные бывают на свете )))
Встречаются и дневные, и недельные.
Вы же спрашиваете про бар? Так бар может закрыться и через 24 часа после открытия.
А за 20 часов много что может произойти с домашним компьютером.
Моё замечание было что Нельзя запоминать время в переменную. Это чревато.
П.С. Вот функцию, что дал Сергей, вызывайте перед открытием ордера - это будет надёжно.
Не будет - цикл не правильный.
Это? -
i >= 0
да и лишнее + _Period * 60
Неправильно.
При перезагрузке будет бяка.
Находить время закрытия последнего (ордера*) надо прямо перед открытием нового (ордера*).
Нужно в истории найти последнюю закрытую позицию и сравнить её время закрытия с временем открытия самого свежего бара + Period() * 60. Проще всё это оформить функцией.
Если ордер закрылся на текущем баре то, вернёт false. Вы же прибавили ещё бар к текущему
if(OrderCloseTime() <= Time[0] + _Period * 60)return(false);
Если ордер закрылся на текущем баре то, вернёт false. Вы же прибавили ещё бар к текущему
Запомнили бар на котором произошло закрытие, то есть запомнили текущий бар) всё на нём не открываем, пока новый бар не откроется. То что вы скинули, так там сперва нужно историю перерыть. У меня точно такое же условие по сути, но быстрее работает)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день! Нужно сделать такое условие:
Если ордер закрылся на текущем баре, то ордеров на данном баре больше не открывать.
Спасибо