Цена открытия, закрытия, максимума и минимума свечей в MQL4

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

Запустим скрипт и получим:

самая высокая и самая низкая цена за последние 30 свечей

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

Для этого нам понадобятся четыре функции:

  • 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("Нечего докладывать");
   }
}

Данный код может быть использован в качестве сигнала в работе различных советников или индикаторов.

Комментарии (2)
  1. Александр, а как проверить, есть ли среди 30-ти свечей на графике такая самая большая свеча, после которой все свечи, расположенные справа от нее, были поглощены этой большой свечой? Заранее благодарен!