OBJ_CHART

Объект "График".

ObjChart

Примечание

Объект типа "OBJ_CHART" не поддерживается (не отображается) при визуальном тестировании.

Координаты точки привязки задаются в пикселях. Можно выбрать угол привязки из перечисления ENUM_BASE_CORNER.

Для объекта "График" можно выбирать символ, период и масштаб, а также включать/отключать режим отображения шкалы цены и даты.

Пример

Следующий скрипт создает и перемещает на графике объект "График". Для создания и изменения свойств графического объекта написаны специальные функции, которые вы можете использовать "как есть" в своих собственных программах.

 

//--- описание
#property description "Скрипт создает объект \"График\"."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string           InpName="Chart";             // Имя объекта
input string           InpSymbol="EURUSD";          // Символ
input ENUM_TIMEFRAMES  InpPeriod=PERIOD_H1;         // Период
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER// Угол для привязки
input int              InpScale=2;                  // Масштаб
input bool             InpDateScale=true;           // Отображение шкалы времени
input bool             InpPriceScale=true;          // Отображение шкалы цены
input color            InpColor=clrRed;             // Цвет рамки при выделении
input ENUM_LINE_STYLE  InpStyle=STYLE_DASHDOTDOT;   // Стиль линии при выделении
input int              InpPointWidth=1;             // Размер точки для перемещений
input bool             InpBack=false;               // Объект на заднем плане
input bool             InpSelection=true;           // Выделить для перемещений
input bool             InpHidden=true;              // Скрыт в списке объектов
input long             InpZOrder=0;                 // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Создает объект "График"                                          |
//+------------------------------------------------------------------+
bool ObjectChartCreate(const long              chart_ID=0,               // ID графика
                       const string            name="Chart",             // имя объекта
                       const int               sub_window=0,             // номер подокна
                       const string            symbol="EURUSD",          // символ
                       const ENUM_TIMEFRAMES   period=PERIOD_H1,         // период
                       const int               x=0,                      // координата по оси X
                       const int               y=0,                      // координата по оси Y
                       const int               width=300,                // ширина
                       const int               height=200,               // высота
                       const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER// угол для привязки
                       const int               scale=2,                  // масштаб
                       const bool              date_scale=true,          // отображение шкалы времени
                       const bool              price_scale=true,         // отображение шкалы цены
                       const color             clr=clrRed,               // цвет рамки при выделении
                       const ENUM_LINE_STYLE   style=STYLE_SOLID,        // стиль линии при выделении
                       const int               point_width=1,            // размер точки перемещения
                       const bool              back=false,               // на заднем плане
                       const bool              selection=false,          // выделить для перемещений
                       const bool              hidden=true,              // скрыт в списке объектов
                       const long              z_order=0)                // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим объект "График"
   if(!ObjectCreate(chart_ID,name,OBJ_CHART,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": не удалось создать объект \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- установим координаты объекта
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим размер объекта
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим символ
   ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol);
//--- установим период
   ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period);
//--- установим масштаб
   ObjectSetInteger(chart_ID,name,OBJPROP_CHART_SCALE,scale);
//--- отобразим (true) или скроем (false) шкалу времени
   ObjectSetInteger(chart_ID,name,OBJPROP_DATE_SCALE,date_scale);
//--- отобразим (true) или скроем (false) шкалу цены
   ObjectSetInteger(chart_ID,name,OBJPROP_PRICE_SCALE,price_scale);
//--- установим цвет рамки при включенном режиме выделения объекта
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линии рамки при включенном режиме выделения объекта
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер точки привязки, с помощью которой можно перемещать объект
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Устанавливает символ и таймфрейм объекта "График"                |
//+------------------------------------------------------------------+
bool ObjectChartSetSymbolAndPeriod(const long            chart_ID=0,       // ID графика (не объекта)
                                   const string          name="Chart",     // имя объекта
                                   const string          symbol="EURUSD",  // символ
                                   const ENUM_TIMEFRAMES period=PERIOD_H1// таймфрейм
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- установим символ и таймфрейм объекта "График"
   if(!ObjectSetString(chart_ID,name,OBJPROP_SYMBOL,symbol))
     {
      Print(__FUNCTION__,
            ": не удалось установить символ для объекта \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_PERIOD,period))
     {
      Print(__FUNCTION__,
            ": не удалось установить период для объекта \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Перемещает объект "График"                                       |
//+------------------------------------------------------------------+
bool ObjectChartMove(const long   chart_ID=0,   // ID графика (не объекта)
                     const string name="Chart"// имя объекта
                     const int    x=0,          // координата по оси X
                     const int    y=0)          // координата по оси Y
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- переместим объект
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
     {
      Print(__FUNCTION__,
            ": не удалось переместить X-координату объекта \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
     {
      Print(__FUNCTION__,
            ": не удалось переместить Y-координату объекта \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Изменяет размер объекта "График"                                 |
//+------------------------------------------------------------------+
bool ObjectChartChangeSize(const long   chart_ID=0,   // ID графика (не объекта)
                           const string name="Chart"// имя объекта
                           const int    width=300,    // ширина
                           const int    height=200)   // высота
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- изменим размеры объекта
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
     {
      Print(__FUNCTION__,
            ": не удалось изменить ширину объекта \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
     {
      Print(__FUNCTION__,
            ": не удалось изменить высоту объекта \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Возвращает ID объекта "График"                                   |
//+------------------------------------------------------------------+
long ObjectChartGetID(const long   chart_ID=0,   // ID графика (не объекта)
                      const string name="Chart"// имя объекта
  {
//--- подготовим переменную для получения ID объекта "График"
   long id=-1;
//--- сбросим значение ошибки
   ResetLastError();
//--- получим ID
   if(!ObjectGetInteger(chart_ID,name,OBJPROP_CHART_ID,0,id))
     {
      Print(__FUNCTION__,
            ": не удалось получить ID объекта \"График\"! Код ошибки = ",GetLastError());
     }
//--- возврат результата
   return(id);
  }
//+------------------------------------------------------------------+
//| Удаляет объект "График"                                          |
//+------------------------------------------------------------------+
bool ObjectChartDelete(const long   chart_ID=0,   // ID графика (не объекта)
                       const string name="Chart"// имя объекта
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- удалим кнопку
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": не удалось удалить объект \"График\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- получим количество символов в "Обзоре рынка"
   int  symbols=SymbolsTotal(true);
//--- определим, есть ли символ с указанным именем в списке символов
   bool exist=false;
   for(int i=0;i<symbols;i++)
      if(InpSymbol==SymbolName(i,true))
        {
         exist=true;
         break;
        }
   if(!exist)
     {
      Print("Ошибка! Данный символ ",InpSymbol," не представлен в окне \"Обзор Рынка\"!");
      return;
     }
//--- проверка входных параметров на корректность
   if(InpScale<0 || InpScale>5)
     {
      Print("Ошибка! Некорректные значения входных параметров!");
      return;
     }
 
//--- размеры окна графика
   long x_distance;
   long y_distance;
//--- определим размеры окна
   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
     {
      Print("Не удалось получить ширину графика! Код ошибки = ",GetLastError());
      return;
     }
   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
     {
      Print("Не удалось получить высоту графика! Код ошибки = ",GetLastError());
      return;
     }
//--- установим координаты объекта "График" и его размер
   int x=(int)x_distance/16;
   int y=(int)y_distance/16;
   int x_size=(int)x_distance*7/16;
   int y_size=(int)y_distance*7/16;
//--- создадим объект "График"
   if(!ObjectChartCreate(0,InpName,0,InpSymbol,InpPeriod,x,y,x_size,y_size,InpCorner,InpScale,InpDateScale,
      InpPriceScale,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- перерисуем график и подождем 1 секунду
   ChartRedraw();
   Sleep(1000);
//--- растянем объект "График"
   int steps=(int)MathMin(x_distance*7/16,y_distance*7/16);
   for(int i=0;i<steps;i++)
     {
      //--- изменим размеры
      x_size+=1;
      y_size+=1;
      if(!ObjectChartChangeSize(0,InpName,x_size,y_size))
         return;
      //--- проверим факт принудительного завершения скрипта
      if(IsStopped())
         return;
      //--- перерисуем график и подождем 0.01 секунды
      ChartRedraw();
      Sleep(10);
     }
//--- задержка в полсекунды
   Sleep(500);
//--- изменим таймфрейм графика
   if(!ObjectChartSetSymbolAndPeriod(0,InpName,InpSymbol,PERIOD_M1))
      return;
   ChartRedraw();
//--- задержка в три секунды
   Sleep(3000);
//--- удалим объект
   ObjectChartDelete(0,InpName);
   ChartRedraw();
//--- подождем 1 секунду
   Sleep(1000);
//---
  }