- Получение списков доступных символов и Обзора рынка
- Редактирование списка Обзора рынка
- Проверка символа на существование
- Проверка актуальности данных по символу
- Получение последнего тика по символу
- Расписания торговых и котировочных сессий
- Маржинальные коэффициенты по символу
- Обзор функций получения свойств символа
- Проверка состояния символа
- Тип цены для построения графиков по символу
- Базовая, котировочная и маржинальная валюты инструмента
- Точность представления и шаг изменения цен
- Разрешенные объемы торговых операций
- Разрешения на торговлю
- Торговые условия и режимы исполнения приказов по символу
- Маржинальные требования
- Правила истечения сроков отложенных ордеров
- Спреды и отступы приказов от текущей цены
- Получение величины свопов
- Текущая рыночная информация (тик)
- Описательные свойства символов
- Глубина стакана цен
- Свойства пользовательских символов
- Специфические свойства (биржа, срочный рынок, облигации)
Тип цены для построения графиков по символу
Бары на ценовых графиках MetaTrader 5 могут строиться по ценам Bid или Last — это указано в спецификации каждого инструмента. MQL-программа может узнать эту характеристику посредством вызова функции SymbolInfoInteger для свойства SYMBOL_CHART_MODE. Возвращаемое значение является элементом перечисления ENUM_SYMBOL_CHART_MODE.
Идентификатор |
Описание |
---|---|
SYMBOL_CHART_MODE_BID |
Бары строятся по ценам Bid |
SYMBOL_CHART_MODE_LAST |
Бары строятся по ценам Last |
Режим с ценами Last используется для символов, торгуемых на биржах (в отличие от децентрализованного рынка Forex) — для них доступен стакан цен. Глубину стакана можно узнать по свойству SYMBOL_TICKS_BOOKDEPTH.
Свойство SYMBOL_CHART_MODE пригодится для корректировки сигналов индикаторов или стратегий, которые строятся, например, по цене графика Last, в то время как торговые приказы будут выполняться "по рынку", то есть по ценам Ask или Bid, в зависимости от направления.
Также тип цены бывает востребован при расчете баров пользовательского инструмента: если тот зависит от стандартных инструментов, может иметь смысл учет их настроек по типу цены. Когда пользователь сам вводит формулу синтетического инструмента в окне Собственный символ (вызывается по нажатию кнопки Создать символ в диалоге Символы), он имеет возможность выбирать типы цен согласно спецификациям соответствующих использованных стандартных символов. Однако когда алгоритм расчета формируется в MQL-программе, именно она отвечает за правильный выбор типа цены.
Для начала соберем статистику по использованию цен Bid и Last для построения графиков на конкретном счете. Этим займется скрипт SymbolStatsByPriceType.mq5.
const bool MarketWatchOnly = false;
|
Попробуйте его на разных счетах (на некоторых может не быть биржевых символов). Вот как может выглядеть результат:
Symbols in total: 52304
|
Более практичным примером послужит индикатор SymbolBidAskChart.mq5, предназначенный для отрисовки диаграммы в виде баров, сформированных по цене заданного типа. Это позволит сравнить свечи графика, использующего для своего построения цены из свойства SYMBOL_CHART_MODE, с барами на альтернативном типе цен. Например, можно увидеть бары по цене Bid на графике инструмента по цене Last. Или получить бары по цене Ask, чего стандартные графики терминала не поддерживают.
В качестве основы нового индикатора возьмем уже готовый индикатор IndDeltaVolume.mq5, представленный в разделе Ожидание данных и управление видимостью. В том индикаторе мы закачивали для определенного количества баров BarCount тиковую историю и считали по ним дельту объемов, то есть раздельно объемы для покупок и продаж. В новом индикаторе нам будет достаточно заменить расчетный алгоритм на поиск цен Open, High, Low, Close по тикам внутри каждого бара.
Настройки индикатора включают 4 буфера и 1 диаграмму в виде баров (DRAW_BARS), выводимую в основном окне.
#property indicator_chart_window
|
Отображение в виде баров выбрано, чтобы облегчить их восприятие при наложении на свечи основного графика (то есть, чтобы были видны оба варианта каждого бара).
Во входные параметры добавлен ChartMode, чтобы пользователь мог выбрать один из трех типов цены (обратите внимание, что Ask является нашим расширением по сравнению со стандартным набором элементов в ENUM_SYMBOL_CHART_MODE).
enum ENUM_SYMBOL_CHART_MODE_EXTENDED
|
Бывший класс CalcDeltaVolume сменил название на CalcCustomBars, но остался почти без изменений. Среди отличий упомянем новый набор из 4-х буферов и поле chartMode, которое инициализируется в конструкторе из входной переменной ChartMode.
class CalcCustomBars
|
В зависимости от режима chartMode вспомогательный метод price возвращает из каждого тика конкретный тип цены.
protected:
|
С помощью метода price легко реализовать модификацию основного расчетного метода calc, где заполняются буфера для бара под номером i на основе массива тиков ticks для этого бара.
void calc(const int i, const MqlTick &ticks[], const int skip = 0)
|
Остальные фрагменты исходного кода и принципы их работы соответствуют описанию IndDeltaVolume.mq5.
В обработчике OnInit мы дополнительно выводим текущий тип цены графика и выдаем предупреждение, если пользователь решил построить индикатор по типу цены Last для инструмента, где Last отсутствует.
int OnInit()
|
Ниже показана копия экрана для инструмента с режимом построения графика по цене Last, на который наложен индикатор с типом цены Bid.
Индикатор с барами по ценам Bid на графике по ценам Last
Также интересно посмотреть на бары по цене Ask, наложенные на обычный график по ценам Bid.
Индикатор с барами по ценам Ask на графике по ценам Bid
В часы низкой ликвидности, когда спред расширяется, можно заметить существенное отличие Bid- и Ask-графиков.