EA開発をするのに欠かすことの出来ないバックテスト。
ロジックを思い付いてバックテスト、そこからちょっと変えてどうなるかバックテスト。と地味な作業が延々と続きます。
この最初のバックテスト結果を基準にして良くなった悪くなったと検証していきますので、基準となる最初のバックテスト結果が変わってしまうと困るわけです。
MT4を触り始めたばかりの頃、バックテスト結果が変わってしまう原因がわからず、ネットにも落ちておらず(見つけられず)途方に暮れました。。。
同じ条件ならばバックテスト結果(以後「BT結果」)はいつも同じとなる方法をお教えします。
えっ!同一設定なのにBT結果が変わっている!
色々とロジック検証をしているなかで
「これはいい感じ♪」
というのが見つかり、さらに検証した挙句に
「なんか変だな?」
と違和感を感じ、最初の基準とした設定で再度バックテストを行う。
その結果が違っていることに気が付いたとき、そこそこの絶望感を感じることが出来ます!
「追加したロジックが効果あると思っていたのが実は違っていた」といったことが起きますので、いつから変わってしまっていたのか調べる必要が出てきます。
「何も変えていない」のは何か?
何も変えていないというのが何かを記載しておきます。
- EAパラメータ設定
- 通貨ペア(EURJPY)
- BT期間(13年0ヵ月)
- BTモデル(全ティック)
- スプレッド(固定値)
- ヒストリカルデータ
- 初期証拠金(10,000 USD)
あれ?BT結果が変わらない!
気を取り直してBT結果が変わってしまったのがどのタイミングからかを地道に探します。そうすると
前日のBT結果と本日のBT結果が同じ結果にならない!
ことに気が付きます。さらに、
本日は何回BTをやってもBT結果が変わらない!
ことにも気が付きます。
今思えば簡単なことですが当時は全く気が付かず。
ポイントは前日が金曜日、本日は土曜日でした。
これがBT結果が変わる犯人だった!
原因は
「換算レートが変化したから」
でした。
最近のレートを使って説明します。
ある日の金曜日の換算レートとBT結果
以下はBTの口座通貨は日本円、EURJPYで動作するEAの2007年3月のBT結果です。
仮に金曜日のBT結果とします。
155.791で0.5ロットの売りポジションを持ち、ストップを100pips上の156.791にセットしています。
その後ストップにかかり-451.18ドルの損益となっております。
この損益の計算にはそのときの気配値が使われます。
-100pipsの損失となり、0.5ロットのポジションを持っていたので損失額は日本円で-5万円
バックテストはドル建てで行っているので気配値でドルに換算して
-50,000 ÷ 110.820 = -451.18
となります。
今度は同じ条件で気配値が変わる=日本円からドルへの換算レートが変わった場合の例です。
ある日の土曜日の換算レートとBT結果
以下は上記と同一BT条件でのBT結果です。
上記BTをした次の日、土曜日のBT結果と仮定しております。
前日と同じポイントにて155.791で0.5ロットの売りポジションを持ち、ストップを100pips上の156.791にセットしています。
その後ストップにかかり-449.52ドルの損益となっております。
この損益の計算にはそのときの気配値が使われます。
-100pipsの損失となり、0.5ロットのポジションを持っていたので損失額は日本円で-5万円
バックテストはドル建てで行っているので気配値でドルに換算して
-50,000 ÷ 111.228 = -449.52
となります。
金曜日の損益 = -451.18ドルに対して1.66ドル低い数字になりました!
変えたのはBTを実施した曜日、それにより変わったのは気配値、つまり損益を円からドルに換算するレートが変わったわけです。
また土曜日はレートが動きませんので何回BTを行ってもBT結果は同じになります。それに対して例えば金曜日はBTをする毎にBT結果が変わることになります。
例として金曜日と土曜日でBT結果が変わる事象の説明でした。
BT結果をいつも同じにする方法
原因がわかったところでBT結果を変えないようにする方法です。
初期証拠金を円建てにする
通貨ペアが対円の場合、BTの初期証拠金を円建てにしておけば換算レートを気にする必要がなくなります。これにより何も設定を変えなければ常に同じBT結果とすることが出来ます。
長いEA開発においてたくさんのBTを行いますが、
「あのときの、あのパラメータのBT結果はどうだったっけかな?」
となったときに、いつでもその時の記録を見にいくことが出来ます。
Tips
MT4デフォルトではドロップダウンリストに円が選べませんが「JPY」と手入力することで円建てになります。
重要
市販EAなどのBT結果はドル建てが多いです。
この場合、最大ドローダウンもドルになります。もし最大ドローダウンになった年が2011年の場合なんと1ドル75円ですよ!
例えば最大ドローダウン1,000ドルのBT結果があった場合、1ドル100円のときは10万、1ドル75円のときは7.5万となります。
市販EAを購入した際には円建てでBTを実施して日本円でBTレポートを確認するようにしております。皆さんにもおススメします。
自作EAに関しましても円建てにてバックテストを行い、公開しております。
BTするときはログオフする
ドル建てでバックテストすると毎回BT結果が変わってしまうことになりますが、ログオフすることにより気配値(換算レート)を固定にすることが出来ます。
つまりログインさえしなければBT結果が変わるということにはなりません。
ログオフさせる方法はパスワードを消去してログインです。これによりログイン失敗となりログオフすることになります。
重要
ログインしたままバックテストを行うのはおすすめしません。
オフラインデータにオンラインデータが上書きされてしまう場合があり不整合チャートエラーの原因になります。
どっちが良いのか?
2つの方法を書きましたが、どちらも行うことがおススメとなります。
理想としてはバックテスト専用口座を用意、バックテストをするときは
・円建てにする
・ログオフする
でした。
コメント