MT5とpythonを連携も長々と続いていますが、サンプルのロジックを考える上で、データの取得からバックテストできるシステムを考えてみました。
その理由としては、MetaTrader5のモジュールには、ほかにMT5と接続した状態で実際にトレードを行う関数なども用意されていまので、各自チャレンジできると思いました。
今回の投稿を参考されると、後は注文と決済などは下記のドキュメンテーションで確かめれます。

MT5のヒストリカルデータの取得
すると、こんな感じでデータが取得できます。それぞれのバーの開始時刻(time)、始値(open)、高値(high)、安値(low)、終値(close)、ティック数(tick_volume)、スプレッド(spread)、取引量(real_volume)のデータです。ティック数やスプレッドのデータ取得できることは、ロジックを考える上でいいことですね。
データフレームを作成
次にデータ処理しやすいように、pandasのDataFrame
にしておきます。また、このままだと時刻がUNIX時刻でわかりにくいので、datetime
に変換しておきます。それとバックテストに活かすついでにデータも保存して精度も確かめてみます。
タイムフレームを変更
どの時間軸でトレードをするかというのは人によって好みだとは思いますが、ここでは1時間足に変更したいと思います。
チャートとしての可視化
ここで一旦、先ほど作成したデータをチャートとして可視化してみます。
バックテストの実行
さて、いよいよバックテストです。
バックテストを行うためには、売買ルール(どんな条件の時に売買するか)や実際の取引タイミングなど色々細かな設定をしていかなければなりませんね。
中にはそれらを細かに自分で一から書いていく方もいるかもしれませんが、感覚を掴むというのが主な目的という意味で素直に他の方が作ってくれたライブラリに頼る事にします。
Python製のバックテスト用ライブラリとしては、
- Backtesting.py
- Backtrader
- PyAlgoTrade
- pybacktest
といった多彩なものがリリースされているようですが、今回はその中でも比較的シンプルとされている「Backtesting.py」を使ってみたいと思います。
pip install backtesting
Backtesting.pyは標準ライブラリではないため、ここでインストールします。
今回のバックテストにおける売買ルールは、最もメジャーといっても過言ではないゴールデンクロスとデッドクロスにしました。
ゴールデンクロス: 長期の移動平均線を、短期の移動平均線が下から上に突き抜ける現象。
デッドクロス: 長期の移動平均線を、短期の移動平均線が上から下に突き抜ける現象。
引用元: https://www.oanda.jp/lab-education/dictionary/goldencross/
移動平均線というのはとある一定期間における平均値を線で結んだものであるため、短期の移動平均線が長期の移動平均線と交差する瞬間というのは、トレンドの転換を表す可能性があるというわけですね。
必ずしも例のように上手く決まるわけではありませんが、多くの人が参考にしている現象という事でここでは一旦採用してみる事にします。
短期移動平均線と長期移動平均線の設定値については人それぞれ好みもあるでしょうが、20・80を設定しました。
結果は、確認して頂けるといいのですが、項目の概要は
Exposure Time [%] ポジションを持っていた期間の割合
Equity Final [$] 最終的な資金
Equity Peak [$] ピーク時の資金
Return [%] 利益率
Max. Drawdown [%] 最大ドローダウン(最大資金からの損失率)
Avg. Drawdown [%] 平均ドローダウン
Trades 76 トレード回数
Win Rate [%] 勝率
Best Trade [%] 1回の取引で得た利益の最大値
Worst Trade [%] 1回の取引で被った損失の最大値
Avg. Trade [%] 損益の平均値
Profit Factor PF
となっております。
バックテストを可視化する事も可能です。
- 1段目
- 資金の推移
- 2段目
- 損益の分布
- 3段目
- 実際にトレードが発生した場所など
これらを上手く組み合わせていく事で、より勝率の高い戦略(ロジック)が考えられるのではないでしょうか。


コメント