見出し画像

Matplotlibを使用したFXチャートの作成

これまで、lightweight-chartsを使用してFXのチャートを作成してきましたが、今回はmatplotlibを使って新たなチャートを作成する方法を紹介します。matplotlibはPythonの強力な描画ライブラリで、カスタマイズ性が高く、様々な種類のグラフやチャートを作成することができます。


目的

今回の目的は、matplotlibを使用して以下の要件を満たすFXチャートを作成することです。

  • アニメーションで表示

  • MACDやRSIなどのテクニカル指標を表示

実装コード

まず、必要なライブラリをインポートします。matplotlibの他にpandasやmplfinanceも使用します。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import pandas as pd
import mplfinance as mpf
import datetime

データの読み込み

CSVファイルからデータを読み込む関数を定義します。ここでは、日時をインデックスとして設定します。

def load_data(filename, skiprows=0):
    data = pd.read_csv(filename, skiprows=skiprows)
    data['datetime'] = pd.to_datetime(data['datetime'])
    data.set_index('datetime', inplace=True)
    return data

アニメーションの更新

アニメーションを更新するための関数を定義します。ここで、グローバル変数end_timeを使用して、表示するデータの範囲を調整します。

def animate(i, data, ax):
    global end_time
    if i == 0:
        return
    processed_data = process_data(data, end_time, range_length)

    ax.clear()
    mpf.plot(processed_data, ax=ax, type='candle', style='charles')

    end_time = end_time + datetime.timedelta(minutes=1)

データの加工

データを加工する関数を定義します。特定の時間範囲のデータを取得します。

def process_data(data, end_time, range_length):
    range_start = end_time - pd.Timedelta(minutes=range_length)
    return data[range_start:end_time]

アニメーションの設定と実行

初期設定を行い、アニメーションを開始します。

end_time = datetime.datetime(2023, 11, 8, 6, 0)
range_length = 100

fig, ax = plt.subplots()
ax.set_xlim([datetime.datetime(2023, 11, 8, 0, 0), datetime.datetime(2023, 11, 8, 23, 59)])
ax.set_ylim([150, 151])  # Y軸の範囲を適宜調整

data = load_data('2023-11-08.csv')
ani = animation.FuncAnimation(fig, animate, fargs=(data, ax), frames=len(data) + 1, interval=300)

plt.show()


まとめ

このようにして、matplotlibを使用してFXチャートをアニメーションで表示することができます。
次回はMACDやRSIなどのテクニカル指標を表示してみます。

その他

今回使用したデータ形式です

datetime,symbol,open,high,low,close
2023-11-08 00:00, USDJPY, 150.597, 150.598, 150.57, 150.587
2023-11-08 00:01, USDJPY, 150.587, 150.592, 150.574, 150.585
2023-11-08 00:02, USDJPY, 150.586, 150.599, 150.576, 150.597
2023-11-08 00:03, USDJPY, 150.597, 150.597, 150.584, 150.586
2023-11-08 00:04, USDJPY, 150.586, 150.596, 150.565, 150.574
                               :
                               :


この記事が気に入ったらサポートをしてみませんか?