FXシステムの使い方(バックテスト)

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

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

最適化なしのバックテストを行う場合のコマンドの書式は以下の通りである。

%run ~/py/backtest.py --ea1 戦略 --symbol1 通貨ペア --spread1 スプレッド --timeframe 足の種類 --start 開始日 --end 終了日

バックテストでは「~/py/backtest.py」ファイルを使う。

「--ea1」で1個目の戦略を設定することになる。最大5個の戦略を同時にバックテストできる。例えば、2つの戦略を同時にバックテストする場合は

%run ~/py/backtest.py --ea1 戦略 --symbol1 通貨ペア --spread1 スプレッド --ea2 戦略 --symbol2 通貨ペア --spread2 スプレッド --timeframe 足の種類 --start 開始日 --end 終了日

のようにする。ただし、足と日付をそろえてバックテストするので、「足の種類」、「開始日」、「終了日」は1つしか設定しない。

「戦略」には戦略プログラムのファイル名(拡張子は不要)を入れる。ファイルはFXシステムと同じフォルダー(ここでは「~/py」フォルダー)に置く必要がある。

「通貨ペア」は

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

の中から選ぶ。

「開始日」は「yyyy.MM.dd」の形式で入力する。

「終了日」も同様である。

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

最適化ありのバックテストを行う場合のコマンドの書式は以下の通りである。

%run ~/py/backtest.py --ea1 戦略 --symbol1 通貨ペア --spread1 スプレッド --timeframe 足の種類 --start 開始日 --end 終了日 --optimization 最適化の設定

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

最適化ありのバックテストも最大5個の戦略を同時に実行できる。例えば、2つの戦略を同時にバックテストする場合は

%run ~/py/backtest.py --ea1 戦略 --symbol1 通貨ペア --spread1 スプレッド --ea2 戦略 --symbol2 通貨ペア --spread2 スプレッド --timeframe 足の種類 --start 開始日 --end 終了日 --optimization 1

のようにする。

「最適化の設定」は

0: 最適化なしのバックテスト
1: 最適化ありのバックテスト
2: ウォークフォワードテスト
3: 機械学習を用いたバックウォークテスト

となっている。デフォルトは「0」なので、省略した場合は最適化なしとなる。ここでは最適化ありのバックテストなので、「1」を設定する。「最適化の設定」は1つしか設定しない。

ウォークフォワードテスト

ウォークフォワードテストを行う場合のコマンドの書式は最適化ありのバックテストと同じである。ただ、「最適化の設定」には「2」を設定する。

ウォークフォワードテストも最大5個の戦略を同時に実行できる。

デフォルトの設定(変更可能)としてインサンプル期間を360日、アウトオブサンプル期間を30日としている。

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

機械学習を用いたバックテスト

最後に機械学習を用いたバックテストだが、これは機械学習用に作成した戦略に使う必要があるので、ここでは簡単に説明する。

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

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

機械学習を用いたバックテストを行うには「最適化の設定」に「3」を設定する。

やはり最大5個の戦略を同時に実行できる。

ポートフォリオの設定

複数の戦略でバックテストを行った場合、それぞれの戦略のリターンに対してウェイトが乗じてある。ウェイトの合計は1.0である。デフォルトの設定では等ウェイトとなっている。例えば2つの戦略でバックテストした場合、等ウェイトではそれぞれのリターンに0.5を乗じた上で合計している。つまりリターンの単純平均である。

効率的フロンティアによるウェイト配分を行うこともでき、その場合はコマンドに「--portfolio 1」を加える。この場合はシャープレシオを最大化するようなウェイト配分で、リターンの加重平均となる。

ウォークフォワードテスト、機械学習を用いたバックテストではウェイト配分はインサンプル期間のリターンに基づく。このため、アウトオブサンプル期間のシャープレシオが等ウェイトより劣化することもありうる。

(2017/02/27更新)

コメント

非公開コメント