Когда вы пишете код и проводите технический анализ, вы должны иметь возможность считывать поступающие данные, особенно текущие и прошлые цены. Давайте разберемся, как можно получать значения цены с помощью 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-ти свечей на графике такая самая большая свеча, после которой все свечи, расположенные справа от нее, были поглощены этой большой свечой? Заранее благодарен!
Разобрался сам. Спасибо.