合格5本、正体は1つ――129回のバックテストが教えてくれたこと
この記事でわかること
- バックテストを回す前に「探し方」と「採用条件」を固定するやり方
- 129回の検定で通った5本が、実は同じ1つの現象だったという結果
- 成績が一番良いルールをあえて選ばなかった理由
はじめに:探す前に、探し方を決める
EAのルールを探すとき、多くの人は「試して、良さそうなら条件を足して、また試す」を繰り返します。私も以前はそうでした。ですがこのやり方には、試した回数が増えるほど、偶然うまくいったルールを本物と見誤る確率が上がるという弱点があります。
そこで今回は順番を逆にしました。バックテストを1回も回す前に、次のことをすべて文書にして固定しました。
- どの銘柄・時間足を探すか
- どの戦略の型を試すか
- パラメータを何通り試すか
- どの条件を満たしたら採用するか
- 何をやってはいけないか
これを「事前宣言」と呼んでいます。この記事では、事前宣言をしてから129回の検定を回した結果、通過した5本が実は同じ1つの現象だったという話を書きます。
探索の範囲を先に固定する
固定した探索の範囲は次のとおりです。
| 項目 | 固定した内容 |
|---|---|
| 銘柄 | 主要な通貨ペア2つ |
| 時間足 | 15分足・30分足(1つ目のペア)、1時間足(2つ目のペア) |
| 戦略の型 | 8つ(レンジブレイク、平均回帰、時間帯の偏りなど) |
| パラメータ | 型ごとに最大12通り |
| 損切り・利確 | 損切りはATRの2倍、利確は損切り幅の2倍で固定(探さない) |
| 期間の分け方 | ある日付より前を学習用、後を検証用 |
5分足以下は最初から対象外にしました。実際のコストを測ると、どの損切り幅でもコストが利益の余地を食い尽くしてしまい、成立しなかったからです。
ひとつ、途中で迷った点があります。実装の途中で「損切りと利確の幅も何通りか試したい」と思い、そういう版を書きかけました。ですが組み合わせを数えると検定の総数が516通りになり、宣言で決めた上限の288通りを超えていました。試す数が増えるほど偶然通るものも増えるので、宣言を優先して固定に戻しました。最終的な検定の総数は、43通り × 3(銘柄と時間足の組)で129通りです。
採用の条件も先に決める
採用の条件は7つで、すべて満たしたものだけを次の段階(実際の資金を使わない観察運用)に進めると決めました。
| # | 条件 | ねらい |
|---|---|---|
| 1 | 検証期間のプロフィットファクター1.2以上 | 採用の基本ライン |
| 2 | 検証期間の取引数30件以上 | 少ない件数での偶然を除く |
| 3 | 月10件以上の頻度 | 判断に1年以上かかるものは最初から採らない |
| 4 | 平均利益がコストの3倍以上 | コスト負けを事前に除く |
| 5 | 学習期間のプロフィットファクター1.0以上 | 学習期間が赤字なら、検証期間の黒字は偶然を疑う |
| 6 | 最大1件を除いても平均がプラス | 1件の大勝ちに頼っていないか |
| 7 | 隣の時間足か、もう一方の銘柄でもプロフィットファクター1.0以上 | 多数の検定の中の偶然を除く |
特に7番が今回の要です。129回も試せば、何の優位性もないルールでも、たまたま条件1〜6を満たすものが出てきます。そこで「条件を少し変えても生き残るか」を要求しました。
あわせて、やらないことも決めました。結果を見てから戦略の型を足さない。条件の数値を動かさない。7番だけ落ちた候補を「惜しいから」と採用しない。1本も通らなければ、それ自体を「この範囲には取れる優位性がない」という結果として受け入れる。
結果:通ったのは5本、ただし中身は1つ
129通りのうち、条件1〜6を通ったのは5本で、その5本は7番も通りました。
| # | 時間足 | パラメータ | 検証期間のPF | 取引数 | 学習期間のPF |
|---|---|---|---|---|---|
| 1 | 15分足 | 参照4本・閾値0.8 | 1.58 | 65 | 1.23 |
| 2 | 30分足 | 参照4本・閾値0.5 | 1.48 | 67 | 1.10 |
| 3 | 15分足 | 参照8本・閾値0.8 | 1.44 | 72 | 1.09 |
| 4 | 30分足 | 参照8本・閾値0.8 | 1.35 | 56 | 1.06 |
| 5 | 30分足 | 参照4本・閾値0.8 | 1.34 | 58 | 1.10 |
5本の中身を確かめると、すべて同じ通貨ペアの、同じ市場が開く時間帯に、直前の数本の方向へ順張りするものでした。2つの型は名前こそ違いましたが、実装はほぼ同じでした。もう一方の通貨ペアでは、同じ発想のルールのプロフィットファクターは0.86〜0.98で、通りませんでした。
つまり、129回の検定で見つかった独立した発見は、実質1つです。
これは悪い知らせではありません。5本が無関係にばらばらと散らばっていたら、それぞれが偶然である可能性を疑う必要がありました。同じ現象が2つの時間足とパラメータ違いで再現しているのは、むしろ偶然ではない側の材料です。一方で、「特定の通貨ペアの特定の時間帯だけの現象」であり、汎用的なルールではないこともはっきりしました。
どの1本を選ぶか:成績が一番のものは選ばない
5本のうち採用したのは、プロフィットファクターが最も高い1番ではなく、3番です。
理由は、時間足を変えたときの成績の安定です。参照8本の設定は15分足で1.44、30分足で1.35と、差が0.09でした。参照4本の設定は1.58と1.34で、差が0.24ありました。時間足を変えても成績が大きく崩れない方を、本物に近いと判断しました。
統計的にはまだ決着していない
採用を決めたあと、参考値としてブートストラップ(取引を復元抽出で1万回引き直す方法)で頑健性を調べました。結果は、5本すべて「ゼロと区別できない」でした。
| # | 平均損益の95%信頼区間(R) | 平均がプラスになる確率 |
|---|---|---|
| 1 | −0.042 〜 +0.679 | 96% |
| 2 | −0.082 〜 +0.635 | 95% |
| 3(採用) | −0.074 〜 +0.593 | 94% |
| 4 | −0.165 〜 +0.585 | 83% |
| 5 | −0.171 〜 +0.581 | 85% |
※R は「損切り幅1回分」を単位にした損益です。
ただし、理由は取引数の少なさであって、外れ値への依存ではありません。どの候補も、上位5件の大勝ちを除いても合計の符号は反転しませんでした。採用した3番で信頼区間の下限がゼロを上回るには、計算上およそ118件が必要です。この時点では72件でした。
ここで大事なことがひとつあります。この頑健性の検査は、候補を選んだ後に作ったものです。検査の結果を見ると1番の方が決着に近い(必要な件数が81件)のですが、それを見てから選び直すのは、結果を見た後の選択になります。なので選定は変えず、この回は参考値として記録するだけにしました。次の探索からは、この検査を最初から事前宣言に組み込んでいます。
データが2日増えただけで、候補が減った
もうひとつ、記録しておきたい事実があります。最初に回したときは7本の候補が残りましたが、2日分のデータを足して回し直すと5本に減りました。
たった2日で2本が落ちたのは、この探索が採用条件のぎりぎりのところに張り付いていることを示しています。採用した3番は両方で残りましたが、「条件を通った」ことが「強い優位性がある」ことを意味しないのは、この点からもわかります。
コストの前提が間違っていた
最後に、失敗の記録です。検証の前提にしていた取引手数料は、1ロット往復600円でした。ところが後で業者の公式の表記を確認すると、900円でした。
手数料を直すと、主に使った通貨ペアの実質コストは0.38pipsから0.621pipsへ、約64%上がりました。採用した1本は直した後も条件4(平均利益がコストの3倍以上)を通る見込みでしたが、余裕は2.7倍から1.7倍に縮みました。コストは「だいたいこのくらい」で済ませず、一次情報で確かめる必要があります。
まとめ:多数の検定と付き合うための5つの習慣
- 探す範囲、試す数、採用の条件を、バックテストを回す前に文書にする
- 試す数に上限を決め、超えそうなら探す範囲の方を削る
- 条件を少し変えても生き残ることを、採用の条件に入れる
- 通った候補が「何本」あるかより、「何種類の現象」なのかを数える
- 後から作った検査で、先に決めた選定を覆さない
129回試して、残ったのは1つの現象でした。この1本が本物かどうかは、まだわかりません。わかるのは、実際の資金を入れない観察運用で十分な件数がたまってからです。次回は、すべての条件を通ったのに昇格を見送った、別のルールの話を書く予定です。
※本記事は筆者自身の検証の進め方を紹介するもので、特定の銘柄・手法・EAの売買を勧めるものではありません。過去の検証結果は将来の成績を保証するものではありません。