Блог им. Mindspace

Начинающим квантам в помощь: поиск графиков по шаблону

В статье, которой я хочу с вами поделиться, рассмотрен примитивный метод поиска похожих графиков с помощью корреляции. Все происходит под Linux с помощью Python 3.5. (Windows может добавить геморроя). Основная идея: когда нравится движение цены на графике в определенный момент времени, я хочу легко находить похожие движения на рынке на сегодняшний день. 

Исходные данные:

  • Linux (Ubuntu)
  • Python 3.5
  • История цен
  • Ipython (Jupyter)

Цены можно выкачивать с Yahoo.Finance, но это будет крайне медленно. Отпимальным решением будет бесплатная база на Quandl.

Корреляция — что это?

Объяснение и формулу можно почерпнуть на Вики, а кратко: Это статистическая взаимосвязь двух или более случайных величин.

В данном случае мы будем использовать корреляцию Пирсона. С помощью данного вида корреляции можно определить силу линейной зависимости между величинами. Корреляция будет измеряться от -1 (обратная корреляция, цены движутся в противоположных направлениях) до 1 (прямая корреляция, цены движутся в одном направлении).

Искать корреляцию будем с помощью библиотеки talib, так как она позволяет искать максимально быстро из доступных подручных пакетов для Python. Как устанавливать библиотеку можно почитать здесь. Для Python расширение, ее использующее, устанавливаем командой:

<code class=" language-batch">$ pip install TA-Lib</code>

Пример использования:

<code class=" language-python">import numpy as np
import talib

arr = np.array([x for x in range(0, 100, 1)], dtype=float)
length = 50 # length of data for get correlation
corr = talib.CORREL(arr[-length:], arr[-length:], length)
print(corr[-1])</code>

В данном примере мы получим корреляцию для 50 последовательных элементов. Результатом будет единица, так как сравниваемая выборка равна самой себе.

Есть альтернативы — numpy.corrcoef и scipy.stats.pearsonr. Работают чуть медленнее, но значительно легче устанавливаются. Scipy.stats.pearsonr работает быстрее реализации numpy.

Примеры использования:

<code class=" language-python"># SciPy & Numpy
import numpy as np
from scipy.stats import pearsonr

arr = np.array([x for x in range(0, 100, 1)], dtype=float)
length = 50 # length of data for get correlation
corr_np = np.corrcoef(arr[-length:], arr[-length:])
corr_scipy = pearsonr(arr[-length:], arr[-length:])
print(corr_np, corr_scipy)</code>

Тестируем скорость (для пытливых умов):

<code class=" language-python">%timeit talib.CORREL(arr[-length:], arr[-length:], length)
%timeit np.corrcoef(arr[-length:], arr[-length:])
%timeit pearsonr(arr[-length:], arr[-length:])</code>

Где взять историю цен?

Для ускорения поиска похожих графиков, историю цен лучше иметь локально в базе данных. Можно выкачать все активы с Yahoo.Finance, но это и сложно и долго. Оптимальным решением вижу Quandl, где бесплатно доступны 3000 активов совершенно бесплатно, что будет более чем достаточно, чтобы поиграться. Примеры кода есть на Quandl.

Продолжить чтение и посмотреть результаты можно здесь.

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
533 | ★12
3 комментария

Читайте на SMART-LAB:
Фото
Уже есть планы на предстоящую субботу? Приглашаем вас на День технологий!
Отмечать будем 30 мая в кластере «Ломоносов» в рамках Московской недели предпринимательства. Посещение бесплатное, но нужна предварительная...
Фото
Итоги первичных размещений ВДО и некоторых розничных выпусков на 26 мая 2026 г.
Следите за нашими новостями в удобном формате: Telegram , Youtube , RuTube, Smart-lab , ВКонтакте , Сайт
Фото
⚡Где на рынке найти скрытые бриллианты
Купить хороший бизнес дёшево — мечта любого инвестора. Но как найти такие компании среди сотен бумаг? Всё проще, чем кажется. Показываем, как...
Фото
Через какие юаневые облигации можно отыграть рост валюты?

теги блога Оксана Гафаити

....все тэги



UPDONW
Новый дизайн