MT4のストラテジーテスターを使ってEA(Expert Advisor:自動取引プログラム)のバックテストをしていましたが、MQL4言語の生産性の低さに「なんとかならんかなー」と思っていた矢先、PythonでバックテストができるBacktesting.py なる存在を知りました。
FXの自動取引プログラムとして「環境認識」「エントリーポイント」「利確ポイント」「損切りポイント」をPythonで実装しバックテストして、勝てる手法はどのような組合せなのかを客観的に評価してみたいと思います。
対象とする手法
すべての組合せをバックテストすると天文学的な数字の組合せになるので、まずは環境認識なし、利確と損切りは固定値として、どのエントリーポイントが優秀なのかを調査してみます。
バックテストするエントリーポイント一覧は、以下の記事にまとめてありますので、そちらを参照してください。
Backtesting.pyを使ってFXの手法を実装してみた
バックテスト条件
以下、今回実施するバックテストの条件です。
- 環境認識は「なし(Non)」とする。
- すべてのエントリーポイントについてバックテストする。
- 取引時間はロンドン市場の9時から17時のみとする。
- 利確ポイントは50pips固定とする、
- 損切りポイントは50pips固定とする。
- 通貨ペアは USDJPY だけとする。
- 時間軸は 4h, 1h, 30min, 15min とする。
バックテスト結果
各時間軸ごとに「Profit Factor が高い手法ベスト5」と「SQNが高いベスト5」を抽出しました。
結果をご紹介する前に、バックテストの評価基準項目を解説します。
- Trades … トレード回数
- Win Rate … 勝率
- Avg Trade … 一回の取引における平均損失
- Profit Factor … 総利益の総損失の比率
- SQN … 「期待値/標準偏差×√100」で計算されるシステムの品質の評価値で、System Quality Numberの略。数値に対する評価は「1.6~平均以下」「2.0~平均」「2.5~良い」「3.0~優秀」「5.1~最高」「7.0~聖杯」と言われている。
また、以下が結果の表における手法の列の解説です。手法の意味は「Backtesting.pyを使ってFXの手法を実装してみた」を参照願います。
- setup … 環境認識の手法。今回は環境認識は「なし」とするなので、一律「Non000」となっています。
- trigger … エントリーポイントの手法。英数字で手法を表しています。
- profit … 利確ポイントを決定する手法。今回は5opips固定とするので、一律「Fix003」となっています。
- loss … 損切りポイントを決定する手法。今回は5opips固定とするので、一律「Fix003」となっています。
以下が「Profit Factor が高い手法ベスト5」です。赤枠については自身の評価が高い手法です。詳細は追って説明します。
評価
Profit Factor が高い手法の中で、今後環境認識をプラスして評価することを考えると、少しでもトレード回数が多い方がいいと考えています。
上記を踏まえ「Profit Factor が高い手法ベスト5」および「SQN が高い手法ベスト5」の中から自身がオススメする手法を各時間軸ごと二つずつ選出しました。
時間軸 | trigger | Trades | Win Rate | Profit Factor | SQN |
---|---|---|---|---|---|
4H | Mav005 | 159 | 56.0 | 1.59 | 2.63 |
4H | Mav004 | 176 | 52.3 | 1.14 | 0.43 |
1H | Bko000 | 3439 | 51.3 | 1.08 | 2.02 |
1H | Bbd000 | 2303 | 50.9 | 1.05 | 0.94 |
30min | Bko000 | 5702 | 51.1 | 1.09 | 2.96 |
30min | Bbd000 | 3929 | 50.6 | 1.03 | 0.82 |
15min | Bbd000 | 6762 | 50.2 | 1.10 | 3.38 |
15min | Bko000 | 8736 | 49.5 | 1.07 | 2.72 |
上記で登場したエントリーポイント(trigger)の手法は以下の通りです。詳細は「Backtesting.pyを使ってFXの手法を実装してみた」を参照願います。
- Mav004 … 【移動平均線】超短期移動平均線が短期移動平均線上抜けで買い
- Mav005 … 【移動平均線】短期移動平均線が超短期移動平均線上抜けで売り
- Bko000 … 【ブレイクアウト】直近高値のブレイクアウト
- Bbd000 … 【ボリンジャーバンド】終値が+2σを上抜けで買い
まずは、エントリーポイントのみを使った手法の評価ができました。今後は、今回評価が高かったエントリーポイントに環境認識のフィルタをプラスして、さらに精度の高い手法の組合せを模索していきたいと思います。