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」を加えると機械学習を用いたウォークフォワードテストになる。

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

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

ヒストリカルデータの加工 (2017/06/06)

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

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

例として「~/historical_data」フォルダーに「AUDJPY.hst」、「AUDUSD.hst」、「EURCHF.hst」、「EURJPY.hst」、「EURUSD.hst」、「GBPJPY.hst」、「GBPUSD.hst」、「USDJPY.hst」の各ファイルがあるとする。これをcsvファイルに変換する。csvファイルは新たに生成され、hstファイルはそのまま残る。

import forex_system as fs
fs.convert_hst_to_csv(audjpy=1, audusd=1, eurchf=1, eurjpy=1, eurusd=1, gbpjpy=1, gbpusd=1, usdjpy=1)

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

例として「~/historical_data」フォルダーに「AUDJPY.csv」、「AUDUSD.csv」、「EURCHF.csv」、「EURJPY.csv」、「EURUSD.csv」、「GBPJPY.csv」、「GBPUSD.csv」、「USDJPY.csv」の各ファイルがあるとする。これを使って2007年1月1日から2017年1月1日までの各足を生成する。

import forex_system as fs
fs.get_historical_data('2007.01.01', '2017.01.01', audjpy=1, audusd=1, eurchf=1, eurjpy=1, eurusd=1, gbpjpy=1, gbpusd=1, usdjpy=1)

備考

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

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

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

ヒストリカルデータのダウンロード (2017/06/06)

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

以下のコマンドを実行して「ホーム」フォルダーに「historical_data」フォルダーを作成する。

$ mkdir ~/historical_data

これをヒストリカルデータを保存するフォルダーとする。

古いヒストリカルデータの削除

初めてヒストリカルデータをダウンロードする場合、この手順はいらない。すでにヒストリカルデータをダウンロードしていて、新しいデータをダウンロードする場合に実行する。

以下のコマンドを実行して「~/historical_data」フォルダー内のファイルを削除する。

import forex_system as fs
fs.clean_historical_data_folder()

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

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

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

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

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

⑤「終了日時」で2017年1月1日を選択する(やはり日付が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日前後することがある。よく分からないが気にしない。

ファイル名の変更

ファイル名には日付などが入っているが邪魔なので通貨ペア名以外の部分は削除する。

import forex_system as fs
fs.rename_historical_data_filename()

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更新)

oandapyのインストール

oandapyをインストールする。oandapyはOANDAの口座からデータを取得するので、OANDAのデモ口座も開設しておく。

oandapyのインストール

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

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

OANDAのデモ口座の開設

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

https://www.oanda.jp/

②右上の「デモ申込」ボタンをクリックする。

③「無料デモ口座開設フォーム」の「デモ口座利用規程及び個人情報のお取扱いについて」で「同意・承諾します」にチェックを入れる。

④「お申込みフォーム」の「お名前」の「姓」に姓を全角で入力する。

⑤「名」に名を全角で入力する。

⑥「フリガナ」の「セイ」に姓を全角カナで入力する。

⑦「メイ」に名を全角カナで入力する。

⑧「性別」で「男性」、あるいは「女性」を選択する。

⑨「連絡メールアドレス」でメールアドレスを入力する。

⑩「連絡メールアドレス(確認用)」でもう一度メールアドレスを入力する。

⑪「電話番号」で電話番号を入力する。

⑫「勧誘の受諾の意思の表明」で「同意・承諾します」にチェックを入れる。

⑬「勧誘招請について」で「同意・承諾します」にチェックを入れる。

⑭「デモ口座ID(fxTradePracticeID)を発行する」ボタンをクリックする。

⑮登録したメールアドレスに送られたIDとPWを確認する。

アカウントIDとアクセストークンの取得

上に続けて実行する。

①「無料デモ口座開設フォーム」で「デモ ログインへ」ボタンをクリックする。

②「デモ口座ログイン」で「お客様のIDを入力してください」にIDを入力する。

③「パスワードを入力してください」にPWを入力する。

④「デモ口座ログイン情報を記憶する」にチェックを入れる。

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

⑥(ブラウザがFirefoxの場合のみ)「このログイン情報を Firefox に記憶させますか?」で「記憶」ボタンをクリックする。

⑦「口座情報」の「アカウント」で「Primary」の右にある数字をメモする。

これがAPIアクセスに必要なアカウントIDとなる。メールアドレスに送られたIDではないので注意。

⑧「MT4/API関連」の「APIアクセスの管理」をクリックする。

⑨「REST APIアクセスの管理」で「発行する」ボタンをクリックする。

⑩「あなたのPersonal Access Tokenは下記となります。」の下のトークンをメモする。

これがAPIアクセスに必要なアクセストークンとなる。

(2017/02/08更新)