Помогите нужно посчитать бары

 
Здравствуйте. Мне нужно по прошествии определенного количества баров закрыть сделку, как это сделать не могу сообразить. Как сделать счетчик баров от определенной точки во времени.
 

Есть функция

int iBarShift(string symbol, int timeframe, datetime time, bool exact=false)
Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. 
Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, 
в зависимости от параметра exact, -1 или смещение ближайшего бара.

С помощью неё определите номер бара (смещение относительно текущего 0-го), на котором была открыта позиция.

В общем-то это и будет уже количество баров, прошедших с того момента.

 
004alex:
Здравствуйте. Мне нужно по прошествии определенного количества баров закрыть сделку, как это сделать не могу сообразить. Как сделать счетчик баров от определенной точки во времени.

 Если сделка уже открыта и ты хочешь ее закрыть через допустим 150 баров.

Находишь время открытия сделки через следующую функцию (просто пропиши ее у себя в роботе как отдельную фунцию):

int mn - номер меджика открытого ордера, в принципе можно и без него - тогда убери в функцие строчку   && OrderMagicNumber() == mn

string asset = "EURUSD";- торговый символ, например EURUSD

int timeframe = 30;- 30 минут например

double Last_OrderOpTime(int mn, string asset)   // ищет время открытия последнего ордера

               {
                  datetime open_timeLast = 0;
                  int ticketLast = 0;
                  for(int i= OrdersTotal()-1;i>=0;i--)
                  {
                     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
                    
                     if(open_timeLast < OrderOpenTime() && OrderMagicNumber() == mn &&  asset==OrderSymbol())
                     {
                        open_timeLast = OrderOpenTime();
                        ticketLast = OrderTicket() ;
                     }
                  }
                  if(open_timeLast==0) return(-1);
                  if( OrderTicket() != ticketLast ) OrderSelect( ticketLast , SELECT_BY_TICKET);
  
                  return(OrderOpenTime());//Last_OrderOpPr

               }     

Дальше закрываешь свой ордер

int MaxBar = 150; //количество свечей через сколько ты хочешь закрыть ордер

IF  (

     iBarShift( asset, timeframe, Last_OrderOpTime(mn,asset)) > MaxBar

    )

{

OrderClose

}

Решил поделиться, т.к. сам два дня искал, пока не разобрался, надеюсь будет полезно

 
Юзер  Dokass - бан на сутки за некропостинг.
Причина обращения: