Выбирайте любое решение по своему вкусу
//+----------------------------------------------------------------------------+ //| Возвращает номер бара закрытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oct; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oct<OrderCloseTime()) oct=OrderCloseTime(); } } } } } } return(iBarShift(sym, tf, oct, True)); } //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); } //+----------------------------------------------------------------------------+ //| Возвращает время открытия последней позиций. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ datetime TimeOpenLastPos(string sym="", int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(oot); } //+----------------------------------------------------------------------------+ //| Возвращает количество секунд после закрытия последней позиций. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ datetime SecondsAfterCloseLastPos(string sym="", int op=-1, int mn=-1) { datetime oct; int i, k=HistoryTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oct<OrderCloseTime()) oct=OrderCloseTime(); } } } } } } return(CurTime()-oct); } //+----------------------------------------------------------------------------+ //| Возвращает количество секунд после открытия последней позиций. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ datetime SecondsAfterOpenLastPos(string sym="", int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(CurTime()-oot); }
В програмировании не силён. Интересен этот вариант:
"Возвращает номер бара открытия последней позиции или -1. "
Но не понятно, ведь при появлении новой свечи, номерация смещаетя?
Функция возвращает смещение бара, которому принадлежит указанное время.
А можно пример как это использовать?
if (Close[1]>Open[1] && OrdersTotal()==0 && K=1) {OrderSend(BUY);K=0;}
if ( iBarShift (NULL, PERIOD_H4, oot) ==4 ) { K=1;} - непонятно как применить?????
"Возвращает номер бара открытия последней позиции или -1. "
Но не понятно, ведь при появлении новой свечи, номерация смещаетя?
Функция возвращает смещение бара, которому принадлежит указанное время.
А можно пример как это использовать?
if (Close[1]>Open[1] && OrdersTotal()==0 && K=1) {OrderSend(BUY);K=0;}
if ( iBarShift (NULL, PERIOD_H4, oot) ==4 ) { K=1;} - непонятно как применить?????
Для создания возможности одного открытия на одном баре я использую такое условие
if (NumberOfBarOpenLastPos()>0)
Это означает, что следующее открытие станет возможным, когда предыдущее открытие уйдёт за пределы текущего бара. Не знаю, в курсе Вы или нет, на всякий случай скажу, что нумерация баров выполняется справа налево. Текущий бар является нулевым, предыдущий бар является первым, предпредыдущий - вторым и т.д.
Как я понял из первого поста, Вам нужно сделать одно открытие на 4 (четыре) бара. Применительно к предлагаемой мной функции используйте такое условие
if (NumberOfBarOpenLastPos()>3)
Это более оптимально для меня, спасибо.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
график 4H
if (Close[1]>Open[1] && OrdersTotal()==0 && K=1) {OrderSend(BUY);K=0;}
-ордер открывается необязательно с началом новой свечи;
-сработал стоп или тейк, а условие ещё активно;
-Надо чтоб прошло ровно 4 (N) свечи для разрешения открывать новую
сделку (K=1) на новый сигнал с появлением новой свечи.
может существуют какие-нибудь простые решения.