Когда вы пишете код и проводите технический анализ, вы должны иметь возможность считывать поступающие данные, особенно текущие и прошлые цены. Давайте разберемся, как можно получать значения цены с помощью MQL4.
Мы знаем, что каждая свеча включает в себя:
- Цену открытия — первая цена, с которой начинается свеча.
- Цену закрытия — последняя цена на момент закрытия свечи.
- Максимум свечи — самая высокая цена за время формирования свечи.
- Минимум — самая низкая цена за время формирования свечи.
В MQL4 есть предопределенные переменные-массивы с данными ценами. При этом текущая свеча имеет индекс 0, предыдущая свеча 1, следующая за предыдущей 2 и т. д. К примеру, если мы смотрим на минутный график, индекс 50 представляет собой свечу, которая сформировалась 50 минут назад.
Каждая свеча имеет 4 предопределенных переменных-массива:
- Open[] — массив цен открытия.
- Close[] — массив цен закрытия.
- High[] — массив самых высоких цен.
- Low[] — массив самых низких цен.
К примеру, Open [0], Close [0], High [0] и Low [0] — цены открытия, закрытия, максимума и минимума текущей свечи. Данные значения цены могут измениться, так как свеча еще формируется. Если мы хотим получить цены прошлой свечи, мы будем использовать индекс 1, к примеру Close [1].
Предположим, мы хотим найти самые высокие и самые низкие цены последних 30 свечей.
#property copyright "Александр Паркер" #property link "https://traderblog.net/" #property version "1.00" #property strict #property show_inputs //Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей. extern int Window=30; void OnStart() { //Вводим переменные. double Highest=High[0]; double Lowest=Low[0]; //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен. for(int i=0; i<=Window; i++) { if(Low[i]<Lowest) Lowest=Low[i]; if(High[i]>Highest) Highest=High[i]; } //Выводим результат. Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest); }
Запустим скрипт и получим:
Стоит отметить, что эти предопределенные переменные-массивы имеют ограничение на возможность получения цены только для текущих торговых инструментов и текущего таймфрейма. Давайте посмотрим, как можно получить цены для других торговых инструментов и других таймфреймов.
Для этого нам понадобятся четыре функции:
- iOpen() — возвращает значение цены открытия свечи соответствующего графика.
- iClose() — возвращает значение цены закрытия свечи соответствующего графика.
- iHigh() — возвращает значение максимальной цены свечи соответствующего графика.
- iLow() — возвращает значение минимальной цены свечи соответствующего графика.
Все данные функции имеют одинаковые аргументы. Рассмотрим для примера iClose():
double iClose( string symbol, // символ int timeframe, // период int shift // сдвиг );
- symbol — это торговый инструмент, цену которого вы хотите получить. Например, «EURUSD» для пары EURUSD или Symbol() — для текущего инструмента.
- timeframe — это таймфрейм, для которого вы хотите получить цену. Например, PERIOD_M1 — таймфрейм для 1-минутного графика или PERIOD_CURRENT — для текущего таймфрейма.
- shift аналогичен индексу массива. 0 для текущей свечи, 1 для последней сформированной, 2 для второй и т. д.
К примеру, мы хотим получить цену открытия USDJPY на часовом графике для 3-й последней закрытой свечи: iOpen («USDJPY», PERIOD_H1, 3).
Мы можем провести сравнение между несколько валютными парами с евро и проверить силу евро.
#property copyright "Александр Паркер" #property link "https://traderblog.net/" #property version "1.00" #property strict #property show_inputs void OnStart() { /*Мы сравниваем текущую цену закрытия с максимумом предыдущей свечи. Если текущая цена выше максимума предыдущей свечи, вероятно, цена растет. Мы делаем ту же проверку на разных парах с евро для дальнейшей проверки нашей теории. Если для всех валютных пар с евро цена растет, мы делаем вывод, что евро сильный.*/ if(iClose("EURUSD", PERIOD_M5, 0) > iHigh("EURUSD", PERIOD_M5, 1) && iClose("EURCHF", PERIOD_M5, 0) > iHigh("EURCHF", PERIOD_M5, 1) && iClose("EURAUD", PERIOD_M5, 0) > iHigh("EURAUD", PERIOD_M5, 1) && iClose("EURJPY", PERIOD_M5, 0) > iHigh("EURJPY", PERIOD_M5, 1) ){ Alert("EUR сильный!"); } else{ Alert("Нечего докладывать"); } }
Данный код может быть использован в качестве сигнала в работе различных советников или индикаторов.
Александр, а как проверить, есть ли среди 30-ти свечей на графике такая самая большая свеча, после которой все свечи, расположенные справа от нее, были поглощены этой большой свечой? Заранее благодарен!
Разобрался сам. Спасибо.