このページでは、Pythonで作成したFX自動売買ツールのバックテストを行う方法をご紹介しています。
Pythonでバックテストを行うメリットは以下の通りです。
- MT4やMT5のバックテストでは確認することが難しかった細かいところまで手が届くオリジナルのバックテストツールを作成できる。
- バックテスト結果を簡単にグラフ化やデータ分析を行なって可視化できる。
この記事は、以下の前回の記事の続きです。
ローソク足チャートの作成
Pythonでは、mplfinanceを用いることで簡単にローソク足チャートを作成することが可能です。そこでこの記事では、MT5から過去データ(チャートバー情報)を取得してローソク足を作成し、そのローソク足に取引履歴をプロットする、ということを手順を追って説明します。
四本値(チャートバー)データのダウンロード
四本値(よんほんね)とは、ある一定期間の始値、終値、高値、安値の4つの価格のことです。
mplfinanceでローソク足を作成するには、この四本値データを用意する必要がありますが、こちらも以下のステップでMT5から簡単にダウンロード可能です。
ここでは、ティックデータの取得と同様にGOLD#(XMTradingのKIWAMI極口座のゴールド)を対象にします。
- MT5にログイン(入金額はゼロでもOK)
- 表示→銘柄→チャートバーから、以下のように選択します。(M15は、15分足という意味です。)
- 「情報呼出」をクリックします。
- 以下の通り出力されたら、「バーをエクスポートする」をクリックします。
- ファイル名を「GOLD_M15.csv」として、どこか適当な場所に保存します。
- Googleドライブのマイドライブ直下に作成した「backtest」フォルダに、「GOLD_M15.csv」をアップロードします。
以上で、インプットデータの準備は完了です。
四本値(バー)データの加工
まずは用意したインプットデータを読み込んでみます。
df = pd.read_table('/content/drive/My Drive/backtest/GOLD_M15.csv')
これを以下のように加工します。
df['time'] = pd.to_datetime(df['<DATE>']+ ' '+ df['<TIME>'])
df = df.set_index('time')
df = df.rename(columns={'<OPEN>':'Open','<HIGH>':'High','<LOW>':'Low','<CLOSE>':'Close'})
df = df[['Open','High','Low','Close']]
すると、このdf(データフレーム)は、以下のようになります。
これをひとまず、「df_M15.pkl」として保存しておきます。
df.to_pickle('/content/drive/My Drive/backtest/df_M15.pkl')
mplfinanceのインストール
Google Colabは、基本的なライブラリは既に備わっているものも多いのですが、mplfinanceについては、インストールしないと使えません。と言っても、以下のようにpipコマンドを実行するだけでOKです。
!pip install mplfinance
実行すると、以下のように表示されるはずです。
これで、以下のコマンドでmplfinanceをインポートすることが可能になります。
import mplfinance as mpf
以上で、mplfinanceのインストール、インポートは完了です。
ローソク足チャートの完成
以上の準備をした上で、ローソク足を描くのは簡単です。以下のコマンドを実行するだけです。
df = pd.read_pickle('/content/drive/My Drive/backtest/df_M15.pkl')
mpf.plot(df, type = 'candle')
これは、先ほど保存しておいた「df_M15.pkl」を呼び出して、「mpf.plot」を実行しています。結果は以下のようにローソク足チャートが表示されます。
ポイントは、「df_M15.pkl」を以下の形式で用意しておいたところです。
具体的には、Open、High、Low、Closeというカラム(項目)を持った時系列データとしてdf(データフレーム)を用意しておくということです。
この形式でデータを用意しておくことで、mplfinanceがそれを四本値データとして読み込んでローソク足等の好きな形式でグラフ化してくれます。
ローソク足チャートに取引履歴をプロット
さて、先ほどのグラフはmplfinaceのデフォルト状態ですが、少しだけ体裁をいじっておきます。
df = pd.read_pickle('/content/drive/My Drive/backtest/df_M15.pkl')
mpf.plot(df, type = 'candle', figsize=(16,8), tight_layout=True, datetime_format='%-H:%M' )
次の記事では、このチャートに取引履歴をプロットしていくという工程に進みます。