Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что MQL5 способен создавать собственные графические инструменты?
Victor Demihov
618
Victor Demihov 2015.07.18 16:48 

 Нужно реализовать передачу требуемого ТФ в функцию, и чтоб этот ТФ в виде строки попадал в имя некой переменной. Покажу на примере.

Имеем функцию:

void DrawArrow (int fi_Number, datetime fdt_Time, double fd_Price)
{
   string objName[100];
   
   objName[fi_Number] = StringConcatenate (_Symbol, "_", ТУТ ДОЛЖНО БЫТЬ СТРОКОВОЕ ЗНАЧЕНИЕ ТФ ЗАДАННОЙ ДЛИНЫ, "_", "OBJ_ARROW_UP", fi_Number);
   Print ("objName: ", objName[fi_Number]);
   ObjectCreate (objName[fi_Number], OBJ_ARROW_UP, 0, fdt_Time, fd_Price);
   
   // Перерисуем объект
   WindowRedraw();
}

 На данный момент, функция DrawArrow не имеет входного параметра ТФ(таймфрейма), но будет. Думаю как это лучше реализовать. В других языках есть другие удобные способы. А тут приходится как-то крутится. В общем, я написал такой метод:

//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                             Получение строкового имени заданного ТФ                                                   |
//+---------------------------------------------------------------------------------------------------------------------------------------+
string DrawGrafics::GetTFName (ENUM_TIMEFRAMES TF)
{
   switch (TF)
   {
      case PERIOD_M1:
         return ("M1 ");   break;
      case PERIOD_M5:
         return ("M5 ");   break;
      case PERIOD_M15:
         return ("M15");   break;
      case PERIOD_M30:
         return ("M30");   break;
      case PERIOD_H1:
         return ("H1 ");   break;
      case PERIOD_H4:
         return ("H4 ");   break;
      case PERIOD_D1:
         return ("D1 ");   break;
      case PERIOD_W1:
         return ("W1 ");   break;
      case PERIOD_MN1:
         return ("MN1");   break;
      
      default: return ("CurrTF");
   }
}

 Он возвращает символьное значение ТФ, которые ему передаётся из ENUM'а. Но тут не стыкуется тот момент, что проще всего передавать в вызывающую функцию, т.е. void DrawArrow (int fi_Number, datetime fdt_Time, double fd_Price), например, _Period. Так вот этот _Period не принадлежит перечислению ENUM_TIMEFRAMES. Потому не выйдет таким образом это реализовать. Как быть?

Рустам
3602
Рустам 2015.07.18 19:49  

https://docs.mql4.com/ru/convert/enumtostring

 про брейки после ретурнов вапче не понял...

Алексей Тарабанов
7220
Алексей Тарабанов 2015.07.18 22:19  
FAQ:

 про брейки после ретурнов вапче не понял...

Береженого бог бережет
Alexey Viktorov
5175
Alexey Viktorov 2015.07.19 06:44  
shanty:

 Нужно реализовать передачу требуемого ТФ в функцию, и чтоб этот ТФ в виде строки попадал в имя некой переменной. Покажу на примере.

Имеем функцию:

 На данный момент, функция DrawArrow не имеет входного параметра ТФ(таймфрейма), но будет. Думаю как это лучше реализовать. В других языках есть другие удобные способы. А тут приходится как-то крутится. В общем, я написал такой метод:

 Он возвращает символьное значение ТФ, которые ему передаётся из ENUM'а. Но тут не стыкуется тот момент, что проще всего передавать в вызывающую функцию, т.е. void DrawArrow (int fi_Number, datetime fdt_Time, double fd_Price), например, _Period. Так вот этот _Period не принадлежит перечислению ENUM_TIMEFRAMES. Потому не выйдет таким образом это реализовать. Как быть?

 


string DrawGrafics::GetTFName (int TF)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий