Найти тему
why_train

Python for Finance: как строить графики в mplfinance

С большим интересом читаю книгу 'Python for Finance' (Yves J. Hilpisch, O'Reilly Media) - много примеров, реальные задачи и стиль комментариев, который заставил меня полностью пересмотреть собственный подход к оформлению кода. Так что всем интересующимся советую.

Единственная проблема, что у меня первое издание книги (в прошлом году вышло новое, дополненное), и значительная часть использованных в примерах библиотек больше не поддерживается, либо претерпели очень серьезные изменения, делающие использование кода невозможным без переработки.

Это, в том числе, касается базовой библиотеки для визуализации данных - Matplotlib - внутри которой более не поддерживается модуль finance. А в нем содержались готовые инструменты для построения для таких видов графиков, как японская свеча и OHLC (Open-High-Low-Close).

К счатью, Py-сообщество не бросило нас в беде: Daniel Goldfarb и Caleb Coffin занялись разработкой и поддержкой специализированной библиотеки mplfinance. Она пока проигрывает в функционале оригинальному модулю matplotlib.finance, однако значительно превосходит его в простоте использования.

Ниже привожу примеры кода (и результат их работы) на основе задач, ипредставленных в книге 'Python for Finance'. Другие "обновленные" программы - в репозитории.

Подготовка

Библиотеки

Что нам понадобится: установить (если не установлены) и импортировать библиотеки:

import mplfinance as mpf #!pip3 install --upgrade mplfinance
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas.util.testing import assert_frame_equal
import pandas_datareader as web
import matplotlib.pyplot as plt
import matplotlib.dates as dates

Данные

Используем данные по немецкому фондовому индексу DAX за период с 01 мая по 30 июня 2014 года.

quotes = web.DataReader('^GDAXI', data_source='yahoo',
start='5/1/2014', end='6/30/2014')

Графики

Японская свеча

Для начала нужно создать словарь с параметрами будущего графика (тип, размер области, соотношение сторон и т.д.)

candle_conf = dict(type='candle',volume=False,figratio=(8,5),figscale=0.5)

Определим цветовые параметры будущего графика (по умолчанию он черно-белый) с помощью методов библиотеки mplfinance:

mc = mpf.make_marketcolors(up='blue',down='red',
edge='inherit',
wick='black',
volume='in',
ohlc='i')
s = mpf.make_mpf_style(marketcolors=mc)

Все, можно строить график.

mpf.plot(quotes,**candle_conf,
title=my_title, ylabel='Index Level',
style=s)

Японская свеча
Японская свеча

OHLC

Для того, чтобы построить OHLC-график, нужно скопировать словарь с параметрами и поменять один из них - собственно, тип графика.

ohlc_conf = candle_conf.copy()
ohlc_conf.update(type='ohlc')

mpf.plot(quotes,**ohlc_conf,
title=my_title, ylabel='Index Level',
style=s)

OHLC
OHLC

Японская свеча и гистограмма по объемам торгов

Еще раз копируем параметры и меняем значение 'volume'.

candle_conf_bar = candle_conf.copy()
candle_conf_bar.update(volume=True)

Осталось построить последний график по нашим данным с новыми параметрами.

mpf.plot(quotes,**candle_conf_bar,
title=my_title, ylabel='Index Level',
ylabel_lower = 'Volume',
style=s)

Японская свеча + гистограмма
Японская свеча + гистограмма

Весь код доступен на GitHub.