このページでは、Pythonで作成したFX自動売買ツールのバックテストを行う方法をご紹介しています。
Pythonでバックテストを行うメリットは以下の通りです。
- MT4やMT5のバックテストでは確認することが難しかった細かいところまで手が届くオリジナルのバックテストツールを作成できる。
- バックテスト結果を簡単にグラフ化やデータ分析を行なって可視化できる。
以下の記事では、最もシンプルなナンピンマーチン式のFX自動売買ツール(ナンピンマーチンbot)を作成しました。
今回の一連の記事では、このモデルで具体的なコードを紹介しながらバックテストを行っていきます。順番に読み進めれば、コードをコピペしていくだけでもこのブログの損益分析データ記事のようなバックテストも可能になる想定です。
初心者向けになるべくコードの意味まで丁寧に解説するように心がけていますので、初心者の方も是非、PythonでのFX自動売買botの作成にチャレンジしてみてください。
Google Colaboratory
今回は、Google Colaboratory(以下、Google Colab)を使って説明していきます。
Google Colabは、以下の理由から初心者にとてもおすすめです。
- Googleアカウントさえあれば、Pythonの環境設定等が不要で簡単にしかも無料で利用可能
- クラウド上での操作になるので、PCスペック等もあまり気にせずにデータ分析等が可能
つまり、Pythonの実行環境が整っていない初心者の方でも、ほとんど準備不要でPythonツールを作っていくことが可能です。
Google Colab の準備
Colabの利用には、Googleのアカウントが必要です。アカウントをお持ちでなければ、Googleアカウントを作成してください。
Googleアカウントをお持ちであれば、以下にアクセスします。
アクセスしたら、右下の 「ノートブックを新規作成」 をクリックしてください。
新規ノートブックが開くと思います。これで準備は完了です。
ファイル名は適当に、「backtest_sample.ipynb」とでもしておいてください。
Googleドライブの準備
Google Colabでは、Googleドライブとの連携が非常に簡単です。
つまり、分析対象であるインプットデータも、分析結果であるアウトプットデータも、分析用ツールであるPythonスクリプトも、全てのファイルをGoogleドライブ上に保存しておくことが可能です。
PCのスペックだけでなく、容量にも依存せず、全てクラウド上で完結するので、とても扱いやすいです。
こちらもGoogleアカウントさえあれば無料で利用可能です。
インプットデータの準備
今回、バックテストを行うためのインプットデータとして、XMTradingのGOLD#のティックデータを用います。
GOLD#というのは、2022/10/26からXMTradingで取り扱いが開始されたKIWAMI極口座という新しい口座で取り扱う際のGOLD(XAUUSD)の名称です。
スタンダード口座よりも、スプレッドが小さくEAにとってもかなり使い勝手が良いので、こちらのデータを使用します。
なお、XMTrading(KIWAMI極口座)のMT5口座をお持ちでない場合は、以下のリンクから口座を開設してください。
また、MT5をお持ちでない方は以下のリンクから、MT5をインストールお願いします。
以下のステップでティックデータをダウンロード可能です。
- MT5にログイン(入金額はゼロでもOK)
- 表示→銘柄→ティックから、以下のように選択します。
- 「情報呼出」をクリックします。
- 以下の通り出力されたら、「ティックをエクスポートする」をクリックします。
- ファイル名を「GOLD_tick.csv」として、どこか適当な場所に保存します。
- Googleドライブのマイドライブ直下に作成した「backtest」フォルダに、「GOLD_tick.csv」をアップロードします。
以上で、インプットデータの準備は完了です。
「backtest_sample.ipynb」の作成
Colabは、Jupyterノートブック形式ですので、各セルごとに実行して実行結果を確認しながら進めることが可能です。
ここからは、各コードセルごとの記載内容を順番に解説していきます。
Googleドライブに接続
まず、Googleドライブに接続処理を行います。
from google.colab import drive
drive.mount('/content/drive')
インポート処理
Pythonのお作法です。必要なものをインポートします。
import pandas as pd
from datetime import datetime
インプットデータの読み込み
まずはドライブに保存した「GOLD_tick.csv」を読み込みます。
df = pd.read_table('/content/drive/My Drive/backtest/GOLD_tick.csv')
pd.read_tableで読み込むことが可能です。()内のパスが、Googleドライブ上のパスです。先ほど作成したbacktestフォルダに保存した「GOLD_tick.csv」を指定しています。
pandasのdf(データフレーム)として読み込んだデータは以下のようになっています。
インプットデータの整形
読み込んだデータを今回の目的に合わせて必要な部分だけ残して整えます。
df['time'] = pd.to_datetime(df['<DATE>']+ ' '+ df['<TIME>'])
df = df.set_index('time')
df = df.rename(columns={'<BID>':'bid','<ASK>':'ask'})
df = df[['bid','ask']]
基本的に、日時(time)とbidとaskしか使いませんので、それ以外は落とします。
整形した結果は、以下の通りです。
インプットデータを.pklで保存
整形したインプットデータを、ピックル形式(.pkl)で保存します。
df.to_pickle('/content/drive/My Drive/backtest/GOLD_tick.pkl')
こうすることで、Googleドライブ上に「GOLD_tick.pkl」というファイルが保存されます。
pandasにおいては、csvよりもpklで扱った方が処理が速いし扱いやすいです。
以降は、一度ランタイムを接続解除したりしても、「GOLD_tick.pkl」を呼び出すことが可能になります。
呼び出す方法は、以下の通り簡単です。
df = pd.read_pickle('/content/drive/My Drive/backtest/GOLD_tick.pkl')
一度.pklを保存してしまえば、次からはこの処理から始めるだけでOKになります。
続きの記事
続きは以下のページに進みます。是非引き続きご覧ください。