Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делись ссылками с других ресурсов. Теперь они имеют описание!
Александр
298
Александр 2009.02.12 00:48 
Здравствуйте. Мне нужно по прошествии определенного количества баров закрыть сделку, как это сделать не могу сообразить. Как сделать счетчик баров от определенной точки во времени.
Alexander
4033
Alexander 2009.02.12 00:58  

Есть функция

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

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

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

ivasiv.a
6
ivasiv.a 2012.11.04 18:10  
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

}

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

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