Константы объектов

Предусмотрено 44 графических объекта, которые можно создавать и отображать на ценовом графике. Все константы для работы с объектами разбиты на 9 групп:

  • Типы объектов – идентификаторы графических объектов;
  • Свойства объектов – работа со свойствами графических объектов;
  • Способы привязки объектов – константы позиционирования объектов на графике;
  • Угол привязки – позволяет установить угла графика, относительно которого  производится позиционирование объекта в пикселях;
  • Видимость объектов – задание таймфреймов, на которых объект является видимым;
  • Уровни волн Эллиотта – градация волновой разметки;
  • Объекты Ганна – константы тренда для веера Ганна и сетки Ганна;
  • Набор Web-цветов – константы предопределенных Web-цветов;
  • Wingdings – коды символов шрифта Wingdings.

Типы объектов

При создании графического объекта функцией ObjectCreate() необходимо указать тип создаваемого объекта, который может принимать одно из значений перечисления ENUM_OBJECT. Дальнейшие уточнения свойств созданного объекта возможно с помощью функций по работе с графическими объектами.

ENUM_OBJECT

Идентификатор

 

Описание

OBJ_VLINE

vertical_line

Вертикальная линия

OBJ_HLINE

horizonal_line

Горизонтальная линия

OBJ_TREND

trend_line

Трендовая линия

OBJ_TRENDBYANGLE

trend_line)by_angle

Трендовая линия по углу

OBJ_CYCLES

cycle_lines

Циклические линии

OBJ_ARROWED_LINE

arrowed_line

Объект «Линия со стрелкой»

OBJ_CHANNEL

equidistance_channel

Равноудаленный канал

OBJ_STDDEVCHANNEL

stddeviation_channel

Канал стандартного отклонения

OBJ_REGRESSION

regression_channel

Канал на линейной регрессии

OBJ_PITCHFORK

andrewspitchfork

Вилы Эндрюса

OBJ_GANNLINE

gann_line

Линия Ганна

OBJ_GANNFAN

gann_fan

Веер Ганна

OBJ_GANNGRID

gann_grid

Сетка Ганна

OBJ_FIBO

fibonacci_levels

Уровни Фибоначчи

OBJ_FIBOTIMES

fibonacci_time_zones

Временные зоны Фибоначчи

OBJ_FIBOFAN

fibo_fan

Веер Фибоначчи

OBJ_FIBOARC

fibo_arc

Дуги Фибоначчи

OBJ_FIBOCHANNEL

fibo_channel

Канал Фибоначчи

OBJ_EXPANSION

fibo_expansion

Расширение Фибоначчи

OBJ_ELLIOTWAVE5

elliot_impuls

5-волновка Эллиота

OBJ_ELLIOTWAVE3

elliot_correction

3-волновка Эллиота

OBJ_RECTANGLE

rectangle

Прямоугольник

OBJ_TRIANGLE

triangle

Треугольник

OBJ_ELLIPSE

ellipse

Эллипс

OBJ_ARROW_THUMB_UP

THUMB_UP

Знак «Хорошо» (большой палец вверх)

OBJ_ARROW_THUMB_DOWN

THUMB_DOWN

Знак «Плохо» (большой палец вниз)

OBJ_ARROW_UP

arrow_up

Знак «Стрелка вверх»

OBJ_ARROW_DOWN

arrow_down

Знак «Стрелка вниз»

OBJ_ARROW_STOP

stop_signal

Знак «Стоп»

OBJ_ARROW_CHECK

check_signal

Знак «Птичка» (галка)

OBJ_ARROW_LEFT_PRICE

left_price_label

Левая ценовая метка

OBJ_ARROW_RIGHT_PRICE

right_price_label

Правая ценовая метка

OBJ_ARROW_BUY

buy_sign_icon

Знак «Buy»

OBJ_ARROW_SELL

sell_sign_icon

Знак «Sell»

OBJ_ARROW

arrow_symbol

Объект «Стрелка»

OBJ_TEXT

text_object

Объект «Текст»

OBJ_LABEL

label_object

Объект «Текстовая метка»

OBJ_BUTTON

button_object

Объект «Кнопка»

OBJ_CHART

chart_object

Объект «График»

OBJ_BITMAP

picture_object

Объект «Рисунок»

OBJ_BITMAP_LABEL

bitmap_object

Объект «Графическая метка»

OBJ_EDIT

edit_object

Объект «Поле ввода»

OBJ_EVENT

obj_event

Объект «Событие», соответствующий событию в экономическом календаре

OBJ_RECTANGLE_LABEL

rectangle_label

Объект «Прямоугольная метка»для создания и оформления пользовательского графического интерфейса.

Свойства объектов

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

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

Объект

Идентификатор

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Да

Да

Да

Label

OBJ_LABEL

Да

Да (только для чтения)

Да

Да

Да

Button

OBJ_BUTTON

Да

Да

Да

Bitmap

OBJ_BITMAP

Да (только для чтения)

Да

Да

Bitmap Label

OBJ_BITMAP_LABEL

Да

Да (только для чтения)

Да

Да

Edit

OBJ_EDIT

Да

Да

Да

Rectangle Label

OBJ_RECTANGLE_LABEL

Да

Да

Да

В таблице использованы следующие обозначения:

  • X/Y – координаты точки привязки задаются в пикселях относительно одного из углов графика;
  • Width/Height – объекты имеет ширину и высоту. Если указано «только для чтения», то это означает, что значения ширины и высоты вычисляются только после отрисовки объекта на графике;
  • Date/Price – координаты точки привязки задаются парой дата/цена;
  • OBJPROP_CORNER – задаёт угол графика, относительно которого указываются координаты точки привязки. Может быть одним из 4-х значений перечисления ENUM_BASE_CORNER;
  • OBJPROP_ANCHOR – задаёт положение точки привязки в самом объекте, и может быть одним из 9-ти значений перечисления ENUM_ANCHOR_POINT. Именно от этой точки до выбранного угла графика указываются координаты в пикселях;
  • OBJPROP_ANGLE – задаёт угол поворота объекта против часовой стрелки.

Функции, задающие свойства графических объектов, а также операции создания ObjectCreate() и перемещения ObjectMove() объектов на графике фактически служат для отправки команд графику. При успешном выполнении этих функций команда попадает в общую очередь событий графика. Визуальное изменение свойств графических объектов производится в процессе обработки очереди событий данного графика.

По этой причине не следует ожидать немедленного визуального обновления графических объектов после вызова данных функций. В общем случае обновление графических объектов на чарте производится терминалом автоматически по событиям изменения — поступление новой котировки, изменения размера окна графика и т.д. Для принудительного обновления графических объектов используйте команду на перерисовку графика ChartRedraw().

Для функций ObjectSetInteger() и ObjectGetInteger()

ENUM_OBJECT_PROPERTY_INTEGER

Идентификатор

Описание

Тип свойства

OBJPROP_COLOR

Цвет

color

OBJPROP_STYLE

Стиль

ENUM_LINE_STYLE

OBJPROP_WIDTH

Толщина линии

int

OBJPROP_BACK

Объект на заднем плане

bool

OBJPROP_ZORDER

Приоритет графического объекта на получение события нажатия мышки на графике (CHARTEVENT_CLICK). По умолчанию при создании значение выставляется равным нулю, но при необходимости можно повысить приоритет. При наложении объектов друг на друга событие CHARTEVENT_CLICK получит только один объект, чей приоритет выше остальных.

long

OBJPROP_FILL

Заливка объекта цветом (для OBJ_RECTANGLE, OBJ_TRIANGLE, OBJ_ELLIPSE, OBJ_CHANNEL, OBJ_STDDEVCHANNEL, OBJ_REGRESSION)

bool

OBJPROP_HIDDEN

Запрет на показ имени графического объекта в списке объектов из меню терминала «Графики» — «Объекты» — «Список объектов». Значение true позволяет скрыть ненужный для пользователя объект из списка. По умолчанию true устанавливается для объектов, которые отображают события календаря, историю торговли, а также для созданных из MQL5-программы. Для того чтобы увидеть такие графические объекты и получить доступ к их свойствам, нужно нажать кнопку «Все» в окне «Список объектов».

bool

OBJPROP_SELECTED

Выделенность объекта

bool

OBJPROP_READONLY

Возможность редактирования текста в объекте Edit

bool

OBJPROP_TYPE

Тип объекта

ENUM_OBJECT   r/o

OBJPROP_TIME

Координата времени

datetime   модификатор=номер точки привязки

OBJPROP_SELECTABLE

Доступность объекта

bool

OBJPROP_CREATETIME

Время создания объекта

datetime    r/o

OBJPROP_LEVELS

Количество уровней

int

OBJPROP_LEVELCOLOR

Цвет линии-уровня

color   модификатор=номер уровня

OBJPROP_LEVELSTYLE

Стиль линии-уровня

ENUM_LINE_STYLE модификатор=номер уровня

OBJPROP_LEVELWIDTH

Толщина линии-уровня

int      модификатор=номер уровня

OBJPROP_ALIGN

Горизонтальное выравнивание текста в объекте «Поле ввода» (OBJ_EDIT)

ENUM_ALIGN_MODE

OBJPROP_FONTSIZE

Размер шрифта

int

OBJPROP_RAY_LEFT

Луч продолжается влево

bool

OBJPROP_RAY_RIGHT

Луч продолжается вправо

bool

OBJPROP_RAY

Вертикальная линия продолжается на все окна графика

bool

OBJPROP_ELLIPSE

Отображение полного эллипса для объекта «Дуги Фибоначчи» (OBJ_FIBOARC)

bool

OBJPROP_ARROWCODE

Код стрелки для объекта «Стрелка»

char

OBJPROP_TIMEFRAMES

Видимость объекта на таймфреймах

набор флагов flags

OBJPROP_ANCHOR

Положение точки привязки графического объекта

ENUM_ARROW_ANCHOR (для OBJ_ARROW),

ENUM_ANCHOR_POINT (для OBJ_LABEL, OBJ_BITMAP_LABEL и OBJ_TEXT)

OBJPROP_XDISTANCE

Дистанция в пикселях по оси X от угла привязки

int

OBJPROP_YDISTANCE

Дистанция в пикселях по оси Y от угла привязки

int

OBJPROP_DIRECTION

Тренд объекта Ганна

ENUM_GANN_DIRECTION

OBJPROP_DEGREE

Уровень волновой разметки Эллиота

ENUM_ELLIOT_WAVE_DEGREE

OBJPROP_DRAWLINES

Отображение линий для волновой разметки Эллиота

bool

OBJPROP_STATE

Состояние кнопки (Нажата/Отжата)

bool

OBJPROP_CHART_ID

Идентификатор объекта «График» (OBJ_CHART). Позволяет работать со свойствами этого объекта как с обычным графиком с помощью функций из раздела Операции с графиками, но есть некоторые исключения.

long  r/o

OBJPROP_XSIZE

Ширина объекта по оси X в пикселях. Задается для объектов OBJ_LABEL (read only), OBJ_BUTTON, OBJ_CHART, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL.

int

OBJPROP_YSIZE

Высота объекта по оси Y в пикселях. Задается для объектов OBJ_LABEL (read only), OBJ_BUTTON, OBJ_CHART, OBJ_BITMAP, OBJ_BITMAP_LABEL, OBJ_EDIT, OBJ_RECTANGLE_LABEL.

int

OBJPROP_XOFFSET

X-координата левого верхнего угла прямоугольной области видимости  в графических объектах «Графическая метка» и «Рисунок» (OBJ_BITMAP_LABEL и OBJ_BITMAP). Значение задается в пикселях относительного верхнего левого угла исходного изображения.

int

OBJPROP_YOFFSET

Y-координата левого верхнего угла прямоугольной области видимости  в графических объектах «Графическая метка» и «Рисунок» (OBJ_BITMAP_LABEL и OBJ_BITMAP). Значение задается в пикселях относительного верхнего левого угла исходного изображения.

int

OBJPROP_PERIOD

Период для объекта «График»

ENUM_TIMEFRAMES

OBJPROP_DATE_SCALE

Признак отображения шкалы времени для объекта «График»

bool

OBJPROP_PRICE_SCALE

Признак отображения ценовой шкалы для объекта «График»

bool

OBJPROP_CHART_SCALE

Масштаб для объекта «График»

int   значение в диапазоне 0–5

OBJPROP_BGCOLOR

Цвет фона для OBJ_EDIT, OBJ_BUTTON, OBJ_RECTANGLE_LABEL

color

OBJPROP_CORNER

Угол графика для привязки графического объекта

ENUM_BASE_CORNER

OBJPROP_BORDER_TYPE

Тип рамки для объекта «Прямоугольная рамка»

ENUM_BORDER_TYPE

OBJPROP_BORDER_COLOR

Цвет рамки для объекта OBJ_EDIT и OBJ_BUTTON

color

При применении операций с графиками для объекта «График»  (OBJ_CHART) действуют следующие ограничения:

  • нельзя закрыть с помощью ChartClose();
  • нельзя поменять символ/период с помощью функции ChartSetSymbolPeriod();
  • не работают свойства CHART_SCALE, CHART_BRING_TO_TOP, CHART_SHOW_DATE_SCALE и CHART_SHOW_PRICE_SCALE (ENUM_CHART_PROPERTY_INTEGER).

 

Для объектов OBJ_BITMAP_LABEL и OBJ_BITMAP программным путем можно установить специальный режим показа изображения. В этом режиме показывается только та часть исходного изображения, на которую накладывается прямоугольная область видимости, остальная часть картинки становится невидимой. Размеры области видимости необходимо установить с помощью свойств OBJPROP_XSIZE и OBJPROP_YSIZE. Область видимости можно «перемещать» только в пределах исходного изображения с помощью  свойств OBJPROP_XOFFSET и OBJPROP_YOFFSET.

 

Для объектов с фиксированными размерами: OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT и OBJ_CHART свойства OBJPROP_XDISTANCE и OBJPROP_YDISTANCE задают положение левой верхней точки объекта относительно угла графика (OBJPROP_CORNER), от которого будут отсчитываться координаты X и Y в пикселях.

 

Для функций ObjectSetDouble() и ObjectGetDouble()

ENUM_OBJECT_PROPERTY_DOUBLE

Идентификатор

Описание

Тип свойства

OBJPROP_PRICE

Координата цены

double    модификатор=номер точки привязки

OBJPROP_LEVELVALUE

Значение уровня

double    модификатор=номер уровня

OBJPROP_SCALE

Масштаб (свойство объектов Ганна и объекта «Дуги Фибоначчи»)

double

OBJPROP_ANGLE

Угол. Для объектов с еще не заданным углом, созданных из программы, значение равно EMPTY_VALUE

double

OBJPROP_DEVIATION

Отклонение для канала стандартного отклонения

double

 

Для функций ObjectSetString() и ObjectGetString()

ENUM_OBJECT_PROPERTY_STRING

Идентификатор

Описание

Тип свойства

OBJPROP_NAME

Имя объекта

string

OBJPROP_TEXT

Описание объекта (текст, содержащийся в объекте)

string

OBJPROP_TOOLTIP

Текст всплывающей подсказки. Если свойство не задано, то показывается подсказка, автоматически сформированная терминалом. Можно  отключить показ подсказки, установив для нее значение «\n» (перевод строки)

string

OBJPROP_LEVELTEXT

Описание уровня

string    модификатор=номер уровня

OBJPROP_FONT

Шрифт

string

OBJPROP_BMPFILE

Имя BMP-файла для объекта «Графическая метка».

string   модификатор: 0-состояние ON, 1-состояние OFF

OBJPROP_SYMBOL

Символ для объекта «График»

string

 

Для объекта OBJ_RECTANGLE_LABEL («Прямоугольная метка») можно задать один из трех видов отображения, которым соответствуют значения из перечисления ENUM_BORDER_TYPE.

ENUM_BORDER_TYPE

Идентификатор

Описание

BORDER_FLAT

Плоский вид

BORDER_RAISED

Выпуклый вид

BORDER_SUNKEN

Вогнутый вид

 

Для объекта OBJ_EDIT («Поле ввода») и для функции ChartScreenShot() можно указать тип выравнивания по горизонтали с помощью значений перечисления ENUM_ALIGN_MODE.

ENUM_ALIGN_MODE

Идентификатор

Описание

ALIGN_LEFT

Выравнивание по левой границе

ALIGN_CENTER

Выравнивание по центру (только для объекта «Поле ввода»)

ALIGN_RIGHT

Выравнивание по правой границе

Пример:

#define UP "\x0431"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
string label_name="my_OBJ_LABEL_object";
if(ObjectFind(0,label_name)<0)
{
Print("Object ",label_name," not found. Error code = ",GetLastError());
//--- создадим объект Label
ObjectCreate(0,label_name,OBJ_LABEL,0,0,0); 
//--- установим координату X
ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,200);
//--- установим координату Y
ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,300);
//--- зададим цвет текста
ObjectSetInteger(0,label_name,OBJPROP_COLOR,clrWhite);
//--- установим текст для объекта Label
ObjectSetString(0,label_name,OBJPROP_TEXT,UP);
//--- установим шрифт надписи
ObjectSetString(0,label_name,OBJPROP_FONT,"Wingdings");
//--- установим размер шрифта
ObjectSetInteger(0,label_name,OBJPROP_FONTSIZE,10);
//--- повернем на 45 градусов по часовой стрелке
ObjectSetDouble(0,label_name,OBJPROP_ANGLE,-45);
//--- запретим выделение объекта мышкой
ObjectSetInteger(0,label_name,OBJPROP_SELECTABLE,false);
//--- отрисуем на графике
ChartRedraw(0); 
}
}

 

Способы привязки объектов

Графические объекты Text, Label, Bitmap и Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP и OBJ_BITMAP_LABEL) могут иметь один из 9 различных способов привязки своих координат, задаваемых свойством OBJPROP_ANCHOR.

Объект

Идентификатор

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Да

Да

Да

Label

OBJ_LABEL

Да

Да (только для чтения)

Да

Да

Да

Button

OBJ_BUTTON

Да

Да

Да

Bitmap

OBJ_BITMAP

Да (только для чтения)

Да

Да

Bitmap Label

OBJ_BITMAP_LABEL

Да

Да (только для чтения)

Да

Да

Edit

OBJ_EDIT

Да

Да

Да

Rectangle Label

OBJ_RECTANGLE_LABEL

Да

Да

Да

В таблице использованы следующие обозначения:

  • X/Y – координаты точки привязки задаются в пикселях относительно одного из углов графика;
  • Width/Height – объекты имеет ширину и высоту. Если указано «только для чтения», то это означает, что значения ширины и высоты вычисляются только после отрисовки объекта на графике;
  • Date/Price – координаты точки привязки задаются парой дата/цена;
  • OBJPROP_CORNER – задаёт угол графика, относительно которого указываются координаты точки привязки. Может быть одним из 4-х значений перечисления ENUM_BASE_CORNER;
  • OBJPROP_ANCHOR – задаёт положение точки привязки в самом объекте, и может быть одним из 9-ти значений перечисления ENUM_ANCHOR_POINT. Именно от этой точки до выбранного угла графика указываются координаты в пикселях;
  • OBJPROP_ANGLE – задаёт угол поворота объекта против часовой стрелки.

Указать нужный вариант можно с помощью функции ObjectSetInteger(handle_графика, имя_объекта, OBJPROP_ANCHOR, способ_привязки), где способ_привязки — одно из значений перечисления ENUM_ANCHOR_POINT.

ENUM_ANCHOR_POINT

Идентификатор

Описание

ANCHOR_LEFT_UPPER

Точка привязки в левом верхнем углу

ANCHOR_LEFT

Точка привязки слева по центру

ANCHOR_LEFT_LOWER

Точка привязки в левом нижнем углу

ANCHOR_LOWER

Точка привязки снизу по центру

ANCHOR_RIGHT_LOWER

Точка привязки в правом нижнем углу

ANCHOR_RIGHT

Точка привязки справа по центру

ANCHOR_RIGHT_UPPER

Точка привязки в правом верхнем углу

ANCHOR_UPPER

Точка привязки сверху по центру

ANCHOR_CENTER

Точка привязки строго по центру объекта

Объекты OBJ_BUTTON, OBJ_RECTANGLE_LABEL, OBJ_EDIT и OBJ_CHART имеют фиксированную точку привязки в левом верхнем углу (ANCHOR_LEFT_UPPER).

Пример:

 string text_name="my_OBJ_TEXT_object";
if(ObjectFind(0,text_name)<0)
{
Print("Object ",text_name," not found. Error code = ",GetLastError());
//--- получим максимальную цену графика
double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
//--- создадим объект Label
ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
//--- зададим цвет текста
ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
//--- зададим цвет фона
ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
//--- установим текст для объекта Label
ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
//--- установим шрифт надписи
ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
//--- установим размер шрифта
ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
//--- установим привязку к правому верхнему углу
ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
//--- повернем на 90 градусов против часовой стрелке
ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);
//--- запретим выделение объекта мышкой
ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
//--- отрисуем на графике
ChartRedraw(0);
}

Графические объекты Arrow (OBJ_ARROW) имеют только 2 способа привязки своих координат. Идентификаторы перечислены в ENUM_ARROW_ANCHOR.

ENUM_ARROW_ANCHOR

Идентификатор

Описание

ANCHOR_TOP

Точка привязки для стрелки находится сверху

ANCHOR_BOTTOM

Точка привязки для стрелки находится внизу

Пример:

void OnStart()
{
//--- служебные массивы
double Ups[],Downs[];
datetime Time[];
//--- установим для массивов признак таймсерии
ArraySetAsSeries(Ups,true);
ArraySetAsSeries(Downs,true);
ArraySetAsSeries(Time,true);
//--- создадим хэндл индикатора Fractals
int FractalsHandle=iFractals(NULL,0);
Print("FractalsHandle = ",FractalsHandle);
//--- сбросим код ошибки
ResetLastError();
//--- попытаемся скопировать значения индикатора
int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
if(copied<=0)
{
Print("Не удалось скопировать верхние фракталы. Error = ",GetLastError());
return;
}
ResetLastError();
//--- попытаемся скопировать значения индикатора
copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
if(copied<=0)
{
Print("Не удалось скопировать нижние фракталы. Error = ",GetLastError());
return;
}
ResetLastError();
//--- скопируем таймсерию,содержащую время открытия последних 1000 баров
copied=CopyTime(NULL,0,0,1000,Time);
if(copied<=0)
{
Print("Не удалось скопировать времена открытия за последние 1000 баров");
return;
}
int upcounter=0,downcounter=0; // будем в них подсчитывать количество стрелок
bool created;// будем получать результат попытки создания объекта
for(int i=2;i<copied;i++)// пробежимся по значениям индикатора iFractals
{
if(Ups[i]!=EMPTY_VALUE)// нашли верхний фрактал
{
if(upcounter<10)// создаем не более 10 объектов "вверх"
{
//--- попробуем создать объект "вверх"
created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
if(created)// если создался - сделаем ему тюнинг
{
//--- точка привязки снизу, чтобы не наезжать на бар
ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
//--- последний штрих - покрасим
ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
upcounter++;
}
}
}
if(Downs[i]!=EMPTY_VALUE)// нашли нижний фрактал 
{
if(downcounter<10)// создаем не более 10 объектов "вниз"
{
//--- попробуем создать объект "вниз"
created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
if(created)// если создался - сделаем ему тюнинг
{
//--- точка привязки сверху, чтобы не наезжать на бар
ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
//--- последний штрих - покрасим
ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
downcounter++;
}
}
}
}
}

После выполнения скрипта график будет выглядеть примерно как на этом рисунке.

Угол графика, к которому привязан объект

Существует ряд графических объектов, для которых можно задавать угол графика, относительно которого указываются координаты в пикселях. Это следующие типы объектов (в скобках указаны идентификаторы типа объекта):

  • Label (OBJ_LABEL); Текстовая метка
  • Button (OBJ_BUTTON); Кнопка
  • Bitmap Label (OBJ_BITMAP_LABEL); Графическая метка
  • Edit (OBJ_EDIT); Поле ввода
  • Rectangle Label (OBJ_RECTANGLE_LABEL). Прямоугольная метка

Объект

Идентификатор

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

Да

Да

Да

Label

OBJ_LABEL

Да

Да (только для чтения)

Да

Да

Да

Button

OBJ_BUTTON

Да

Да

Да

Bitmap

OBJ_BITMAP

Да (только для чтения)

Да

Да

Bitmap Label

OBJ_BITMAP_LABEL

Да

Да (только для чтения)

Да

Да

Edit

OBJ_EDIT

Да

Да

Да

Rectangle Label

OBJ_RECTANGLE_LABEL

Да

Да

Да

В таблице использованы следующие обозначения:

  • X/Y – координаты точки привязки задаются в пикселях относительно одного из углов графика;
  • Width/Height – объекты имеет ширину и высоту. Если указано «только для чтения», то это означает, что значения ширины и высоты вычисляются только после отрисовки объекта на графике;
  • Date/Price – координаты точки привязки задаются парой дата/цена;
  • OBJPROP_CORNER – задаёт угол графика, относительно которого указываются координаты точки привязки. Может быть одним из 4-х значений перечисления ENUM_BASE_CORNER;
  • OBJPROP_ANCHOR – задаёт положение точки привязки в самом объекте, и может быть одним из 9-ти значений перечисления ENUM_ANCHOR_POINT. Именно от этой точки до выбранного угла графика указываются координаты в пикселях;
  • OBJPROP_ANGLE – задаёт угол поворота объекта против часовой стрелки.

Для того чтобы указать угол графика, от которого будут отсчитываться координаты X и Y в пикселях, необходимо воспользоваться функцией ObjectSetInteger(chartID, name, OBJPROP_CORNER, chart_corner), где:

  • chartID — идентификатор графика;
  • name – имя графического объекта;
  • OBJPROP_CORNER – идентификатор свойства для задания угла привязки;
  • chart_corner – требуемый угол графика, может принимать одно из значений перечисления ENUM_BASE_CORNER.

ENUM_BASE_CORNER

Идентификатор

Описание

CORNER_LEFT_UPPER

Центр координат в левом верхнем углу графика

CORNER_LEFT_LOWER

Центр координат в левом нижнем углу графика

CORNER_RIGHT_LOWER

Центр координат в правом нижнем углу графика

CORNER_RIGHT_UPPER

Центр координат в правом верхнем углу графика

Пример:

void CreateLabel(long chart_id,
string name,
int chart_corner,
int anchor_point,
string text_label,
int x_ord,
int y_ord)
{
//---
if(ObjectCreate(chart_id,name,OBJ_LABEL,0,0,0))
{
ObjectSetInteger(chart_id,name,OBJPROP_CORNER,chart_corner);
ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,anchor_point);
ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_ord);
ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_ord);
ObjectSetString(chart_id,name,OBJPROP_TEXT,text_label);
}
else
Print("Не удалось создать объект OBJ_LABEL ",name,", Код ошибки = ", GetLastError());
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
int width=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
string arrows[4]={"LEFT_UPPER","RIGHT_UPPER","RIGHT_LOWER","LEFT_LOWER"};
CreateLabel(0,arrows[0],CORNER_LEFT_UPPER,ANCHOR_LEFT_UPPER,arrows[0],50,50);
CreateLabel(0,arrows[1],CORNER_RIGHT_UPPER,ANCHOR_RIGHT_UPPER,arrows[1],50,50);
CreateLabel(0,arrows[2],CORNER_RIGHT_LOWER,ANCHOR_RIGHT_LOWER,arrows[2],50,50);
CreateLabel(0,arrows[3],CORNER_LEFT_LOWER,ANCHOR_LEFT_LOWER,arrows[3],50,50);
}

Видимость объектов

Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger().

Константа

Значение

Описание

OBJ_NO_PERIODS

0

Объект не показывается ни на одном таймфрейме

OBJ_PERIOD_M1

0x00000001

Объект рисуется на 1-минутных графиках

OBJ_PERIOD_M2

0x00000002

Объект рисуется на 2-минутных графиках

OBJ_PERIOD_M3

0x00000004

Объект рисуется на 3-минутных графиках

OBJ_PERIOD_M4

0x00000008

Объект рисуется на 4-минутных графиках

OBJ_PERIOD_M5

0x00000010

Объект рисуется на 5-минутных графиках

OBJ_PERIOD_M6

0x00000020

Объект рисуется на 6-минутных графиках

OBJ_PERIOD_M10

0x00000040

Объект рисуется на 10-минутных графиках

OBJ_PERIOD_M12

0x00000080

Объект рисуется на 12-минутных графиках

OBJ_PERIOD_M15

0x00000100

Объект рисуется на 15-минутных графиках

OBJ_PERIOD_M20

0x00000200

Объект рисуется на 20-минутных графиках

OBJ_PERIOD_M30

0x00000400

Объект рисуется на 30-минутных графиках

OBJ_PERIOD_H1

0x00000800

Объект рисуется на 1-часовых графиках

OBJ_PERIOD_H2

0x00001000

Объект рисуется на 2-часовых графиках

OBJ_PERIOD_H3

0x00002000

Объект рисуется на 3-часовых графиках

OBJ_PERIOD_H4

0x00004000

Объект рисуется на 4-часовых графиках

OBJ_PERIOD_H6

0x00008000

Объект рисуется на 6-часовых графиках

OBJ_PERIOD_H8

0x00010000

Объект рисуется на 8-часовых графиках

OBJ_PERIOD_H12

0x00020000

Объект рисуется на 12-часовых графиках

OBJ_PERIOD_D1

0x00040000

Объект рисуется на дневных графиках

OBJ_PERIOD_W1

0x00080000

Объект рисуется на недельных графиках

OBJ_PERIOD_MN1

0x00100000

Объект рисуется на месячных графиках

OBJ_ALL_PERIODS

0x001fffff

Объект рисуется на всех таймфреймах

Флаги видимости можно комбинировать с помощью символа «|», например, комбинация флагов OBJ_PERIOD_M10|OBJ_PERIOD_H4 означает, что объект будет видим на 10-минутном и 4-часовом таймфреймах.

Пример:

void OnStart()
{
//---
string highlevel="PreviousDayHigh";
string lowlevel="PreviousDayLow";
double prevHigh; // High предыдущего дня
double prevLow; // Low предыдущего дня
double highs[],lows[]; // массивы для получения High и Low
//--- сбросим значение последней ошибки
ResetLastError();
//--- получим 2 последних значения High на дневном таймфрейме
int highsgot=CopyHigh(Symbol(),PERIOD_D1,0,2,highs);
if(highsgot>0) // если копирование прошло успешно
{
Print("Цены High за последние 2 дня получены успешно");
prevHigh=highs[0]; // High предыдущего дня
Print("prevHigh = ",prevHigh);
if(ObjectFind(0,highlevel)<0) // объект с именем highlevel не найден
{
ObjectCreate(0,highlevel,OBJ_HLINE,0,0,0); // создадим объект гор. линия
}
//--- зададим ценовой уровень для линии highlevel
ObjectSetDouble(0,highlevel,OBJPROP_PRICE,0,prevHigh);
//--- установим видимость только для PERIOD_M10 и PERIOD_H4
ObjectSetInteger(0,highlevel,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M10|OBJ_PERIOD_H4);
}
else
{
Print("Не удалось получить цены High за последние 2 дня, Error = ",GetLastError());
}
//--- сбросим значение последней ошибки
ResetLastError();
//--- получим 2 последних значения Low на дневном таймфрейме
int lowsgot=CopyLow(Symbol(),PERIOD_D1,0,2,lows);
if(lowsgot>0) // если копирование прошло успешно
{
Print("Цены Low за последние 2 дня получены успешно");
prevLow=lows[0]; // Low предыдущего дня
Print("prevLow = ",prevLow);
if(ObjectFind(0,lowlevel)<0) // объект с именем lowlevel не найден
{
ObjectCreate(0,lowlevel,OBJ_HLINE,0,0,0); // создадим объект гор. линия
}
//--- зададим ценовой уровень для линии lowlevel
ObjectSetDouble(0,lowlevel,OBJPROP_PRICE,0,prevLow);
//--- установим видимость только для PERIOD_M10 и PERIOD_H4
ObjectSetInteger(0,lowlevel,OBJPROP_TIMEFRAMES,OBJ_PERIOD_M10|OBJ_PERIOD_H4);
}
else Print("Не удалось получить цены Low за последние 2 дня, Error = ",GetLastError());
ChartRedraw(0); // перерисуем график принудительно
}

Уровни волн Эллиотта

Волны Эллиотта представлены двумя графическими объектами типов OBJ_ELLIOTWAVE5 и OBJ_ELLIOTWAVE3. Для задания размера волны (способа маркировки волн) используется свойство OBJPROP_DEGREE, которому можно установить одно из значений перечисления ENUM_ELLIOT_WAVE_DEGREE.

ENUM_ELLIOT_WAVE_DEGREE

Константа

Описание

ELLIOTT_GRAND_SUPERCYCLE

Главный Суперцикл (Grand Supercycle)

ELLIOTT_SUPERCYCLE

Суперцикл (Supercycle)

ELLIOTT_CYCLE

Цикл (Cycle)

ELLIOTT_PRIMARY

Первичный цикл (Primary)

ELLIOTT_INTERMEDIATE

Промежуточное звено (Intermediate)

ELLIOTT_MINOR

Второстепенный цикл (Minor)

ELLIOTT_MINUTE

Минута (Minute)

ELLIOTT_MINUETTE

Секунда (Minuette)

ELLIOTT_SUBMINUETTE

Субсекунда (Subminuette)

Пример:

for(int i=0;i<ObjectsTotal(0);i++)
{
string currobj=ObjectName(0,i);
if((ObjectGetInteger(0,currobj,OBJPROP_TYPE)==OBJ_ELLIOTWAVE3) || ((ObjectGetInteger(0,currobj,OBJPROP_TYPE)==OBJ_ELLIOTWAVE5)))
{
//--- установим уровень разметки в INTERMEDIATE
ObjectSetInteger(0,currobj,OBJPROP_DEGREE,ELLIOTT_INTERMEDIATE);
//--- включим показ линий между вершинами волн
ObjectSetInteger(0,currobj,OBJPROP_DRAWLINES,true);
//--- установим цвет линий
ObjectSetInteger(0,currobj,OBJPROP_COLOR,clrBlue);
//--- установим толщину линий
ObjectSetInteger(0,currobj,OBJPROP_WIDTH,5);
//--- зададим описание
ObjectSetString(0,currobj,OBJPROP_TEXT,"test script");
}
}

 

Объекты Ганна

Для объектов веер Ганна (OBJ_GANNFAN) и сетка Ганна (OBJ_GANNGRID) можно указать одно из двух значений перечисления ENUM_GANN_DIRECTION, которое задает направление тренда.

ENUM_GANN_DIRECTION

Константа

Описание

GANN_UP_TREND

Линия соответствует восходящему тренду

GANN_DOWN_TREND

Линия соответствует нисходящему тренду

Для установки масштаба основной линии 1×1 используется функция ObjectSetDouble(chart_handle, gann_object_name, OBJPROP_SCALE, scale), где:

  • chart_handle – окно графика, в котором находится объект;
  • gann_object_name – имя объекта;
  • OBJPROP_SCALE – идентификатор свойства «Scale»;
  • scale – требуемый масштаб в единицах Pips/Bar.

Пример создания веера Ганна:

void OnStart()
{
//---
string my_gann="OBJ_GANNFAN object";
if(ObjectFind(0,my_gann)<0)// объект не найден
{
//--- сообщим о неудаче 
Print("Object ",my_gann," not found. Error code = ",GetLastError());
//--- получим максимальную цену графика
double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
//--- получим минимальную цену графика
double chart_min_price=ChartGetDouble(0,CHART_PRICE_MIN,0);
//--- сколько баров на графике показано?
int bars_on_chart=ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- создадим массив, куда запишем время открытия каждого бара
datetime Time[];
//--- организуем доступ к массиву как в таймсерии
ArraySetAsSeries(Time,true);
//--- теперь скопируем в него данные для видимых на графике баров
int times=CopyTime(NULL,0,0,bars_on_chart,Time);
if(times<=0)
{
Print("Не удалось скопировать массив со временем открытия!");
return;
}
//--- предварительные приготовления закончены
//--- индекс центрального бара на графике
int center_bar=bars_on_chart/2;
//--- экватор графика - между максимумом и минимумом
double mean=(chart_max_price+chart_min_price)/2.0;
//--- установим координаты первой точки привязки в центр
ObjectCreate(0,my_gann,OBJ_GANNFAN,0,Time[center_bar],mean,
//--- вторая точки привязки справа
Time[center_bar/2],(mean+chart_min_price)/2.0);
Print("Time[center_bar] = "+(string)Time[center_bar]+" Time[center_bar/2] = "+(string)Time[center_bar/2]);
//Print("Time[center_bar]/="+Time[center_bar]+" Time[center_bar/2]="+Time[center_bar/2]);
//--- установим масштаб в единицах Pips/Bar
ObjectSetDouble(0,my_gann,OBJPROP_SCALE,10);
//--- установим направление тренда
ObjectSetInteger(0,my_gann,OBJPROP_DIRECTION,GANN_UP_TREND);
//--- установим толщину линий
ObjectSetInteger(0,my_gann,OBJPROP_WIDTH,1);
//--- зададим стиль линий
ObjectSetInteger(0,my_gann,OBJPROP_STYLE,STYLE_DASHDOT);
//--- и цвет линий
ObjectSetInteger(0,my_gann,OBJPROP_COLOR,clrYellowGreen);
//--- разрешим пользователю выделять объект 
ObjectSetInteger(0,my_gann,OBJPROP_SELECTABLE,true);
//--- выделим его сами
ObjectSetInteger(0,my_gann,OBJPROP_SELECTED,true);
//--- отрисуем на графике
ChartRedraw(0);
}
}

 

Набор Web-цветов

Для типа color определены следующие цветовые константы:

Задавать цвет можно для объектов с помощью функции ObjectSetInteger() и для пользовательских индикаторов с помощью функции PlotIndexSetInteger(). Для получения значения цвета служат аналогичные функции ObjectGetInteger() и PlotIndexGetInteger().

Пример:

//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 3
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
#property indicator_type3 DRAW_LINE
#property indicator_color1 clrBlue
#property indicator_color2 clrRed
#property indicator_color3 clrLime

Wingdings

Символы шрифта Wingdings, используемые с объектом OBJ_ARROW:

Установка нужного символа производится с помощью функции ObjectSetInteger().

Пример:

void OnStart()
{
//---
string up_arrow="up_arrow";
datetime time=TimeCurrent();
double lastClose[1];
int close=CopyClose(Symbol(),Period(),0,1,lastClose); // получим цену Close
//--- если цена получена
if(close>0)
{
ObjectCreate(0,up_arrow,OBJ_ARROW,0,0,0,0,0); // создадим стрелку
ObjectSetInteger(0,up_arrow,OBJPROP_ARROWCODE,241); // установим код стрелки
ObjectSetInteger(0,up_arrow,OBJPROP_TIME,time); // зададим время
ObjectSetDouble(0,up_arrow,OBJPROP_PRICE,lastClose[0]);// зададим цену
ChartRedraw(0); // перерисуем окно
}
else
Print("Не удалось получить последнюю цену Close!");
}