4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MT5ストラテジーテスターレポートをPython「QuantStats」ライブラリで分析する

Last updated at Posted at 2023-04-02

この記事は、MT5ストラテジーテスターレポート(HTML)を、パフォーマンス分析ライブラリ「QuantStats」で詳細な分析レポートを作成するための前処理のメモです。
ソースコードの品質に関してあまり気にしていないのでムダなところがあるかもしれませんが、予めご了承下さい。

MT5ストラテジーテスターレポート(HTML)とはこのようなものです。
image.png
今回はこのレポートをPythonで読み取って、QuantStatsで詳細分析してみましょう。

データ取得と前処理

QuantStatsでは、このような日時と残高データが必要です。
image.png

HTML読み取り

MT5ストラテジーテスターレポート(HTML)を読み取って前処理をしていきます。
まず、MT5ストラテジーテスターレポート名を指定してread_html関数でpandasデータフレームに取得します。

import pandas as pd
df = pd.read_html('EA_IntradayPatternsEURUSD.html') # ファイル名を指定

約定情報の取得

次に取得したデータフレームから約定情報のみを取得します。今回は"時間"と"損益"、"残高"以外のデータは必要ないですが、ついでに他のも含めて型変換しておきます。

df=df[1]

# 最初のカラムの中身が'約定'である行のインデックスを取得
index = df.index[df.iloc[:, 0] == '約定'].tolist()[0]

# '約定'である行より下の行を別のデータフレームに格納
deals = df.iloc[index+1:].reset_index(drop=True)
deals = deals.iloc[0:-2].reset_index(drop=True)# 上から2行と下から1行を削除
deals.columns = deals.iloc[0]# 一番上の行を列名とする
deals = deals.iloc[2:].reset_index(drop=True)

deals['時間'] = pd.to_datetime(deals['時間'])
deals['約定'] = deals['約定'].astype(int)
deals['注文'] = deals['注文'].astype(int)
deals['数量'] = deals['数量'].astype('float64')
deals['価格'] = deals['価格'].astype('float64')
deals['損益'] = deals['損益'].str.replace(' ', '').astype('float64')  # 半角スペースを削除してからfloat64型に変換
deals['残高'] = deals['残高'].str.replace(' ', '').astype('float64')  # 半角スペースを削除してからfloat64型に変換

これで"deals"という名前のデータフレームに約定情報を格納できました。

Daily損益に変換

今回は、単一ポジションのEAと複数ポジションのEAを同じように処理するため、日別損益に変換してからQuantStatsにデータを渡すようにしてみます。

# 日別損益に変換する
results = deals[['時間', '損益']]
results['時間'] = pd.to_datetime(results['時間']).dt.normalize()
results = results.groupby('時間')['損益'].sum().reset_index()
results.columns = ['date', 'pl']

# 'pl'カラムの累積データを計算し、'balance'カラムに追加する
results['balance'] = deals['残高'].iloc[0]
results['balance'] = results['balance'] + results['pl'].cumsum()
results = results.set_index('date')
results = results['balance']

ここで作成されたデータフレーム"results"の中身はこんな感じです
image.png

QuantStatsでレポート作成

QuantStatsが受け取れる形式に変換できたので早速使用してみましょう。

import quantstats as qs

# Jupyter Notebook上で出力する場合はこっち
qs.reports.full(results)

# HTML形式のQuantStatsレポートを作成する場合はこっちです
qs.reports.html(results, output='report.html', title="Performance Report")

QuantStatsから出力されたレポートがこれです。
image.png
image.png
image.png

QuantStatsについての詳細はこちらから確認してください。
https://github.com/ranaroussi/quantstats

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?