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

の中から選ぶ。

「スプレッド」の単位はOANDAのMT4に合わせて「1 = 0.1pips」としている。

「開始日」は「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/08更新)

Pythonのインストール

Ubuntuには初めからPythonがインストールされている。しかし、ここではAnacondaをインストールして、その中のPythonを使うことにする。いくつかのライブラリはAnacondaからのほうが導入が楽だからである。

Anacondaのインストール

①以下のアドレスをクリックする。

https://www.continuum.io/downloads#linux

②「Anaconda 4.3.0 For Linux」で「Python 3.6 version」の「64-BIT INSTALLER (474M)」ボタンをクリックする。

③「Anaconda3-4.3.0-Linux-x86_64.sh を開く」で「ファイルを保存する」を選択する。

④ボタンを「OK」ボタンをクリックする。

ファイルは「~/ダウンロード」フォルダーに保存される。

⑤「THANK YOU FOR DOWNLOADING ANACONDA!」という表示が出たら、「×」ボタンをクリックして閉じる。

⑥以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

bash ~/ダウンロード/Anaconda3-4.3.0-Linux-x86_64.sh

⑦「Please, press ENTER to continue」に続く「>>>」で「Please answer 'yes' or 'no':」と表示されるまで「Enter」キーを押し続ける。

⑧「Please answer 'yes' or 'no':」に続く「>>>」で「yes」と入力して「Enter」キーを押す。

⑨「[/home/****/anaconda3] >>>」で「Enter」キーを押す。

⑩「Do you wish the installer to prepend the Anaconda3 install location to PATH in your /home/****/.bashrc ? [yes|no]」に続く「[no] >>>」で「yes」と入力して「Enter」キーを押す。

⑪端末を再起動して設定を反映させる。

Anacondaのアップデート

①以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

conda update conda

②アップデートがある場合、「Proceed ([y]/n)?」と出るので「Enter」キーを押す。

③以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

conda update anaconda

④アップデートがある場合、「Proceed ([y]/n)?」と出るので「Enter」キーを押す。

⑤以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

conda update --all

⑥アップデートがある場合、「Proceed ([y]/n)?」と出るので「Enter」キーを押す。

ライブラリのインストール

Anacondaにデフォルトでは含まれていないが、使うことのあるライブラリをインストールする。

2017年2月3日時点で以下の手順ではTensorflowがインストールできない。Python3.6に対して依存関係の問題があるようである。しばらく待って様子を見る。

①以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

pip install git+https://github.com/oanda/oandapy.git

②以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

conda install tensorflow

③「Proceed ([y]/n)?」で「Enter」キーを押す。

④以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

conda install cvxopt

⑤「Proceed ([y]/n)?」で「Enter」キーを押す。

⑥以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

conda install pandas-datareader

⑦「Proceed ([y]/n)?」で「Enter」キーを押す。

作業用フォルダーの作成

○以下のコマンドを端末にコピー&ペーストして「Enter」キーを押し、「ホーム」フォルダーに「py」フォルダーを作成して、これを作業用フォルダーとする。

mkdir ~/py

SpyderのLauncherへの登録

①以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

spyder

②Launcher上の「Spyder (Python 3.4)」を右クリックする。

③「Launcherに登録」を選択する。

Spyderの設定

①Spyderのメニューバーで「ツール」をクリックする。

②「設定」をクリックする。

③「設定」で「グローバル作業ディレクトリ」をクリックする。

④「スタートアップ」で「以下のディレクトリ」を選択する。

⑤続いて「/home/****/py」を選択する。

⑥「ファイルを開く」で「グローバル作業ディレクトリ」を選択する。

⑦「新規ファイル」で「グローバル作業ディレクトリ」を選択する。

⑧「設定」で「IPythonコンソール」をクリックする。

⑨「グラフィックス」タブをクリックする。

⑩「画像のサポート(Matplotlib)」で「サポートを有効化」にチェックを入れる。

⑪「OK」ボタンをクリックする。

参考リンク

pandas

http://pandas.pydata.org/

scikit-learn

http://scikit-learn.org/stable/

TensorFlow

https://www.tensorflow.org/

https://github.com/tensorflow/tensorflow

tf.contrib.learn

https://www.tensorflow.org/tutorials/tflearn/

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/learn/python/learn

(2017/02/04更新)

ヒストリカルデータの加工

hstファイルをcsvファイルに変換

この手順はhstファイルを保存して、それをcsvファイルに変換したい場合のみである。

○以下のコマンドをSpyderの「IPython console」にコピー&ペーストして「Enter」キーを押し、「~/historical_data」フォルダーにhstファイルを変換したcsvファイルを生成する(変換したい通貨ペアがAUDJPY、AUDUSD、EURAUD、EURGBP、EURJPY、EURUSD、GBPAUD、GBPJPY、GBPUSD、USDJPYである場合の例)。

%run -t ~/py/convert_hst2csv.py --audjpy 1 --audusd 1 --euraud 1 --eurgbp 1 --eurjpy 1 --eurusd 1 --gbpaud 1 --gbpjpy 1 --gbpusd 1 --usdjpy 1

ヒストリカルデータの加工と他の足の作成

○以下のコマンドをSpyderの「IPython console」にコピー&ペーストして「Enter」キーを押す(加工したい通貨ペアがAUDJPY、AUDUSD、EURAUD、EURGBP、EURJPY、EURUSD、GBPAUD、GBPJPY、GBPUSD、USDJPY、期間が2007年1月1日〜2016年12月31日である場合の例)。

%run -t ~/py/make_historical_data.py --audjpy 1 --audusd 1 --euraud 1 --eurgbp 1 --eurjpy 1 --eurusd 1 --gbpaud 1 --gbpjpy 1 --gbpusd 1 --usdjpy 1 --start 2007.01.01 --end 2015.12.31

備考

①デューカスコピーのヒストリカルデータはGMT基準であるように思われるが(夏時間があるようなのでUTCではない)、NYクロージング基準に変更するため、元データから2時間進ませている。

②土日以外のすべての足を作成し、データが欠けている場合は前の足のデータで補間している。データが欠けている場合はデータに変動がないと考えれば前の足の終値を使うことには問題ないが、始値、高値、安値、出来高ではそうはいかない。テクニカル指標なども、元データを使った場合と若干の違いが出ることもある。

③1分足データを元に2分、3分、4分、5分、6分、10分、12分、15分、20分、30分、1時間、2時間、3時間、4時間、6時間、8時間、12時間、1日の各足を作成している。

(2017/02/02更新)

ヒストリカルデータのダウンロード

ヒストリカルデータを保存するフォルダーの作成

○端末に以下のコマンドをコピー&ペーストして「Enter」キーを押し、「ホーム」フォルダーに「historical_data」フォルダーを作成してヒストリカルデータを保存するフォルダーとする。

mkdir ~/historical_data

ヒストリカルデータのダウンロード

①JForexのツールバーで「ツール」をクリックする。

②「ヒストリカルデータ取得」をクリックし、下の方に「ヒストリカルデータ取得」タブを表示する。

③「ヒストリカルデータ取得」タブの「Undock this tab」ボタンをクリックし、「ヒストリカルデータ取得」タブを別ウィンドウにして見やすい大きさにする。

④「ヒストリカルデータ取得」の「開始日時」で2007年1月1日を選択する(なぜか日付が1日前後して表示されることがあるが気にしない)。

⑤「終了日時」で2016年12月31日を選択する(やはり日付が1日前後して表示されることがあるが気にしない)。

⑥「形式」で「CSV」を選択する。

⑦「日付形式」で「YYYY.MM.DD HH:MM:SS」を選択する。

⑧「区切り」で「,」(カンマ)を選択する。

⑨「ビッド/アスク」で「Bid」を選択する。

⑩「データ種類」で「分」を選択する。

⑪「値」で「1分」を選択する。

⑫「フィルター」で「フラット期間を非表示」を選択する。

⑬「データ出力先」で「参照」ボタンをクリックする。

⑭「ディレクトリを選択」で「/home/****/historical_data」を選択する。

⑮「選択」ボタンをクリックする。

⑯「ヒストリカルデータ取得」に戻って「銘柄」で、FXシステムに対応している下記の通貨ペアからダウンロードしたい通貨ペアにチェックを入れる。

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

⑰「開始」ボタンをクリックする。

⑱「ヒストリカル・テスターに関する免責事項」で一番下までスクロールする。

⑲「次回から表示しない」にチェックを入れる。

⑳「同意する」ボタンをクリックし、ダウンロードが「100%」になるのを待つ。

㉑「ヒストリカルデータ取得」タブの「×」ボタンをクリックして閉じる。

ファイル名に日付が入っているが、なぜかダウンロードした日付と1日前後することがある。よく分からないが気にしない。

ファイル名の変更

○端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

rename 's/_UTC_1 Min_Bid_2007.01.01_2016.12.31//;' ~/historical_data/*.csv
(2017/01/26更新)

JForexのインストール

ヒストリカルデータはデューカスコピー社のものを使う。そのためには先ずデューカスコピー社のデモ口座を解説し、JForexというツールをインストールする必要がある。以下にその手順などを説明する。なお、デモ口座は期限が1ヶ月だが、デューカスコピー社に連絡すれば無期限にしてもらうこともできる。

デモ口座の開設

①以下のアドレスをクリックする。

https://www.dukascopy.jp/japan/japanese/home/

②「デモ口座開設」ボタンをクリックする。

③「デモ口座開設」の「デモ口座の申し込み」で必要事項にチェックを入れる、または入力する。

④「デモ口座を開設する」ボタンをクリックする。

⑤登録したメールアドレスに「デューカスコピー・ジャパン株式会社」からメールが来るので「ログイン」と「パスワード」を確認する。

JForexのダウンロード

①以下のアドレスをクリックする。

https://www.dukascopy.jp/japan/japanese/home/

②「ログイン」をクリックする。

③「インストール版 JForex(推奨)」で「JForexをインストール」をクリックする(使用しているOSに合ったバージョンのファイルが自動的に選択される)。

④「JForex_unix_64_JRE_bundled.sh を開く」で「ファイルを保存する」を選択する。

⑤「OK」ボタンをクリックし、「JForex_unix_64_JRE_bundled.sh」ファイルを「~/ダウンロード」フォルダーに保存する。

JForexのインストール

①端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

bash ~/ダウンロード/JForex_unix_64_JRE_bundled.sh

②「言語の選択」で「日本語」が選択されているのを確認する。

③「OK」をクリックする。

④「セットアップ - JForex Platform 1.3」の「ようこそ JForex Platform セットアッププログラムへ。」で「次へ」をクリックする。

⑤「ユーザー設定」で「このユーザー(****)のみにインストールする」が選択されているのを確認する。

⑥「次へ」をクリックする。

⑦「インストール先の選択」の「インストール先のディレクトリ」で「/home/****/JForex」が選択されているのを確認する。

⑧「次へ」をクリックする。

⑨「シンボリックリンクのためのディレクトリを選択」で「シンボリックリンクの作成」にチェックが入っているのを確認する。

⑩「インストール先のディレクトリ」で「/home/****/bin」が選択されているのを確認する。

⑪「次へ」をクリックする。

⑫「ショートカット作成オプションの選択」で「デスクトップアイコンを作成する」にテェックが入っているのを確認する。

⑬「次へ」をクリックする。

⑭「JForex Platformのセットアップ完了」で「JForex Platform を実行する」にチェックが入っているのを確認する。

⑮「終了」をクリックする。

JForexの起動

○デスクトップの「JForex Platform」をダブルクリックする。

JForexへのログイン

①JForexのログイン画面で「ログイン」にデューカスコピー社から送られた「ログイン」を入力する。

②「パスワード」に同じくデューカスコピー社から送られた「パスワード」を入力する。

③「環境」で「DEMO」を選択する。

④「言語」で「日本語」が選択されているのを確認する。

⑤「ログイン」ボタンをクリックする。

JForexからのログアウト

①JForexのメニューバーの「ファイル」をクリックする。

②「ログアウト」をクリックする。

(2017/01/26更新)