Николай Антонов
Николай Антонов личный блог
29 августа 2023, 16:59

Скрипт на QLUA по определению корреляции между ценами двух инструментов

Всем привет!

Относительно недавно на своем Дзен-канале «Код торгового робота» я размещал статью в которой рассматривал различные теоретические графики и рассчитывал корреляцию между ними. Ранее примерно такие же статьи встречал и на Smart-lab.

В продолжении данной темы было бы логично написать скрипт, который строит корреляцию между двумя заданными активами по указанному тайм-фрейму. Что и было сделано в виде скрипта на QLUA. Напомню, что коэффициент корреляции принимает значение от -1 до 1. Если он близок к единице, значит две величины примерно одинаково ведут себя. Если близок к -1, то графики двух величин ведут себя разнонаправлено — когда один график расчет — второй также снижается. А результат близкий к нулю говорит, что между графиками нет связи.

Данный скрипт выполняет следующие действия:
  1. Инициирует исходные данные (по сути это блок, в котором задаются исходные данные: с какими инструментами работаем, по какому тайм-фрейму)
  2. Считывает свечи по указанным двум инструментам.
  3. Сопоставляет данные свечей, то есть создается таблица в которой приведено время и цены обоих активов в это время.
  4. Производит расчет коэффициента корреляции.
Первые два этапа — это достаточно простые механические действия. (Как считывать свечные графики я рассматривал в отдельной статье.)

При реализации третьего этапа я время свечей переводил во временную метку.
То есть, имея отдельные значения года, месяца, дня, часа и минуты временная метка получалась так:
metka = time_current_svechi['year']*100000000 + time_current_svechi['month'] * 1000000 + time_current_svechi['day'] * 10000 + time_current_svechi['hour'] * 100 + time_current_svechi['min'];
В итоге получалось число, и оно тем больше, чем более новое время.
Это позволяет легко оперировать временем, сравнивать временные метки, сортировать при необходимости и пр.

Что касается расчета коэффициента корреляции. То, как известно он рассчитывается по такой формуле:
Скрипт на QLUA по определению корреляции между ценами двух инструментов
Для упрощения вычислений, я разбил расчет на три функции: 
  1. функция рассчитывающая среднее значение
  2. Функция, вычисляющее числитель вышеобозначенной дроби
  3. Функция, вычисляющая знаменатель.

Примерно так:
Скрипт на QLUA по определению корреляции между ценами двух инструментов

Полученный скрипт можно скачать по ссылке: https://nikolai-antonov.ru/scripts/correlation.rar

Результат расчетов выводится в таблице сообщений QUIK примерно в таком виде:
Скрипт на QLUA по определению корреляции между ценами двух инструментов

На всякий случай я провел проверку вычислений: выгружал таблицу времени с ценами двух графиков в Excel и там с помощью функции PEARSON() сравнивал с результатами скрипта. У меня результаты совпали.

Целью данного скрипта является подбор пар инструментов для проведения парного трейдинга. 

В 2019 году я в более ручном режиме строил, так называемую «шахматку» — таблицу с данными нескольких фьючерсов в которой на пересечении стоит коэффициент корреляции между этими инструментами. Вот ссылка на ту «шахматку» - https://nikolai-antonov.ru/scripts/table.xlsx

В принципе, имея разработанный скрипт, можно построить новую со свежими фьючерсами.

Возможно, что кому-то будет интересен такой скрипт — пользуйтесь.

Спасибо за снимание.

P.S. Информация, приведенная в данной статье также имеется в формате видео. И расположена по ссылке: https://dzen.ru/video/watch/64e61fc12a49b25ab7524f57

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн