MT5とPythonを連携 その16

Python

MT5とpythonを連携も長々と続いていますが、サンプルのロジックを考える上で、データの取得からバックテストできるシステムを考えてみました。

その理由としては、MetaTrader5のモジュールには、ほかにMT5と接続した状態で実際にトレードを行う関数なども用意されていまので、各自チャレンジできると思いました。

今回の投稿を参考されると、後は注文と決済などは下記のドキュメンテーションで確かめれます。

MQL5のドキュメンテーション: 統合 / Python用MetaTrader
Python用MetaTrader - 統合 - MQL5 リファレンス - MetaTrader 5 のためのアルゴリズムの/自動化されたトレーディング言語のリファレンス

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段目
    • 実際にトレードが発生した場所など

これらを上手く組み合わせていく事で、より勝率の高い戦略(ロジック)が考えられるのではないでしょうか。

ブログランキング・にほんブログ村へ
Python
shin3をフォローする
System trading topics

コメント

タイトルとURLをコピーしました