Расчет корреляции VIX и валют в MT5: Custom Symbol

Расчет корреляции VIX и валют в MT5: Custom Symbol КРЕДИТЫ, ИПОТЕКА и БАНКИ
Подробная инструкция по расчету корреляции между индексом VIX (через пользовательский символ) и валютными парами в MetaTrader 5 с помощью MQL5 скрипта.
Суть: Скрипт на MQL5 для MetaTrader 5, который рассчитывает коэффициент корреляции Пирсона между ценами закрытия пользовательского символа (например, VIX) и стандартной валютной пары за заданный период, выводя результат в журнал терминала.

Как Senior Quant Developer, я часто сталкиваюсь с задачами, требующими анализа взаимосвязей между различными рыночными активами. Одним из ключевых индикаторов рыночного настроения является индекс волатильности VIX, часто называемый «индексом страха». Его динамика может многое рассказать о потенциальном движении рисковых активов, включая валютные пары.

В этой статье мы рассмотрим, как создать MQL5 скрипт для расчета коэффициента корреляции между индексом VIX и выбранной валютной парой. Особенность задачи заключается в том, что VIX не является стандартным символом в большинстве брокеров MT5, поэтому нам потребуется импортировать его данные как пользовательский символ.

Понимание корреляции между VIX и валютными парами может дать трейдерам ценные инсайты. Например, часто наблюдается обратная корреляция между VIX и такими парами, как AUD/JPY или EUR/USD: когда VIX растет (увеличивается страх), эти пары могут падать, и наоборот. Расчет этой корреляции поможет вам принимать более обоснованные торговые решения.

Исходный код

Представленный ниже MQL5 скрипт предназначен для расчета коэффициента корреляции Пирсона между двумя сериями данных: ценами закрытия пользовательского символа (например, VIX) и ценами закрытия стандартной валютной пары. Скрипт запрашивает исторические данные для обоих символов на указанном таймфрейме и за заданное количество баров, затем выполняет расчет и выводит результат в журнал вкладки «Эксперты» терминала MT5.


//+------------------------------------------------------------------+
//|                                       VIX_Currency_Correlation.mq5 |
//|                                             Copyright 2023, FinFluct |
//|                                            https://finfluct.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, FinFluct"
#property link      "https://finfluct.com"
#property version   "1.00"
#property description "Скрипт для расчета корреляции между пользовательским символом VIX и выбранной валютной парой."
#property description "Использует импортированные данные VIX и выводит коэффициент корреляции в журнал."

//--- Входные параметры
input string   VIX_SymbolName      = "VIX_CUSTOM"; // Имя пользовательского символа VIX
input string   Currency_SymbolName = "EURUSD";     // Имя валютной пары для сравнения
input ENUM_TIMEFRAMES Timeframe    = PERIOD_H1;    // Таймфрейм для расчета
input int      LookbackPeriods     = 200;          // Количество баров для расчета корреляции

//+------------------------------------------------------------------+
//| OnStart function                                                 |
//+------------------------------------------------------------------+
void OnStart()
  {
   // Проверка входных параметров
   if (LookbackPeriods <= 1)
     {
      Print("Ошибка: LookbackPeriods должен быть больше 1.");
      return;
     }

   //--- Получаем данные для VIX
   MqlRates rates_vix[];
   int copied_vix = CopyRates(VIX_SymbolName, Timeframe, 0, LookbackPeriods, rates_vix);
   if (copied_vix != LookbackPeriods)
     {
      Print("Ошибка при получении данных для VIX (", VIX_SymbolName, "). Скопировано: ", copied_vix, ", Ожидалось: ", LookbackPeriods);
      return;
     }

   //--- Получаем данные для валютной пары
   MqlRates rates_currency[];
   int copied_currency = CopyRates(Currency_SymbolName, Timeframe, 0, LookbackPeriods, rates_currency);
   if (copied_currency != LookbackPeriods)
     {
      Print("Ошибка при получении данных для валютной пары (", Currency_SymbolName, "). Скопировано: ", copied_currency, ", Ожидалось: ", LookbackPeriods);
      return;
     }

   //--- Подготовка данных для расчета корреляции
   double vix_prices[LookbackPeriods];
   double currency_prices[LookbackPeriods];

   // Заполняем массивы, начиная с самых старых данных (индекс 0) до самых новых (индекс LookbackPeriods-1)
   // CopyRates возвращает данные от старых к новым, поэтому rates_vix[i].close соответствует vix_prices[i]
   for (int i = 0; i < LookbackPeriods; i++)
     {
      vix_prices[i] = rates_vix[i].close;
      currency_prices[i] = rates_currency[i].close;
     }

   //--- Расчет корреляции
   double correlation = CalculateCorrelation(vix_prices, currency_prices, LookbackPeriods);

   //--- Вывод результата
   Print("Корреляция между ", VIX_SymbolName, " и ", Currency_SymbolName, " на таймфрейме ",
         EnumToString(Timeframe), " за последние ", LookbackPeriods, " баров: ", DoubleToString(correlation, 4));
  }

//+------------------------------------------------------------------+
//| Функция для расчета коэффициента корреляции Пирсона              |
//+------------------------------------------------------------------+
double CalculateCorrelation(const double& series1[], const double& series2[], int count)
  {
   if (count <= 1)
     {
      return 0.0; // Недостаточно данных для расчета
     }

   double sum_x = 0.0;
   double sum_y = 0.0;
   double sum_xy = 0.0;
   double sum_x2 = 0.0;
   double sum_y2 = 0.0;

   for (int i = 0; i < count; i++)
     {
      sum_x += series1[i];
      sum_y += series2[i];
      sum_xy += series1[i] * series2[i];
      sum_x2 += series1[i] * series1[i];
      sum_y2 += series2[i] * series2[i];
     }

   double numerator = (count * sum_xy - sum_x * sum_y);
   double denominator = MathSqrt((count * sum_x2 - sum_x * sum_x) * (count * sum_y2 - sum_y * sum_y));

   if (denominator == 0.0)
     {
      return 0.0; // Избегаем деления на ноль, если одна из серий имеет нулевую дисперсию
     }

   return numerator / denominator;
  }

Разбор параметров

  • VIX_SymbolName: Строковое имя пользовательского символа, который вы создали для индекса VIX. По умолчанию установлено значение "VIX_CUSTOM". Убедитесь, что это имя точно соответствует имени вашего пользовательского символа в MT5.
  • Currency_SymbolName: Строковое имя валютной пары, с которой вы хотите рассчитать корреляцию. Например, "EURUSD", "GBPUSD", "AUDJPY" и т.д.
  • Timeframe: Таймфрейм, на котором будет производиться расчет корреляции. Вы можете выбрать любой стандартный таймфрейм MT5, например, PERIOD_H1 (часовой), PERIOD_D1 (дневной) и т.д.
  • LookbackPeriods: Количество баров (свечей) истории, которые будут использоваться для расчета корреляции. Чем больше баров, тем более сглаженным и долгосрочным будет результат, но он может не отражать текущие краткосрочные изменения. Рекомендуется использовать значения от 100 до 500.

Как запустить

Чтобы успешно использовать этот скрипт, выполните следующие шаги:

  1. Импорт данных VIX как пользовательского символа: Поскольку VIX обычно не доступен напрямую в MT5, вам необходимо импортировать его исторические данные. Вы можете найти данные VIX на различных финансовых сайтах (например, Yahoo Finance) в формате CSV. Подробную инструкцию по импорту данных и созданию пользовательского символа в MT5 вы найдете в нашей статье Импорт котировок криптовалют из CSV в MT5: Создание Custom Symbol. Адаптируйте ее для VIX, используя соответствующее имя символа, например, VIX_CUSTOM.

  2. Создание и компиляция скрипта:

    • Откройте MetaEditor (IDE для MQL5), нажав F4 в вашем терминале MT5.
    • Создайте новый скрипт (File -> New -> Script) и назовите его, например, VIX_Currency_Correlation.mq5.
    • Скопируйте предоставленный выше код и вставьте его в новый файл.
    • Нажмите кнопку «Компилировать» (или F7). Убедитесь, что нет ошибок компиляции.
  3. Запуск скрипта в MT5:

    • Вернитесь в терминал MT5.
    • В окне «Навигатор» найдите раздел «Скрипты».
    • Найдите ваш скрипт VIX_Currency_Correlation.
    • Перетащите скрипт на любой график. Откроется окно настроек.
    • На вкладке «Параметры» (Inputs) установите значения для VIX_SymbolName (убедитесь, что оно совпадает с именем вашего пользовательского символа VIX), Currency_SymbolName, Timeframe и LookbackPeriods.
    • Нажмите «ОК».
  4. Просмотр результатов:

    • Результат расчета корреляции будет выведен в журнал терминала MT5, на вкладке «Эксперты» (Experts).
    • Коэффициент корреляции Пирсона находится в диапазоне от -1 до +1:
      • +1: Идеальная прямая корреляция (активы движутся в одном направлении).
      • -1: Идеальная обратная корреляция (активы движутся в противоположных направлениях).
      • 0: Отсутствие линейной корреляции.

Используя этот скрипт, вы сможете оперативно оценивать взаимосвязь между рыночным страхом (VIX) и динамикой интересующих вас валютных пар. Это может стать частью вашей стратегии для подтверждения трендов или поиска расхождений. Для более продвинутого визуального анализа вы можете рассмотреть возможность использования техник, описанных в статье MQL5 Drag-and-Drop: Перетаскивание торговых уровней на графике, чтобы, например, отображать корреляцию на графике или использовать ее для управления торговыми уровнями. А для тех, кто хочет интегрировать эти данные в свои торговые системы, может быть полезна статья о Виртуальный Stop Loss и Take Profit в MQL4: Невидимые для брокера, чтобы создавать более гибкие и невидимые для брокера стратегии, основанные на таких корреляциях.

Оцените статью
FinFluct