2021-05-02

ローソク足チャート ~ python/mplfinance

ローソク足チャート (Candlestick chart) は、株価などの相場の値動きを時系列に沿って図表として表す手法の一つです。単位期間を定め、単位期間中に初めに付いた値段を始値(はじめね)、最後に付いた値段を終値(おわりね)、最も高い値段を高値(たかね)、最も安い値段を安値(やすね)とし、この四種の値段(四本値=よんほんね)を「ローソク」と呼ばれる一本の棒状の図形に作図し、時系列に沿って並べて値段の変動をグラフとして表したものです。

Wikipedia より引用、編集

mplfinance ライブラリ

mplfinance ライブラリを使ってローソク足チャートをプロットできます。mplfinance は金融データの視覚化および分析のための matplotlib ユーティリティーです [1]。旧バージョンで必要だった matplotlib の処理は、現バージョンの API では内部で自動的に処理されるようになりました。

データファイル candlestick_sample_data.csv

上記サンプル CSV ファイルを読み込んでローソク足プロットを作成し、画像ファイルとして保存するスクリプトを下記に示しました。

candlestick_chart.py

出力された画像は以下のようになります。

candlestick_chart.py が生成したイメージ (candlestick_chart.png)

PySide2 のウィジェットに埋め込む

PySide2 (Qt for Python) で、mplfinance の出力をウィジェットに埋め込んで利用する場合、明示的に matplotlib と mplframe とのやりとりを記述する必要があります。そのためちょっと面倒が増え、プロットの表示も若干変わってしまいます。工夫すればもっと元の画像に近づけられるかもしれませんが、まあこれで良しとしました。

以下に、PySide2 のサンプルを示しました(Qt6/PySide6 に matplotlib のオブジェクトを埋め込むサポートをまだ利用できませんでした)。同じ CSV ファイルを読み込んでいます。

qt_matplotlib_candlestick.py
#!/usr/bin/env python
# coding: utf-8
# Reference
# https://stackoverflow.com/questions/60599812/how-can-i-customize-mplfinance-plot
from matplotlib.backends.backend_qt5agg import (
FigureCanvasQTAgg as FigureCanvas,
NavigationToolbar2QT as NavigationToolbar,
)
import mplfinance as mpf
import pandas as pd
import sys
from PySide2 import QtCore
from PySide2.QtWidgets import (
QApplication,
QMainWindow,
)
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
self.resize(800, 600)
self.setWindowTitle('Candlestick Chart on Qt5')
self.show()
def initUI(self):
# sample dataset
filename = 'candlestick_sample_data.csv'
df = pd.read_csv(filename, index_col=0, parse_dates=True)
sty = mpf.make_mpf_style(base_mpf_style='yahoo', rc={'font.size': 8})
fig = mpf.figure(dpi=100, style=sty)
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2, sharex=ax1)
mpf.plot(df, type='candle', mav=(3, 6, 9),
show_nontrading=True, datetime_format='%m-%d',
ax=ax1, volume=ax2)
canvas = FigureCanvas(fig)
self.setCentralWidget(canvas)
self.addToolBar(
QtCore.Qt.BottomToolBarArea,
NavigationToolbar(canvas, self)
)
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()

Fedora 34 の GNOME デスクトップ環境で実行した例を示しました。

qt_matplotlib_candlestick.py の実行例

参考サイト

  1. matplotlib/mplfinance: Financial Markets Data Visualization using Matplotlib
  2. pandas, Matplotlib(mplfinance)でローソク足チャートを作成 | note.nkmk.me [2020-05-23]
  3. python - How can I customize mplfinance.plot? - Stack Overflow [2020-03-09]

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

0 件のコメント: