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

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

СКАЧАТЬ style="font-size:15px;">      Функция 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);

      }

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      void OnDeinit (const int reason) {

      ObjectsDeleteAll (0, -1, -1);

      }

      В этом коде создается горизонтальный уровень, показывающий минимальную или максимальную цену предыдущего бара, в зависимости от того, является ли этот бар бычьим или медвежьим.

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

      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,«Line»);

      ObjectDelete (0,«Price»);

      if (!ObjectCreate (0,«Line», OBJ_VLINE,0,time [1],close [1]))

      {

      return (false);

      }

      ObjectSetInteger СКАЧАТЬ