Блог им. 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.

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

525 | ★12
3 комментария

Читайте на SMART-LAB:
Фото
Евро игнорирует хороший ВВП: рынок прайсит риск ускорения роста ИПЦ
 Евро четвертую сессию подряд отступает против доллара и во время лондонской сессии держится чуть выше 1.1850, постепенно сдавая важный...
Фото
Рекомендации для эмитентов и переход к гибридным ЦФА — опыт Селигдара
Приняли участие в Alfa Talk «ЦФА: новая архитектура рынка», который был посвящен трансформации регулирования цифровых финансовых активов (ЦФА) и...
Фото
Решение ЦБ поддержит экономику, долговой и фондовый рынки
На первом заседании в текущем году Банк России в шестой раз подряд снизил ключевую ставку – на 50 б.п., до 15,5%. На этот раз решение...
Фото
Аренадата чудом выполнила гайденс. Сравнение с сектором по мультипликаторам. Прогноз результатов и дивидендов за 2025 год.
Вчера Аренадата опубликовала пресс-релиз . За 2 дня после выхода новостей акции росли максимально до +28%. Фокус пресс-релиза не на результате,...

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

....все тэги



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