Скачать MetaTrader 5

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

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

Есть функция

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

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

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

ivasiv.a
6
ivasiv.a  
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

}

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

Рустам
3597
Рустам  
Юзер  Dokass - бан на сутки за некропостинг.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий