Функция, возвращающая текущий TimeFrame

 

Всем привет!

Имеется ли в MQL4 стандартная функция, возвращающая название или порядковый номер таймфрейма для текущего окна финансового инструмента?

Существует параметр " int timeframe", который используется для задания периода графика в функциях типа iBars, iClose и пр., но функции, решающей обратную задачу, я так и не нашёл. Возможны два варианта: либо плохо искал, либо такой функции не существует в принципе.

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

Заранее спасибо за ответ!

 
 
ili4-87:

Всем привет!

Имеется ли в MQL4 стандартная функция, возвращающая название или порядковый номер таймфрейма для текущего окна финансового инструмента?

Существует параметр " int timeframe", который используется для задания периода графика в функциях типа iBars, iClose и пр., но функции, решающей обратную задачу, я так и не нашёл. Возможны два варианта: либо плохо искал, либо такой функции не существует в принципе.

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

Заранее спасибо за ответ!

Period()
ЗЫ: ))
 
sanyooooook:
ЗЫ: ))

Спасибо огромное! А то уже принялся за написание собственной пользовательской функции...))
 
ili4-87:

Спасибо огромное! А то уже принялся за написание собственной пользовательской функции...))
Ну и как, вышло что? Скинь сюда то что получилось, так чисто для себя... )
 
#define AMOUNT_PERIODS 9

int GetPeriod( int Depth )
{
  static int Periods[AMOUNT_PERIODS] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1};
  int i, Res;

  Res = Time[0] - Time[1];

  for (i = 1; i < Depth; i++)
    if (Time[i] - Time[i + 1] < Res)
      Res = Time[i] - Time[i + 1];

  Res /= 60;
  i = 0;

  while(i < AMOUNT_PERIODS)
  {
    if (Res < Periods[i])
      break;
    
    i++;
  }
  
  return(Periods[i - 1]);
}
 
Блин, да просто разницу между временем открытия 2х баров соседних посмотреть и все.
 
Techno:
Блин, да просто разницу между временем открытия 2х баров из прошлого посмотреть и все.
не хорошо получится если выберутся первый бар понедельника и последний пятницы
 
sanyooooook:
не хорошо получится если выберутся первый бар понедельника и последний пятницы
риск косяков всегда есть ))) вероятность мизерная что так случится, да и можно на случай некорректной разности взять другие бары для сравнения :)
 
Techno:
риск косяков всегда есть ))) вероятность мизерная что так случится, да и можно на случай некорректной разности взять другие бары для сравнения :)

Дыры случаются не только на выходных...

Надежную функцию написал выше.

 
hrenfx:

а в чем смысл вашей функции GetPeriod ?

высокотехнологичная ерунда ? зачем-то указывается размерность массива, для такого объявления она и не нужна это для красоты ?

тогда почему нет инициализации int i, Res; ? как-то не в едином стиле..

в общем косячная функция..

первый бар понедельника и последний пятницы при Depth < 2

или

можно попасть на два последовательных разрыва, когда левый разрыв попадает на Depth-1