С большим интересом читаю книгу '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)
Японская свеча и гистограмма по объемам торгов
Еще раз копируем параметры и меняем значение '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.