Есть какая-то функция, чтобы вывела название периода в таком формате "М15" ?

 
Нужно в алерты вывести название периода.

Есть функция Period(), но она выводить период к количествах минут. А нужно название периода (М15).

Есть какое-то изящное решение, чтобы быстро преобразовать значение количества минут в название периода?

или только цикл свитч?
 
danminin:
Нужно в алерты вывести название периода.

Есть функция Period(), но она выводить период к количествах минут. А нужно название периода (М15).

Есть какое-то изящное решение, чтобы быстро преобразовать значение количества минут в название периода?

или только цикл свитч?

Есть функция автор KimIV.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование таймфрейма                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("Unknown Period");
  }
}
 
khorosh:

Есть функция автор KimIV.

спасибо.

все таки без свитча не обошлось.

 
danminin:

все таки без свитча не обошлось.

void OnStart()
  {
   ENUM_TIMEFRAMES period[]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
   for(int i=0;i<ArraySize(period);i++)
      printf("i = %d ( %s ) --> %s",i,EnumToString(period[i]),GetNameTF(period[i]));
  }
//+------------------------------------------------------------------+
string GetNameTF(ENUM_TIMEFRAMES TimeFrame)
  {
   string res[];
   if(StringSplit(EnumToString(TimeFrame),'_',res)!=2) return("Error");
   return(res[1]);
  }
//+------------------------------------------------------------------+


2019.08.06 09:12:33.022 tst EURUSD,H1: i = 8 ( PERIOD_MN1 ) --> MN1

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 7 ( PERIOD_W1 ) --> W1

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 6 ( PERIOD_D1 ) --> D1

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 5 ( PERIOD_H4 ) --> H4

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 4 ( PERIOD_H1 ) --> H1

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 3 ( PERIOD_M30 ) --> M30

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 2 ( PERIOD_M15 ) --> M15

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 1 ( PERIOD_M5 ) --> M5

2019.08.06 09:12:33.022 tst EURUSD,H1: i = 0 ( PERIOD_M1 ) --> M1

 
danminin:

спасибо.

все таки без свитча не обошлось.

StringSubstr(EnumToString(PERIOD_CURRENT),7);
StringSubstr(EnumToString(Period()),7)
StringSubstr(EnumToString(PERIOD_D1),7)

Надеюсь сможете из нескольких примеров понять как сделать нужное

 
Artyom Trishkin:
StringSubstr(EnumToString(Period()),7)

'Period' - parameter for EnumToString must be an enumeration tst.mq4 29 36

ошибка, так нужно:
Print(StringSubstr(EnumToString((ENUM_TIMEFRAMES)Period()),7)); 
 
Igor Makanu:
StringSubstr(EnumToString((ENUM_TIMEFRAMES)Period()),7)



о, всё. нашли идеальное решение. )

 
Igor Makanu:

'Period' - parameter for EnumToString must be an enumeration tst.mq4 29 36

ошибка, так нужно:
В MQL5 нормально. Там код писал...
 
Artyom Trishkin:
В MQL5 нормально. Там код писал...

проверил, действительно в MQL5 нет ошибки


аааа, дык в MQL5:   ENUM_TIMEFRAMES  Period();

а в MQL4 :  int  Period();

справка рулит! )))

 
danminin:

спасибо.

все таки без свитча не обошлось.

Можно и без свитча, но будет дороже по времени исполнения:

   ENUM_TIMEFRAMES eTF = PERIOD_M15;
   string sText = EnumToString(eTF);
   Print(StringSubstr(sText, StringFind(sText, "_") + 1));