Освойте самую гибкую библиотеку Python для создания великолепных финансовых визуализаций

Вступление

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

Теперь для визуализации общих данных в python в игру вступают такие модули, как matplotlib, seaborn и т. Д., Но когда дело доходит до визуализации финансовых данных, Plotly будет лучшим выбором, поскольку он предоставляет встроенные функции с интерактивными визуальными элементами. Я так и думал, но есть один невоспетый герой, который является не чем иным, как кузеном matplotlib, библиотеки mplfinance.

Все мы знаем, насколько универсален пакет matplotlib, и он пригодится для построения любых данных. Даже финансовые графики, такие как свечи, также можно построить с помощью пакета matplotlib, но напрасно, поскольку мы должны делать это с нуля. Но недавно я узнал, что существует отдельный модуль под названием mplfinance, который разработан специально для создания расширенных финансовых визуализаций. В этой статье мы углубимся в эту библиотеку Python и изучим ее функции для создания различных типов диаграмм.

Импорт пакетов

Импорт необходимых пакетов в нашу среду Python - шаг, который нельзя пропустить. В этой статье нам понадобится сумма трех пакетов: Pandas для работы с фреймами данных, Requests для выполнения вызовов API и извлечения данных акций и mplfinance для создания финансовых диаграмм. Для тех, кто еще не установил эти пакеты, скопируйте этот код в свой терминал:

pip install pandas
pip install requests
pip install mplfinance

После завершения установки пакетов пора импортировать их в нашу среду Python.

import pandas as pd
import requests
import mplfinance as mf

Извлечение данных о запасах

Теперь, когда мы импортировали все необходимые пакеты. Давайте возьмем исторические данные об акциях Amazon с помощью конечной точки API, предоставленной twelvedata.com. Перед этим заметка на twelvedata.com: Twelve Data - один из ведущих поставщиков рыночных данных, имеющий огромное количество конечных точек API для всех типов рыночных данных. Очень легко взаимодействовать с API, предоставляемыми Twelve Data, и у него одна из лучших документации. Кроме того, убедитесь, что у вас есть учетная запись на twelvedata.com, только тогда вы сможете получить доступ к своему ключу API (жизненно важный элемент для извлечения данных с помощью API).

Реализация Python:

def get_historical_data(symbol, start_date):
    api_key = 'YOUR API KEY'
    api_url = f'https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}'
    raw_df = requests.get(api_url).json()
    df = pd.DataFrame(raw_df['values']).iloc[::-1].set_index('datetime').astype(float)
    df = df[df.index >= start_date]
    df.index = pd.to_datetime(df.index)
    return df

amzn = get_historical_data('AMZN', '2021-01-01')
amzn.tail()

Вывод:

Пояснение к коду: Первое, что мы сделали, - это определили функцию с именем «get_historical_data», которая принимает в качестве параметров символ акции («symbol») и дату начала исторических данных («start_date»). Внутри функции мы определяем ключ API и URL-адрес и сохраняем их в соответствующей переменной. Затем мы извлекаем исторические данные в формате JSON с помощью функции «get» и сохраняем их в переменной «raw_df». После выполнения некоторых процессов очистки и форматирования необработанных данных JSON мы возвращаем их в виде чистого фрейма данных Pandas. Наконец, мы вызываем созданную функцию, чтобы извлечь исторические данные Amazon с начала 2021 года и сохранить их в переменной amzn.

График OHLC

Диаграмма OHLC - это тип гистограммы, на которой показаны цены открытия, максимума, минимума и закрытия для каждого периода. Графики OHLC полезны, поскольку они показывают четыре основных точки данных за период, при этом цена закрытия считается наиболее важной для многих трейдеров. Это также полезно для демонстрации увеличения или уменьшения импульса. Когда открытие и закрытие находятся далеко друг от друга, это показывает сильный импульс, а когда они открываются и закрываются близко друг к другу, это показывает нерешительность или слабый импульс. Максимум и минимум показывают полный ценовой диапазон периода, полезный для оценки волатильности [1]. Теперь, чтобы создать диаграмму OHLC с mplfinance, достаточно всего одной строчки кода:

mf.plot(amzn.iloc[:-50,:])

В приведенном выше коде мы сначала вызываем функцию plot, а внутри мы разрезаем данные OHLC Amazon, которые мы только что извлекли ранее, только до последних пятидесяти показаний, и цель этого - просто сделать диаграмму более чистой, чтобы элементы видны. Приведенный выше однострочный файл выдаст следующий результат:

Свечной график

Графики свечей используются трейдерами для определения возможного движения цены на основе прошлых паттернов. Свечи полезны при торговле, поскольку они показывают четыре ценовых точки (открытие, закрытие, максимум и минимум) в течение периода времени, указанного трейдером. Самая интересная часть этого типа графиков заключается в том, что они также помогают трейдерам распознавать эмоции, которые являются главным двигателем самого рынка [2]. Чтобы создать свечной график с помощью mplfinance, нам просто нужно добавить еще один аргумент, который является аргументом type функции plot, и упомянуть в нем candle. Код выглядит так:

mf.plot(amzn.iloc[:-50,:], type = ‘candle’)

Приведенный выше код создаст график свечей, который выглядит следующим образом:

График Ренко

График Ренко - это тип графика, который построен с использованием движения цены, а не цен и стандартизированных временных интервалов, как большинство графиков. График выглядит как ряд кирпичей, и новый кирпич создается, когда цена перемещается на указанную величину цены, и каждый блок располагается под углом 45 градусов (вверх или вниз) к предыдущему кирпичу. Основное использование графиков Ренко - отфильтровать шум и помочь трейдерам более четко видеть тренд, поскольку все движения, которые меньше размера прямоугольника, отфильтровываются [3].

Насколько мне известно, mplfinance - единственная библиотека Python, которая предлагает диаграмму Ренко, и та, которую мы собираемся увидеть дальше, и это причина, по которой этот пакет имеет сильное преимущество, когда дело доходит до финансовой визуализации. Теперь, чтобы создать Renko, нам просто нужно указать renko в аргументе type функции plot. Код для графика Ренко будет выглядеть так:

mf.plot(amzn, type = ‘renko’)

Мы также можем добавить дополнительный аргумент к функции plot, который является аргументом renko_params, чтобы изменить размер кирпича в соответствии с нашими потребностями и другими подобными вещами, но я бы предпочел значения по умолчанию. Приведенный выше код создает диаграмму Ренко, которая выглядит следующим образом:

График с точками и фигурами

График Пунктир и фигура, известный как диаграмма крестики-нолики, похож на диаграмму Ренко, которая отображает движение цен активов без учета времени. В отличие от некоторых других типов диаграмм, таких как свечи, которые отмечают степень движения актива за установленные периоды времени, диаграммы P&F используют столбцы, состоящие из сложенных друг за другом крестиков или ноликов, каждый из которых представляет определенную величину движения цены. Символы X обозначают рост цен, а значки O - падение цены. Формирование нового столбца из X, следующих за O, или нового столбца из O, следующих за X, происходит, когда цена разворачивается на величину разворота [4].

Функции, поддерживающие диаграмму «Точка и фигура», нельзя найти где-либо еще, а только в библиотеке mplfinance, а также упрощает процесс создания диаграммы, просто указав pnf в аргументе type функции plot. Код будет выглядеть так:

mf.plot(amzn, type = ‘pnf’)

Добавление дополнительной информации

Пакет mplfinance не только ограничивается созданием различных типов графиков, но также позволяет нам сделать эти графики более информативными, добавляя дополнительные индикаторы, такие как простая скользящая средняя (SMA) и объем. Для тех, кто не знает этих двух, объем - это количество акций, купленных и проданных трейдерами в течение определенного периода времени, а простая скользящая средняя (SMA) - это не что иное, как средняя цена за определенный период времени. Это технический индикатор, широко используемый при создании торговых стратегий.

Построение этих данных с помощью matplotlib заняло бы тысячелетие, тогда как mplfinance позволяет нам завершить эту задачу с помощью всего одной строчки кода. В дополнение к аргументу type нам просто нужно ввести еще два аргумента: аргумент mav, в котором мы должны указать период ретроспективного анализа для каждой SMA, и аргумент volume, где мы должны указать True, если мы хотим чтобы добавить график объема на нашу диаграмму или False, если мы не хотим. Код обоих этих индикаторов будет выглядеть так:

mf.plot(amzn, mav = (10, 20), type = ‘candle’, volume = True)

Приведенный выше код можно изменить и поэкспериментировать с ним двумя способами. Первый способ, очевидно, - это попробовать разные типы диаграмм. В представленном выше коде мы упомянули, что наш тип графика является свечным, но вы можете изменить его на график OHLC, Renko или даже на график P&F и наблюдать, как каждый из графиков выглядит с двумя дополнительными индикаторами. Следующий способ - поиграть с аргументом mav, где мы можем добавить любое количество SMA с разными периодами ретроспективного анализа. Результат для приведенного выше кода выглядит следующим образом:

Сохранение сюжета

Если вам интересно, как сохранить любую из этих финансовых визуализаций, просто добавьте еще один аргумент - аргумент savefig, где вам просто нужно указать имя файла, а обо всем остальном мы позаботимся. Допустим, вы хотите сохранить приведенный выше график, тогда код, которому вы должны следовать, будет выглядеть так:

mf.plot(amzn, mav = (10, 20), type = ‘candle’, volume = True, savefig = ‘amzn.png’)

Это все, что вам нужно сделать, чтобы сохранить свои прекрасные финансовые визуализации. Довольно просто, правда?

Последние мысли!

На мой взгляд, мне кажется, что mplfinance - самая мощная библиотека для построения финансовых данных, чем другие библиотеки, такие как Plotly или Altair. Эта статья - всего лишь беглый взгляд на то, чего вы можете достичь с помощью mplfinance, но вместе с этой замечательной библиотекой есть много новых функций. Это позволяет нам добавлять данные пользовательских технических индикаторов и строить их вместе с фактическим графиком, мы можем настроить весь шаблон или даже каждый отдельный элемент на графике, добавить линии тренда и так далее. Лучшее в этой библиотеке - это простота использования, которая помогает нам производить расширенную финансовую визуализацию с помощью всего одной строчки кода. Хотя такие пакеты, как Plotly, имеют встроенные функции для создания этих диаграмм, это невозможно сделать в строке кода.

Единственный недостаток mplfinance - плохая документация, из-за которой люди даже не знают, о чем этот пакет. Документация является важным аспектом и должна считаться первостепенной важностью, когда речь идет о проектах с открытым исходным кодом. Особенно важные и полезные проекты, такие как mplfinance, должны иметь достоверную документацию с четкими объяснениями инструментов и функций, которые он предлагает. Кроме того, я убежденный поклонник этой библиотеки и надеюсь, что вы тоже. Вот и все! Вы дошли до конца статьи. Если вы забыли следовать коду какой-либо диаграммы, не волнуйтесь. В конце я предоставил полный исходный код. С учетом сказанного, счастливых визуализаций!

Полный код:

import pandas as pd
import requests
import mplfinance as mf

# Extracting stock data

def get_historical_data(symbol, start_date):
    api_key = 'YOUR API KEY'
    api_url = f'https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}'
    raw_df = requests.get(api_url).json()
    df = pd.DataFrame(raw_df['values']).iloc[::-1].set_index('datetime').astype(float)
    df = df[df.index >= start_date]
    df.index = pd.to_datetime(df.index)
    return df

amzn = get_historical_data('AMZN', '2021-01-01')
amzn.tail()

# 1. OHLC Chart

mf.plot(amzn.iloc[:-50,:])

# 2. Candlestick Chart

mf.plot(amzn.iloc[:-50,:], type = 'candle')

# 3. Renko Chart

mf.plot(amzn, type = 'renko')

# 4. Point and Figure Chart

mf.plot(amzn, type = 'pnf')

# 5. Technical chart

mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True)

# 6. Plot customization

mf.plot(amzn, mav = (5, 10, 20), type = 'candle', 
        volume = True, figratio = (10,5), 
        style = 'binance', title = 'AMZN STOCK PRICE', 
        tight_layout = True)

# 7. Saving the plot

mf.plot(amzn, mav = (5, 10, 20), type = 'candle', 
        volume = True, figratio = (10,5), 
        style = 'binance', title = 'AMZN STOCK PRICE', 
        tight_layout = True, savefig = 'amzn.png')