Функции для получения основных свойств текущего графика

Во многих примерах книги нам уже приходилось использовать Предопределенные переменные, содержащие основные свойства графика и его рабочего символа. MQL-программам доступны также функции, возвращающие значения некоторых из этих переменных. Что именно использовать — переменную или функцию — не играет роли: вы можете просто придерживаться избранного стиля оформления исходных кодов.

Каждый график характеризуется рабочим символом и таймфреймом. Их можно узнать с помощью функций Symbol и Period, соответственно. Кроме того, MQL5 предоставляет упрощенный доступ к двум наиболее часто используемым свойствам символа: размеру пункта цены (Point) и связанному с ним количеству значащих цифр (Digits) после десятичной точки в цене.

string Symbol()

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

ENUM_TIMEFRAMES Period()

Функция Period возвращает значение таймфрейма (ENUM_TIMEFRAMES) текущего графика, что соответствует переменной _Period. Для получения таймфрейма произвольного графика предназначена функция ChartPeriod, и ей также требуется идентификатор в качестве параметра.

double Point()

Функция Point возвращает размер пункта текущего инструмента в валюте котировки, что совпадает со значением переменной _Point.

int Digits()

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

Прочие свойства текущего инструмента позволяют получить SymbolInfo-функции, которые в более общем случае обеспечивают анализ всех инструментов.

Следующий простой пример скрипта ChartMainProperties.mq5 выводит в журнал описанные в данном разделе свойства.

void OnStart()
{
   PRTF(_Symbol);
   PRTF(Symbol());
   PRTF(_Period);
   PRTF(Period());
   PRTF(_Point);
   PRTF(Point());
   PRTF(_Digits);
   PRTF(Digits());
   PRTF(DoubleToString(_Point_Digits));
   PRTF(EnumToString(_Period));
}

Для графика EURUSD,H1 получим следующие записи в журнале.

_Symbol=EURUSD / ok
Symbol()=EURUSD / ok
_Period=16385 / ok
Period()=16385 / ok
_Point=1e-05 / ok
Point()=1e-05 / ok
_Digits=5 / ok
Digits()=5 / ok
DoubleToString(_Point,_Digits)=0.00001 / ok
EnumToString(_Period)=PERIOD_H1 / ok