Вертикальный масштаб (по цене и показаниям индикаторов)

Установка и анализ свойств, относящихся к масштабу по вертикали, производится с помощью элементов двух перечислений: ENUM_CHART_PROPERTY_INTEGER и ENUM_CHART_PROPERTY_DOUBLE. В следующей таблице свойства указаны вместе с типом их значений.

Некоторые свойства позволяют обращаться не только к основному окну, но и подокну, для чего в ChartSet- и ChartGet-функциях следует задействовать параметр window (0 означает основное окно и является значением по умолчанию для краткой формы ChartGet).

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

Описание

Тип значений

CHART_SCALEFIX

Режим фиксированного масштаба

bool

CHART_FIXED_MAX

Фиксированный максимум подокна window или начальный максимум основного окна

double

CHART_FIXED_MIN

Фиксированный минимум подокна window или начальный минимум основного окна

double

CHART_SCALEFIX_11

Режим масштаба 1:1

bool

CHART_SCALE_PT_PER_BAR

Режим указания масштаба в пунктах на бар

bool

CHART_POINTS_PER_BAR

Значение масштаба в пунктах на бар

double

CHART_PRICE_MIN

Минимум значений в окне или подокне window (r/o)

double

CHART_PRICE_MAX

Максимум значений в окне или подокне window (r/o)

double

CHART_HEIGHT_IN_PIXELS

Фиксированная высота окна или подокна в пикселях, требуется параметр window

int

CHART_WINDOW_YDISTANCE

Дистанция в пикселях по вертикальной оси Y между верхней рамкой подокна window и верхней рамкой основного окна графика. (r/o)

int

По умолчанию графики поддерживают адаптивный масштаб, чтобы котировки или линии индикаторов полностью умещались по вертикали на видимом временном отрезке. Для некоторых применений желательно фиксировать масштаб, в связи с чем терминал предлагает несколько режимов. В них график можно прокручивать мышью или клавишами (Shift+стрелка) не только влево/вправо, но и вверх/вниз, а у правой шкалы появляется "движок", за который можно быстро проматывать график мышью.

Фиксированный режим устанавливается включением флага CHART_SCALEFIX и указанием требуемых максимума и минимума в полях CHART_FIXED_MAX и CHART_FIXED_MIN (в основном окне пользователь сможет передвинуть график вверх или вниз, из-за чего значения CHART_FIXED_MAX и CHART_FIXED_MIN синхронно изменятся, но вертикальный масштаб сохранится). Также пользователь сможет изменить вертикальный масштаб, нажав кнопку мыши на шкале цен и, не отпуская её, двигая вверх или вниз. В подокнах интерактивное редактирование вертикального масштаба не предусмотрено. В связи с этим мы позднее представим индикатор SubScaler.mq5 (см. раздел про события клавиатуры), который позволит пользователю управлять диапазоном значений в подокне с помощью клавиатуры (а не из диалога настрок, с помощью полей на закладке Шкала).

Режим CHART_SCALEFIX_11 обеспечивает примерное видимое равенство сторон квадрата на экране: X баров в пикселях (по горизонтали) будут равны X пунктам в пикселях (по вертикали). Равенство примерное, потому что размер пикселей, как правило, не одинаков по вертикали и горизонтали.

Наконец, существует режим фиксации соотношения количества пунктов на бар — он включается опцией CHART_SCALE_PT_PER_BAR, а само требуемое соотношение задается с помощью свойства CHART_POINTS_PER_BAR. В отличие от режима CHART_SCALEFIX, пользователь не сможет интерактивно изменить масштаб мышью на графике. В этом режиме горизонтальная дистанция в один бар будет отображаться на экране в таком же отношении к заданному количеству пунктов по вертикали, как соотношение сторон графика (в пикселях). При равенстве таймфремов и размеров двух графиков, один будет выглядеть сжатым по цене по сравнению с другим в соответствии с отношением их величин CHART_POINTS_PER_BAR. Очевидно, что чем меньше таймфрейм, тем меньше размах баров, и потому при одном и том же масштабе мелкие таймфреймы выглядят более "сплюснутыми".

Программная установка свойства CHART_HEIGHT_IN_PIXELS делает невозможным редактирование размера окна/подокна пользователем. Это часто используется для окон, в которых размещаются торговые панели с предопределенным набором элементов управления (кнопок, полей ввода и т.д.). Для того чтобы убрать фиксацию размера, следует установить значение свойства в -1.

Значение CHART_WINDOW_YDISTANCE требуется для перевода абсолютных координат основного графика в локальные координаты подокна для корректной работы с графическими объектами. Дело в том, что при наступлении событий мыши координаты курсора передаются относительно основного окна графика, в то время как координаты графических объектов в подокне индикатора задаются относительно верхнего левого угла подокна.

Подготовим скрипт для анализа изменений вертикальных масштабов и размеров ChartScalePrice.mq5.

void OnStart()
{
   int flags[] =
   {
      CHART_SCALEFIXCHART_SCALEFIX_11,
      CHART_SCALE_PT_PER_BARCHART_POINTS_PER_BAR,
      CHART_FIXED_MAXCHART_FIXED_MIN,
      CHART_PRICE_MINCHART_PRICE_MAX,
      CHART_HEIGHT_IN_PIXELSCHART_WINDOW_YDISTANCE
   };
   ChartModeMonitor m(flags);
   ...
}

Он реагирует на манипуляции с графиком следующим образом:

Initial state:
    [key] [value]   // ENUM_CHART_PROPERTY_INTEGER
[0]     6       0
[1]     7       0
[2]    10       0
[3]   107     357
[4]   110       0
    [key]  [value]  // ENUM_CHART_PROPERTY_DOUBLE
[0]    11 10.00000
[1]     8  1.13880
[2]     9  1.12330
[3]   108  1.12330
[4]   109  1.13880
// уменьшили вертикальный размер окна
CHART_HEIGHT_IN_PIXELS 357 -> 370
CHART_HEIGHT_IN_PIXELS 370 -> 408
CHART_FIXED_MAX 1.1389 -> 1.1388
CHART_FIXED_MIN 1.1232 -> 1.1233
CHART_PRICE_MIN 1.1232 -> 1.1233
CHART_PRICE_MAX 1.1389 -> 1.1388
// уменьшили горизонтальный масштаб, из-за чего увеличился диапазон цен
CHART_FIXED_MAX 1.1388 -> 1.139
CHART_FIXED_MIN 1.1233 -> 1.1183
CHART_PRICE_MIN 1.1233 -> 1.1183
CHART_PRICE_MAX 1.1388 -> 1.139
CHART_FIXED_MAX 1.139 -> 1.1406
CHART_FIXED_MIN 1.1183 -> 1.1167
CHART_PRICE_MIN 1.1183 -> 1.1167
CHART_PRICE_MAX 1.139 -> 1.1406
// с помощью мыши расширили диапазон цен (котировки "сжались" по вертикали) 
CHART_FIXED_MAX 1.1406 -> 1.1454
CHART_FIXED_MIN 1.1167 -> 1.1119
CHART_PRICE_MIN 1.1167 -> 1.1119
CHART_PRICE_MAX 1.1406 -> 1.1454