【MT5 API 応用編①】トレード戦略のパフォーマンス分析
この記事では、MT5 API 応用編①として、作成したトレード戦略のバックテストやリアルトレードの運用成績を分析する際に役立つ、Pythonライブラリ「Quantstats」の使い方と分析方法について解説します。
Quantstatsについて
Quantstatsとは、運用成績やバックテスト結果などを数値とグラフで整理し分析するためのPythonライブラリです。
運用成績やバックテスト結果の良し悪しを、感覚ではなく数字やグラフで評価する際に役立ちます。
インストール
Quantstatsを利用するためには、事前にインストールする必要があります。
pip install quantstats
レポートを作成する
インストールが終わったら、さっそく利用していきましょう。
まずは、バックテスト結果の詳細な情報を調べるためのレポートを作成してみます。
以下のような資産変動を格納したデータ「equity」を用意します。
データ形式はpandas Seriesなので、通常のDataFrameから1行だけ取り出したり、リストからpandas形式に変換することで容易に作成可能です。

このデータはバックテストで収集したものですが、バックテスト以外にも戦略の運用成績やポートフォリオ全体の運用成績など、資産変動を示すデータがあれば同様にQuantstatsで扱うことができます。
また、資産変動(エクイティ)という形式でなくても、リターン系列(取引ごとに何%の資産変化があったのかを示すデータ系列)も扱えます。
エクイティもリターンも取り込むと、Quantstats内部で同じデータに変換されます。
import quantstats as qs
qs.reports.html(equity)
これだけの非常に短いコードで「equity」の詳細情報をまとめたレポートを作成することができます。
作成されたレポートを確認していきましょう。

このように一度に多くの分析情報が出力されます。
数値、グラフの意味と読み方
ここからはレポート内の主要な情報をいくつかピックアップして、Quantstats内の処理に基づいた意味を解説していきます。
年率成長率(CAGR)
CAGRは「最初の資産が、毎年一定の複利で増えたと仮定したら、1年で何%増えたことになるか」を意味する数値です。
投資パフォーマンスの良し悪しを調べるときに「年利何%を達成したか」という指標は、最もわかりやすいものの1つではないでしょうか。
一般的に「年利」には単利と複利がありますが、レポート内で確認できるCAGRは複利の年利を計算します。


CAGRのほかにも似たような数値として、EOYリターンがあります。
EOYはEnd Of Yearの略で、各年の年間リターンを示しています。

EOYリターンは1年ごとに計算されるため、年数分の数値が存在します。
レポート内ではグラフと表で出力されます。
シャープレシオ
シャープレシオはリスクに対するリターンの大きさを数値化した指標で、一般的には戦略やポートフォリオの評価・比較などに多く利用されています。
- ●リスクが同じでもリターンが大きくなれば、シャープレシオは大きくなる
- ●リターンが同じでもリスクが小さくなれば、シャープレシオは大きくなる

シャープレシオにおけるリターンは平均値、リスクはリターンのばらつき(標準偏差)を指し、結果は年率換算されます。
計算式内の252という数値は年間の営業日数を意味しており、評価する戦略の1年間の取引回数に応じて変えることで、年率換算が可能です。
年間100回程度取引する戦略であれば、252を100に変更して計算します。
無リスク金利は通常、「投資家が同じ通貨建てでほぼリスクなしに得られる代替利回り」を基準として設定しますが、FXの戦略評価では無リスク金利を0と置くこともよくあります。
リターンのばらつきが大きいと運用成績は安定せず、大きな損失が発生しやすくなるため、リターンのばらつきはリスクと考えることができます。

上のグラフは、2つの戦略の損益を重ねて表示しています。
見てわかる通り、最終的な利益総額には大きな差はありませんが、リターンのばらつき方には大きな違いがあります。
オレンジのグラフは青のグラフと比べてばらつきが大きく、損益の変動が不安定になっています。
この場合は、青の戦略がオレンジの戦略よりもシャープレシオが大きくなります。
シャープレシオが0を上回る場合、トータルの損益はプラスであることを示し、シャープレシオ=0が損益分岐点となります。
また、シャープレシオが1を超えている場合は、平均的なリターンの大きさがリスク(ばらつき)を上回っていることを意味します。
トレードにおいてリターンのばらつきは避けられませんが、シャープレシオが高い戦略は、そのばらつきに対して大きなリターンが発生していることになるため、運用成績の安定度合いを測る指標として、シャープレシオは活用できるわけです。
Quantstatsでシャープレシオは「Sharpe」という表記で出てきます。

レポートを作成せずに個別でシャープレシオだけを計算する場合は、以下のようなコードを書きます。
sharpe = qs.stats.sharpe(equity, periods = 252)
引数の「periods = 252」は、計算式で説明した通り、年間の営業日数に基づく値です。
トレード戦略のシャープレシオを計算する場合は、「年間で何回トレードを行うか」に応じて、この数値を書き換える必要があります。
- ●例:年間100回トレードする戦略→「periods = 100」
最大ドローダウン
シャープレシオでは、リスクを「リターンのばらつき」として定義しています。
一方で、最大ドローダウンはこれとは別の視点で投資・トレード成績のリスクを数値化しています。
ドローダウンとは「過去の最高値から何%下げているか」を示す指標で、最大ドローダウンはドローダウンの中で最も深い下落を指します。
過去に発生した最も深刻な落ち込みを、投資・トレードのリスクの指標として表したものが最大ドローダウンといえます。

最大ドローダウンは、数値が小さい(0に近い)ほど、リスクが低い戦略であると評価します。
Quantstats内では、「Max Drawdown」と表記されます。

max_drawdown = qs.stats.max_drawdown(equity)
このコードで最大ドローダウンを個別で計算することができます。
さらにQuantstatsでは、ドローダウンの中でも特に深刻なドローダウンをレポート内で可視化しています。
下図は、ワースト5ドローダウンを表示した損益グラフです。
背景を赤くして強調しており、「いつ」「どれくらいの期間」に深刻なドローダウンが発生したかを一目で確認できます。

また、損益グラフの下にあるUnderwater Plotは、ドローダウンのみを可視化したグラフとなっており、損益グラフと連動しています。
Underwater Plotは、ドローダウンが「どのくらい深かったのか」を把握するのに便利なグラフです。

また、レポートではワースト10ドローダウンを数値でも確認することができます。
- ●いつから始まったか
- ●いつドローダウンから回復したのか
- ●何%の深さだったのか
- ●何日間続いたのか
という4つの項目で、戦略のドローダウンを分析できます。
dd = qs.stats.to_drawdown_series(equity)
dd_details = qs.stats.drawdown_details(dd)
このコードを使えば、ドローダウンの詳細も個別に計算することができます。

実際に資金を投入して戦略を運用しているときに、営業日で100日間以上のドローダウンが発生すれば、「この戦略は勝てないのか」「もうこの戦略を使うのをやめた方がいいのではないか」といったネガティブな感情がわいてくるかもしれません。
過去のドローダウンを事前に分析しておけば、戦略を運用する上で耐えなければいけない規模のドローダウンを知ることができます。
今経験しているドローダウンの程度が「耐えなければいけない規模」であるかどうかをドローダウンの統計から判断できれば、間違った選択をとってしまうことを防げるかもしれません。
ローリングシャープ
ローリングシャープ(Quantstats内の表記では「Rolling Sharpe」)は、時間とともに変化するシャープレシオを表したものです。
単純に全期間のデータを使って一度だけシャープレシオを計算するのではなく、インジケーターの移動平均を計算するように、計算期間をシフトしながらシャープレシオを計算します。
これにより、シャープレシオが高い時期や低い時期、そして損益分岐点(シャープレシオ=0)を安定して上回っているかどうかを確認できます。
レポート内ではグラフとして出力されます。

損益分岐点は黒の点線、全期間で計算したシャープレシオは赤の点線で描画されます。
ほとんどの期間で損益分岐点を上回っていれば、安定した利益を得られていたことになります。
ローリングシャープも個別で出力することが可能です。
qs.stats.rolling_sharpe(equity, rolling_period=126)

この場合の計算結果は、グラフにする前のシャープレシオ系列です。
「rolling_period=126」は、ローリングシャープの計算範囲、移動平均線でいうところの期間パラメーターを示しています。
ベンチマークを設定する
Quantstatsでトレード戦略のレポートを作成するとき、比較対象のリターン系列(ベンチマーク)を設定することができます。
qs.reports.html(equity, "SPY")
このコードでは、レポートを出力するコードの2つ目の引数に”SPY”を追加しています。
これでレポート内にSPY(S&P500に連動するETF)の投資リターンを比較対象として追加することができます。


ベンチマークを設定して出力したレポートでは、このように青と黄の2つのグラフが表示され、各種統計ではSPYとStrategy(戦略)を比較できます。
SPYは投資対象として選ばれやすいETFで、単にSPYを保有するだけの投資は「誰でも達成可能な投資パフォーマンス」と考えることができます。
トレーダーが試行錯誤して作り上げた戦略のパフォーマンスがプラスの期待値を持っている、つまり「勝てる戦略」であったとしても、SPYを買っているだけの「誰でも達成可能な投資パフォーマンス」に劣っていれば、あまり嬉しい結果とはいえません。
今回はSPYをベンチマークにした例を紹介しましたが、このように比較対象を用意することで、相対的な戦略の評価を行えるようになります。
本記事の執筆者:藍崎@システムトレーダー
| 本記事の執筆者:藍崎@システムトレーダー | 経歴 |
|---|---|
![]() |
個人投資家としてEA開発&システムトレード。 トレードに活かすためのデータサイエンス / 統計学 / 数理ファイナンス / 客観的なデータに基づくテクニカル分析 / 機械学習 / MQL5 / Python |
EA(自動売買)を学びたい方へオススメコンテンツ

OANDAではEA(自動売買)を稼働するプラットフォームMT4/MT5の基本的な使い方について、画像や動画付きで詳しく解説しています。MT4/MT5のインストールからEAの設定方法までを詳しく解説しているので、初心者の方でもスムーズにEA運用を始めることが可能です。またOANDAの口座をお持ちであれば、独自開発したオリジナルインジケーターを無料で利用することもできます。EA運用をお考えであれば、ぜひ口座開設をご検討ください。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。
