Тимур Машнин

Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5


Скачать книгу

[i-1]))

      {

      return (false);

      }

      ObjectSetInteger (0,«Sell»+i, OBJPROP_COLOR, clrRed);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_ARROWCODE,234);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_WIDTH,2);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_ANCHOR, ANCHOR_LOWER);

      ObjectSetInteger (0,«Sell»+i, OBJPROP_HIDDEN, true);

      ObjectSetString (0,«Sell»+i, OBJPROP_TOOLTIP, close [i-1]);

      ObjectSetInteger (0,«Sell1»+i, OBJPROP_COLOR, clrRed);

      ObjectSetInteger (0,«Sell1»+i, OBJPROP_ARROWCODE,234);

      ObjectSetInteger (0,«Sell1»+i, OBJPROP_WIDTH,2);

      ObjectSetInteger (0,«Sell1»+i, OBJPROP_ANCHOR, ANCHOR_LOWER)

      ObjectSetInteger (0,«Sell1»+i, OBJPROP_HIDDEN, true);

      ObjectSetString (0,«Sell1»+i, OBJPROP_TOOLTIP, close [i-1]);

      }

      }

      Нумерация подокон идет сверху вниз в порядке отображения.

      Тип отображаемого объекта задается перечислением ENUM_OBJECT, которое можно посмотреть в справочнике.

      После добавления графических объектов, не забываем их удалять в функции обратного вызова OnDeinit (), используя функцию ObjectDelete:

      bool ObjectDelete (

      long chart_id, // chart identifier

      string name // object name

      );

      Или используя функцию ObjectsDeleteAll:

      int ObjectsDeleteAll (

      long chart_id, // chart identifier

      int sub_window=-1, // window index

      int type=-1 // object type

      );

      Помимо вышеупомянутых функций ObjectCreate, ObjectDelete и ObjectsDeleteAll, MQL5 предлагает набор функций для работы с графическими объектами: ObjectName, ObjectFind, ObjectGetTimeByValue, ObjectGetValueByTime, ObjectMove, ObjectsTotal, ObjectGetDouble, ObjectGetInteger, ObjectGetString, ObjectSetDouble, ObjectSetInteger, ObjectSetString, TextSetFont, TextOut, TextGetSize.

      Функции ObjectName, ObjectFind, ObjectGetTimeByValue, ObjectGetValueByTime, ObjectsTotal, ObjectGetDouble, ObjectGetInteger, ObjectGetString, TextGetSize – это функции возвращающие информацию.

      Функции ObjectSetDouble, ObjectSetInteger, ObjectSetString, TextSetFont – это функции устанавливающие свойства объекта.

      Функция ObjectMove перемещает объект в окне.

      Функция TextOut выводит текст в пиксельный массив для отображения объектом OBJ_BITMAP_LABEL или OBJ_BITMAP.

      После добавления графических объектов рекомендуется принудительно перерисовать график символа с помощью функции ChartRedraw:

      void ChartRedraw (

      long chart_id=0 // идентификатор графика

      );

      Функция ObjectCreate позволяет создавать программным способом те графические объекты, которые вы можете вручную нарисовать на графике символа, пользуясь панелью инструментов клиентского терминала.

      С помощью функции ObjectSetDouble устанавливаются такие свойства графического объекта, как OBJPROP_PRICE – изменение параметра price функции ObjectCreate, OBJPROP_LEVELVALUE – определение уровней для таких объектов, как инструменты Фиббоначи и Вилы Эндрюса, OBJPROP_SCALE – определение масштаба для таких объектов, как инструменты Ганна и Дуги Фибоначчи, OBJPROP_ANGLE – определение угла объекта, т.е. возможность повернуть объект, который изначально не имеет жесткой привязки, например, повернуть текст, OBJPROP_DEVIATION – определение отклонения для объекта Канал стандартного отклонения.

      Пример использования OBJPROP_PRICE:

      int OnCalculate (const int rates_total,

      const int prev_calculated,

      const datetime &time [],

      const double &open [],

      const double &high [],

      const double &low [],

      const double &close [],

      const long &tick_volume [],

      const long &volume [],

      const int &spread [])

      {

      // – —

      ArraySetAsSeries (time, true);

      ArraySetAsSeries (high, true);

      ArraySetAsSeries (low, true);

      ArraySetAsSeries (close, true);

      ObjectDelete (0,«Price»);

      if (!ObjectCreate (0,«Price», OBJ_HLINE,0,time [1],close [1]))

      {

      return (false);

      }

      ObjectSetInteger (0,«Price», OBJPROP_COLOR, clrGreen);

      ObjectSetInteger (0,«Price», OBJPROP_WIDTH,1);

      ObjectSetString (0,«Price», OBJPROP_TOOLTIP, close [1]);

      if (open [1]> close [1])

      ObjectSetDouble (0,«Price», OBJPROP_PRICE, low [1]);

      if (open [1] <close [1])

      ObjectSetDouble (0,«Price», OBJPROP_PRICE, high [1]);

      // – - return value of prev_calculated for next call

      return (rates_total);

      }

      //+ –