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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *