Всем привет!
В прошлом выпуске мы порассуждали и повычисляли коэффициенты корреляции по различным теоретическим графикам. А сегодня давайте реализуем скрипт на QLUA, который будет вычислять коэффициент корреляции между двумя активами. При этом и сами активы, и тайм-фрейм, по которым будем вычислять коэффициент мы сможем менять.
Данные расчеты могут помочь найти два инструмента, по которым в дальнейшем можно будет вести торговлю по схеме «парного трейдинга».
Что такое парный трейдинг, я рассказывал в одной из своих статей. Также рассматривал некоторые технические моменты при реализации данной стратегии.
Итак, что должен делать наш скрипт:
- Должен содержать блок инициализации или ввода исходных данных – в нем мы зададим по каким инструментам нужно посчитать коэффициент корреляции. Также в этом блоке укажем по какому тайм-фрейму нужно брать графики.
- Далее скрипт прочитает графики по указанным активам (за основу будет браться цена закрытия свечей).
- Потом нужно будет сопоставить эти графики и сделать массив в котором по каждому моменту времени будет указана цена обоих инструментов.
- После этого можно будет вычислить коэффициент корреляции. Он высчитывается по формуле:
При вычислении данной формулы мы создадим несколько отдельных, достаточно простых функций следующим образом:
Итак, давайте немного разберем получившийся код.
Функция, инициализирующая исходные данные выглядит так:
function init()
active1_name = "SRU3"
active1_code = "SPBFUT"
active2_name = "SPU3"
active2_code = "SPBFUT"
time_frame = 7 -- устанавливаем интервал времени, по которому будем работать.
--[[
1 - INTERVAL_M1
2 - INTERVAL_M5
3 - INTERVAL_M10
4 - INTERVAL_U30
5 - INTERVAL_H1
6 - INTERVAL_H4
7 - INTERVAL_D1
8 - INTERVAL_W1
]]
End
Надеюсь, что тут все ясно. Указываем два инструмента, в данном случае это фьючерсы, о чем указывает их код – SPBFUT.
И в целом, из-за того, что в парном трейдинге один из инструментов должен шортиться (продаваться), то удобнее работать с фьючерсами, нежели просто с акциями.
Основной блок программы выглядит так:
function main()
init()
svechi1 = give_svechi (active1_name, active1_code, time_frame);
svechi2 = give_svechi (active2_name, active2_code, time_frame);
table_for_analiz = addition_info_svechi(svechi1, svechi2);
--print_array(table_for_analiz); -- вывод итогового массива (для проверки работы скрипта)
x_ave = give_ave(table_for_analiz, 1);
y_ave = give_ave(table_for_analiz, 2);
up_part = give_up_part(table_for_analiz)
down_part = give_down_part(table_for_analiz)
message("Расчет корреляции: "..active1_name.." и "..active2_name)
message("В анализе задействовано"..#table_for_analiz.." свечей");
message("Kоэффициент корреляции равен:"..up_part/down_part)
end
Тут все как описано в списке выше: скачиваются графики обоих инструментов, потом они совмещаются. Затем вычисляются значения для коэффициента корреляции и происходит вывод данных.
Если Вы детально решите изучить данный скрипт, то обратите внимание на следующее:
В массивах svechi1 и svechi2 находятся свечи, которые из себя представляют таблицы или объекты. Для полного понимания как заполняются данные массивы лучше изучить статью об объектно-ориентированном программировании в LUA.
В нашем рассматриваемом скрипте создаются объекты типа Svecha для заполнения массивов svechi1 и svechi2. А также объекты типа position для заполнения массива table_for_analiz. Этот массив представляет из себя совмещенный график, где каждая запись соответствует определенному времени и содержит данные цены как одного, так и другого инструмента в этот момент времени.
Оба эти объекты (Svecha и position) содержат поле time. В свою очередь в этом поле содержится так называемая временная метка, которая рассчитывается так:
result[i].time = time_current_svechi['year']*100000000 + time_current_svechi['month'] * 1000000 + time_current_svechi['day'] * 10000 + time_current_svechi['hour'] * 100 + time_current_svechi['min'];
Зачем это нужно?
Дело в том, что время свечи в QUIK содержится в виде таблицы. В данной таблице в отдельных ячейках содержится год, месяц, день, час, минута. Работать с таком информацией не совсем удобно. Как сравнивать время свечи? Как проверять какая свеча более ранняя? (хотя данное сравнение в данном скрипте и не требуется).
Что бы было удобно я перевожу информацию о времени из таблицы в отдельное значение. Так, у свечи со временем 10:05 от 03.11.2022 года, например, данная метка будет выглядеть так:
202211031005. То есть в этой метке зашита вся информация о времени. При этом эти метки удобно складывать, сравнивать и осуществлять прочие операции.
Также хотел обратить внимание на функцию give_ave(). Она получает в качестве входных данных массив table_for_analiz и идентификатор – по какому полю находить среднее значение. Если это единица, то среднее будет находиться по первому графику, иначе – по второму.
Ну, что же. Давайте попробуем рассчитать коэффициенты корреляции для различных инструментов:
SRU3 и SPU3, дневной тайм-фрейм.
Это сравнение фьючерсов по обыкновенным и привилегированным акциям Сбера.
Коэффициент корреляции близкий к единице.
Давайте попробуем запустить расчет на пятиминутном тайм-фрейме.
Также близкий к единице коэффициент корреляции. Хочу сказать, что три года назад, когда я последний раз анализировал эти инструменты, то по нему коэффициент корреляции был в районе 0,86.
При корреляции близкой к единице сложно применять парный трейдинг.
Давайте попробуем провести расчет между золотом и серебром.
Инструменты: GDU3 и SVU3. Пятиминутный таймфрейм.
Достаточно маленькое значение коэффициента корреляции.
Давайте попробуем эти же инструмента на дневном тайм-фрейме.
А здесь уже хорошая корреляция.
Пожалуй, закончим расчеты. Я надеюсь, что Вы поняли, что с помощью написанного скрипта можно проводить расчеты и искать подходящие инструменты для парного трейдинга. Можно сравнивать фьючерсы с акциями (не забудьте только для акции поставить код “ TQBR ”).
В дальнейшем, я планирую написать и выложить здесь скрипт, который будет вести торговлю по алгоритму парного трейдинга. Вы пока можете подготовиться к этому – найти подходящие инструменты.
Также, если пожелаете, то можете построить «шахматку» по доступным фьючерсам. На пересечении кодов фьючерсов будет стоять вычисленный коэффициент корреляции.
Я такую года три или четыре назад делал и давал на нее ссылку в статье по парному трейдингу. Ссылка на саму "шахматку".
Для построения автоматически такой шахматки нужно будет составить список всех фьючерсов. Как получать такой список я разбирал в теме по формированию «красивого» отчета. А результирующие строки записывать в файл с расширением «csv».
💥Если же данная статья наберет 20 лайков, то я сам реализую построение такой «шахматки».
На сегодня у меня все. Всем удачи – всем пока.🖐
Подписывайтесь на канал, ставьте лайки 👍, задавайте вопросы.
⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
📃 Краткое содержание данного канала.
➖➖➖➖➖➖➖➖➖➖➖➖➖
Landingcentr.ru - разработка сайтов для малого и среднего бизнеса.
⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆⬆