- Дескрипторы и счетчики владельцев индикаторов
- Простой способ создания экземпляров индикаторов: iCustom
- Проверка количества просчитанных баров: BarsCalculated
- Получение данных таймсерии из индикатора: CopyBuffer
- Поддержка множества символов и таймфреймов
- Обзор встроенных индикаторов
- Использование встроенных индикаторов
- Расширенный способ создания индикаторов: IndicatorCreate
- Гибкое создание индикаторов с помощью IndicatorCreate
- Обзор функций управления индикаторами на графике
- Комбинирование вывода в главное окно и вспомогательное
- Чтение данных из диаграмм, имеющих сдвиг
- Удаление экземпляров индикаторов: IndicatorRelease
- Получение настроек индикатора по его дескриптору
- Определение источника данных для индикатора
Обзор встроенных индикаторов
Как известно, терминал содержит большой набор популярных индикаторов, которые доступны также и через программное API — без необходимости реализовывать их алгоритмы на MQL5. Создаются они с помощью встроенных функций аналогичных iCustom. Например, мы ранее в обучающих целях создали собственные версии WPR и тройной скользящей средней EMA. Однако соответствующие индикаторы можно использовать прямо "из коробки": для них существуют функции iWPR и iTEMA. Эти и другие технические индикаторы перечислены в нижеприведенной таблице.
Все встроенные индикаторы принимают в качестве первых двух параметров строку с рабочим символом и таймфрейм, а также возвращают целое число — дескриптор индикатора. В общем виде прототип всех функций выглядит так:
int iFunction(const string symbol, ENUM_TIMEFRAMES timeframe, ...)
Вместо многоточия следуют специфические параметры конкретного индикатора. Их количество и типы отличаются. Некоторые индикаторы не имеют параметров.
Например, WPR имеет один параметр, как и в нашей самодельной версии — период: int iWPR(const string symbol, ENUM_TIMEFRAMES timeframe, int period). А встроенный индикатор фракталов, в отличие от нашей версии, не имеет специальных параметров: int iFractals(const string symbol, ENUM_TIMEFRAMES period). В данном случае порядок фракталов жестко задан и равен 2, то есть перед экстремумом (вершиной или впадиной) и за ним должно находиться как минимум по два бара с менее выраженными ценами High и Low, соответственно.
Допустимо вместо символа задавать значение NULL — оно означает рабочий инструмент текущего графика, а значение 0 в параметре timeframe соответствует текущему таймфрейму графика, поскольку это также и значение PERIOD_CURRENT в перечислении ENUM_TIMEFRAMES (см. раздел Символы и таймфреймы).
Также следует иметь в виду, что разные типы индикаторов имеют разное количество буферов. Например, у скользящей средней или WPR только один буфер, а у фракталов — два. Количество буферов также отмечено в таблице в отдельной колонке.
Функция |
Название индикатора |
Параметры |
Буферы |
---|---|---|---|
iAC |
Accelerator Oscillator |
— |
1* |
iAD |
Accumulation / Distribution |
ENUM_APPLIED_VOLUME volume |
1* |
iADX |
Average Directional Index |
int period |
3* |
iADXWilder |
Average Directional Index by Welles Wilder |
int period |
3* |
iAlligator |
Alligator |
int jawPeriod, int jawShift, int teethPeriod,int teethShift, int lipsPeriod, int lipsShift, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price |
3 |
iAMA |
Adaptive Moving Average |
int period, int fast, int slow, int shift, ENUM_APPLIED_PRICE price |
1 |
iAO |
Awesome Oscillator |
— |
1* |
iATR |
Average True Range |
int period |
1* |
iBands |
Bollinger Bands |
int period, int shift, double deviation, ENUM_APPLIED_PRICE price |
3 |
iBearsPower |
Bears Power |
int period |
1* |
iBullsPower |
Bulls Power |
int period |
1* |
iBWMFI |
Market Facilitation Index by Bill Williams |
ENUM_APPLIED_VOLUME volume |
1* |
iCCI |
Commodity Channel Index |
int period, ENUM_APPLIED_PRICE price |
1* |
iChaikin |
Chaikin Oscillator |
int fast, int slow, ENUM_MA_METHOD method, ENUM_APPLIED_VOLUME volume |
1* |
iDEMA |
Double Exponential Moving Average |
int period, int shift, ENUM_APPLIED_PRICE price |
1 |
iDeMarker |
DeMarker |
int period |
1* |
iEnvelopes |
Envelopes |
int period, int shift, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price, double deviation |
2 |
iForce |
Force Index |
int period, ENUM_MA_METHOD method, ENUM_APPLIED_VOLUME volume |
1* |
iFractals |
Fractals |
— |
2 |
iFrAMA |
Fractal Adaptive Moving Average |
int period, int shift, ENUM_APPLIED_PRICE price |
1 |
iGator |
Gator Oscillator |
int jawPeriod, int jawShift, int teethPeriod,int teethShift, int lipsPeriod, int lipsShift, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price |
4* |
iIchimoku |
Ichimoku Kinko Hyo |
int tenkan, int kijun, int senkou |
5 |
iMomentum |
Momentum |
int period, ENUM_APPLIED_PRICE price |
1* |
iMFI |
Money Flow Index |
int period, ENUM_APPLIED_VOLUME volume |
1* |
iMA |
Moving Average |
int period, int shift, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price |
1 |
iMACD |
Moving Averages Convergence-Divergence |
int fast, int slow, int signal, ENUM_APPLIED_PRICE price |
2* |
iOBV |
On Balance Volume |
ENUM_APPLIED_VOLUME volume |
1* |
iOsMA |
Moving Average of Oscillator (MACD histogram) |
int fast, int slow, int signal, ENUM_APPLIED_PRICE price |
1* |
iRSI |
Relative Strength Index |
int period, ENUM_APPLIED_PRICE price |
1* |
iRVI |
Relative Vigor Index |
int period |
1* |
iSAR |
Parabolic Stop And Reverse System |
double step, double maximum |
1 |
iStdDev |
Standard Deviation |
int period, int shift, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price |
1* |
iStochastic |
Stochastic Oscillator |
int Kperiod, int Dperiod, int slowing, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE price |
2* |
iTEMA |
Triple Exponential Moving Average |
int period, int shift, ENUM_APPLIED_PRICE price |
1 |
iTriX |
Triple Exponential Moving Averages Oscillator |
int period, ENUM_APPLIED_PRICE price |
1* |
iVIDyA |
Variable Index Dynamic Average |
int momentum, int smooth, int shift, ENUM_APPLIED_PRICE price |
1 |
iVolumes |
Volumes |
ENUM_APPLIED_VOLUME volume |
1* |
iWPR |
Williams Percent Range |
int period |
1* |
В правой колонке звездочкой * обозначены индикаторы с собственным окном (они выводятся под основным графиком).
Наиболее часто используются параметры задающие периоды индикатора (period, fast, slow и прочие вариации), а также сдвиг линий shift — когда он положителен, диаграммы сдвигаются вправо, когда отрицателен — влево, на заданное количество баров.
Многие параметры имеют типы прикладных перечислений ENUM_APPLIED_PRICE, ENUM_APPLIED_VOLUME, ENUM_MA_METHOD. Мы уже знакомились с ENUM_APPLIED_PRICE в разделе Перечисления. Представим здесь его и другие типы более формально, в виде таблиц с описаниями.
Идентификатор |
Описание |
Значение |
---|---|---|
PRICE_CLOSE |
Цена закрытия бара |
1 |
PRICE_OPEN |
Цена открытия бара |
2 |
PRICE_HIGH |
Максимальная цена на баре |
3 |
PRICE_LOW |
Минимальная цена на баре |
4 |
PRICE_MEDIAN |
Медианная цена, (high+low)/2 |
5 |
PRICE_TYPICAL |
Типичная цена, (high+low+close)/3 |
6 |
PRICE_WEIGHTED |
Средневзвешенная цена, (high+low+close+close)/4 |
7 |
Индикаторы, работающие с объемами, могут оперировать тиковыми объемами (фактически, это счетчик тиков) или реальными объемами (они, как правило, доступны только для биржевых инструментов). Оба типа сведены в перечисление ENUM_APPLIED_VOLUME.
Идентификатор |
Описание |
Значение |
---|---|---|
VOLUME_TICK |
Тиковый объем |
0 |
VOLUME_REAL |
Торговый объем |
1 |
В основе многих технических индикаторов лежат методы сглаживания (или усреднения — от английского "Moving Average") таймсерий. Терминал поддерживает 4 наиболее распространенных метода сглаживания, которые задаются в MQL5 с помощью элементов перечисления ENUM_MA_METHOD.
Идентификатор |
Описание |
Значение |
---|---|---|
MODE_SMA |
Простое усреднение |
0 |
MODE_EMA |
Экспоненциальное усреднение |
1 |
MODE_SMMA |
Сглаженное усреднение |
2 |
MODE_LWMA |
Линейно-взвешенное усреднение |
3 |
Для индикатора Стохастик, пример использования которого мы рассмотрим в следующем разделе, существует два варианта расчета: по ценам Close или по ценам High/Low. Это отражено в специальном перечислении ENUM_STO_PRICE.
Идентификатор |
Описание |
Значение |
---|---|---|
STO_LOWHIGH |
Построение по ценам Low/High |
0 |
STO_CLOSECLOSE |
Построение по ценам Close/Close |
1 |
Назначение и нумерация буферов для тех индикаторов, которые имеют больше одного буфера, приведено в следующей таблице.
Индикаторы |
Константы |
Описания |
Значение |
---|---|---|---|
ADX, ADXW |
|||
|
MAIN_LINE |
Основная линия |
0 |
|
PLUSDI_LINE |
Линия +DI |
1 |
|
MINUSDI_LINE |
Линия –DI |
2 |
iAlligator |
|||
|
GATORJAW_LINE |
Линия челюстей |
0 |
|
GATORTEETH_LINE |
Линия зубов |
1 |
|
GATORLIPS_LINE |
Линия губ |
2 |
iBands |
|||
|
BASE_LINE |
Основная линия |
0 |
|
UPPER_BAND |
Верхняя граница |
1 |
|
LOWER_BAND |
Нижняя граница |
2 |
iEnvelopes, iFractals |
|||
|
UPPER_LINE |
Верхняя линия |
0 |
|
LOWER_LINE |
Нижняя линия |
1 |
iGator |
|||
|
UPPER_HISTOGRAM |
Верхняя гистограмма |
0 |
|
LOWER_HISTOGRAM |
Нижняя гистограмма |
2 |
iIchimoku |
|||
|
TENKANSEN_LINE |
Линия Tenkan-sen |
0 |
|
KIJUNSEN_LINE |
Линия Kijun-sen |
1 |
|
SENKOUSPANA_LINE |
Линия Senkou Span A |
2 |
|
SENKOUSPANB_LINE |
Линия Senkou Span B |
3 |
|
CHIKOUSPAN_LINE |
Линия Chikou Span |
4 |
iMACD, iRVI, iStochastic |
|||
|
MAIN_LINE |
Основная линия |
0 |
|
SIGNAL_LINE |
Сигнальная линия |
1 |
Формулы расчета всех индикаторов приведены в документации MetaTrader 5.
Полную техническую информацию по вызову функций индикаторов, включая примеры исходных кодов, можно найти в документации по MQL5. Далее мы приведем несколько примеров.