Всем привет!
Относительно недавно на своем
Дзен-канале «Код торгового робота» я размещал
статью в которой рассматривал различные теоретические графики и рассчитывал корреляцию между ними. Ранее примерно такие же статьи встречал и на Smart-lab.
В продолжении данной темы было бы логично написать скрипт, который строит корреляцию между двумя заданными активами по указанному тайм-фрейму. Что и было сделано в виде скрипта на QLUA. Напомню, что коэффициент корреляции принимает значение от -1 до 1. Если он близок к единице, значит две величины примерно одинаково ведут себя. Если близок к -1, то графики двух величин ведут себя разнонаправлено — когда один график расчет — второй также снижается. А результат близкий к нулю говорит, что между графиками нет связи.
Данный скрипт выполняет следующие действия:
- Инициирует исходные данные (по сути это блок, в котором задаются исходные данные: с какими инструментами работаем, по какому тайм-фрейму)
- Считывает свечи по указанным двум инструментам.
- Сопоставляет данные свечей, то есть создается таблица в которой приведено время и цены обоих активов в это время.
- Производит расчет коэффициента корреляции.
Первые два этапа — это достаточно простые механические действия. (
Как считывать свечные графики я рассматривал в отдельной статье.)
При реализации третьего этапа я время свечей переводил во временную метку.
То есть, имея отдельные значения года, месяца, дня, часа и минуты временная метка получалась так:
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'];
В итоге получалось число, и оно тем больше, чем более новое время.
Это позволяет легко оперировать временем, сравнивать временные метки, сортировать при необходимости и пр.
Что касается расчета коэффициента корреляции. То, как известно он рассчитывается по такой формуле:
Для упрощения вычислений, я разбил расчет на три функции:
- функция рассчитывающая среднее значение
- Функция, вычисляющее числитель вышеобозначенной дроби
- Функция, вычисляющая знаменатель.
Примерно так:
Полученный скрипт можно скачать по ссылке: https://nikolai-antonov.ru/scripts/correlation.rar
Результат расчетов выводится в таблице сообщений QUIK примерно в таком виде:
На всякий случай я провел проверку вычислений: выгружал таблицу времени с ценами двух графиков в Excel и там с помощью функции PEARSON() сравнивал с результатами скрипта. У меня результаты совпали.
Целью данного скрипта является подбор пар инструментов для проведения парного трейдинга.
В 2019 году я в более ручном режиме строил, так называемую «шахматку» — таблицу с данными нескольких фьючерсов в которой на пересечении стоит коэффициент корреляции между этими инструментами. Вот ссылка на ту «шахматку» -
https://nikolai-antonov.ru/scripts/table.xlsx
В принципе, имея разработанный скрипт, можно построить новую со свежими фьючерсами.
Возможно, что кому-то будет интересен такой скрипт — пользуйтесь.
Спасибо за снимание.
P.S. Информация, приведенная в данной статье также имеется в формате видео. И расположена по ссылке:
https://dzen.ru/video/watch/64e61fc12a49b25ab7524f57