Highlander9  

Всем доброго дня!
Есть проблема адаптации советника написанного в MQL4 в MQL5

В MQL4  достаточно понятно с функцией Open[] - она для текущего time frame возвращает значение open указанного в позиции бара

Компилятор MQL5  ругается на Open[] и требует ее определения

У кого-нибудь есть маленький пример как получить, например, значение open 3-го бара?

Vladimir Karputov  
Highlander9:

Всем доброго дня!
Есть проблема адаптации советника написанного в MQL4 в MQL5

В MQL4  достаточно понятно с функцией Open[] - она для текущего time frame возвращает значение open указанного в позиции бара

Компилятор MQL5  ругается на Open[] и требует ее определения

У кого-нибудь есть маленький пример как получить, например, значение open 3-го бара?

//+------------------------------------------------------------------+
//| Get Open for specified bar index                                 |
//+------------------------------------------------------------------+
double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   double Open[1];
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,Open);
   if(copied>0) open=Open[0];
   return(open);
  }

Параметр index - это как раз номер  искомого бара.

 

Более развёрнутый пример нужен? 

 

Добавлено:

причём в зависимости от потребностей Вы можете писать как:

double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)

 - в таком случае очень упрощается получение цен открытия бара на текущем символе и текущем таймфрейме,

а можно и так:

double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,const int index)

- такое нужно для запросов с другого символа/таймфрейма. 

Highlander9  
Vladimir Karputov:
//+------------------------------------------------------------------+
//| Get Open for specified bar index                                 |
//+------------------------------------------------------------------+
double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   double Open[1];
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,Open);
   if(copied>0) open=Open[0];
   return(open);
  }

Параметр index - это как раз номер  искомого бара.

 

Более развёрнутый пример нужен? 

 

Добавлено:

причём в зависимости от потребностей Вы можете писать как:

double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)

 - в таком случае очень упрощается получение цен открытия бара на текущем символе и текущем таймфрейме,

а можно и так:

double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,const int index)

- такое нужно для запросов с другого символа/таймфрейма. 

Спасибо!

Vladimir Karputov  
Highlander9:

Спасибо!

Обращайтесь :)
Vasiliy Pushkaryov  
Highlander9:

Всем доброго дня!
Есть проблема адаптации советника написанного в MQL4 в MQL5

В MQL4  достаточно понятно с функцией Open[] - она для текущего time frame возвращает значение open указанного в позиции бара

Компилятор MQL5  ругается на Open[] и требует ее определения

У кого-нибудь есть маленький пример как получить, например, значение open 3-го бара?

Есть еще несложная библиотека в кодобазе. Мне понравилась, довольно удобно.