ホームホーム  [日本語 / English]

Python(seaborn)で累積損益曲線を描く

はじめに

『MT4 の取引履歴をテキストファイル(CSV 形式)に出力するスクリプト(MQL4)』で保存した CSV 形式のファイルをもとに Python(seaborn)で累積損益グラフを描く方法です。

CSV ファイルは以下のような形式です。1 行目はヘッダ(コメント)で, 2 行目以降に取引履歴が続きます。

各行は,カンマ区切りで,オープン時刻,クローズ時刻,ロット数,損益,シンボル名,売買種別が並びます。

OpenTime,CloseTime,Lots,Profit,Symbol,Buy/Sell
2020.10.26 03:54:05,2020.10.26 04:10:03,1.41,-4371,USDJPY-cd,Sell
2020.10.26 04:21:22,2020.10.26 05:01:09,1.41,11985,USDJPY-cd,Buy
2020.10.26 07:23:36,2020.10.26 08:59:58,1.42,-426,USDJPY-cd,Buy
2020.10.26 10:00:11,2020.10.26 10:19:02,1.42,-710,USDJPY-cd,Buy
2020.10.26 10:36:15,2020.10.26 10:56:00,1.4,3360,USDJPY-cd,Sell

プログラム

Python のスクリプトは以下のようになります。CSV ファイルの読み込みには pandas を,グラフの描画には seaborn + matplotlib を使っています。

累積損益(損益の累積和)の計算は cumsum メソッドで行なえます。

import matplotlib.pyplot as plt
import matplotlib.dates as md
import seaborn as sns
import pandas as pd

# 読み込む CSV ファイルのパス(適宜変更してください)
path = r'C:\HogeHoge\OrderHistory.csv'

# CSV ファイルの読み込み(OpenTime と CloseTime は datetime 型として読み込む)
df = pd.read_csv(path, parse_dates=['OpenTime', 'CloseTime'])

# 日本語フォントを設定
sns.set(font='Yu Gothic')

# x 軸を CloseTime,y 軸を Profit の累積和にしてプロット
plt.plot(df['CloseTime'], df['Profit'].cumsum(), label = '取引履歴', linewidth = 2)

# 凡例を表示
plt.legend()

# x 軸目盛りのフォーマットを指定
ax = plt.gca()
xfmt = md.DateFormatter('%m-%d %H:%M')
ax.xaxis.set_major_formatter(xfmt)

# x 軸目盛りを 30°回転
plt.xticks(rotation = 30)

# 軸ラベルを設定
plt.xlabel("決済日時")
plt.ylabel("累積損益 [JPY]")

# グラフを表示
plt.show()

実行すると以下のようなグラフが描けます。

累積損益グラフ
Bill Lubanovic (著), 斎藤 康毅 (監修), 長尾 高弘 (翻訳)