FXシステムの使い方(バックテスト) (2017/04/11)

FXシステムを使ったバックテストのやり方などを簡単に説明する。

例として「~/py/sample_strategy.py」というファイルに戦略(トレードルール)が書かれているとする。通貨ペアはUSDJPY、足の種類は5分足、スプレッドは0.4、検証期間は2016年1月1日から2017年1月1日までとする。

バックテスト(最適化なし)

以下のコマンドを実行して最適化なしのバックテストを行う。

%run ~/py/sample_strategy.py --mode backtest --symbol USDJPY --timeframe 5 --spread 0.4 --start 2016.01.01 --end 2017.01.01

通貨ペアは

AUDCAD AUDCHF AUDJPY AUDNZD AUDUSD CADCHF CADJPY
CHFJPY EURAUD EURCAD EURCHF EURGBP EURJPY EURNZD
EURUSD GBPAUD GBPCAD GBPCHF GBPJPY GBPNZD GBPUSD
NZDCAD NZDCHF NZDJPY NZDUSD USDCAD USDCHF USDJPY

の28通貨ペアの中から選ぶ。もちろん、ヒストリカルデータを準備していることが前提である。

足の種類は分単位で

  1    2    3    4    5
  6   10   12   15   20
 30   60  120  180  240
360  480  720 1440

の中から選ぶ。

バックテスト(最適化あり)

以下のコマンドを実行して最適化ありのバックテストを行う。

%run ~/py/sample_strategy.py --mode backtest --symbol USDJPY --timeframe 5 --spread 0.4 --start 2016.01.01 --end 2017.01.01 --optimization 1

「--optimization 1」を加えると最適化ありのバックテストになる。

最適化の基準はシャープレシオである。なお、デフォルトの設定(変更可能)として最低トレード数は260となっており、トレード数が1年当たり260回以下のシャープレシオは無視される。サンプル数の少ない結果を排除するためである。変更したい場合は「--min_trade 130」のようにする。

ウォークフォワードテスト(通常)

以下のコマンドを実行して通常のウォークフォワードテストを行う。

%run ~/py/sample_strategy.py --mode backtest --symbol USDJPY --timeframe 5 --spread 0.4 --start 2015.01.01 --end 2017.01.01 --optimization 2

「--optimization 2」を加えると通常のウォークフォワードテストになる。

なお、上の例では検証期間を2015年1月1日からにしている。前倒ししたのはインサンプル期間として使いたいからである。デフォルトの設定(変更可能)としてインサンプル期間を360日、アウトオブサンプル期間を30日としている。変更したい場合は「--in_sample_period 15」、「--out_of_sample_period 180」のようにする。

最低トレード数の設定は最適化ありのバックテストと同じである。

ウォークフォワードテスト(機会学習)

以下のコマンドを実行して機械学習を用いたウォークフォワードテストを行う。

%run ~/py/sample_strategy.py --mode backtest --symbol USDJPY --timeframe 5 --spread 0.4 --start 2015.01.01 --end 2017.01.01 --optimization 2

「--optimization 3」を加えると機械学習を用いたウォークフォワードテストになる。

基本的に通常のウォークフォワードテストと同じだが、違うのはインサンプル期間でモデル作成、アウトオブサンプル期間でバックテストとしている点である。

最適化は行わない。モデル作成自体が最適化のようなものだからである。このため、最低トレード数の設定もない。