EA開発では「何を加えるか」より「何を捨てるか」の方が難しいです。
凜(RIN)の開発で最も苦労したのは、ロジックを削ることでした。
「この条件も加えればもっと精度が上がるのでは」「この場合はこう対処すれば良いのでは」という誘惑は常にありました。しかしその誘惑に従うたびに、ロジックは複雑になり、フォワードへの再現性が下がっていきました。
凜はアノマリー型EAです。市場の「統計的な癖」を利用するロジックという特性上、シンプルさが命です。条件を積み上げるほど、その優位性が失われていきます。
この記事では、凜の開発で実際に試みて捨てたロジックと、「削る」ことを選んだ理由を正直に解説します。
アノマリーEAにおける「シンプルさ」の意味
まずアノマリーEAの特性を理解することが重要です。
アノマリーとは「理論的には説明できないが、統計的に繰り返し発生する相場の偏り」です。
凜はUSDJPYの特定の時間帯・曜日に発生する統計的な傾向を利用します。
この「統計的な傾向」が機能するためには、繰り返し同じ条件が発生することが前提になります。
条件を複雑にすればするほど、「その条件が再び発生する確率」が下がります。
例えば「毎週月曜日の特定時間帯に動きやすい」という傾向があるとします。これはシンプルな条件なので、毎週その条件が揃います。
しかし「毎週月曜日の特定時間帯で、かつ前週の値動きが一定条件を満たし、かつ特定のインジケーターが一定値以上で、かつ経済指標がない日に動きやすい」という複雑な条件にすると、その条件が揃う頻度が激減します。
バックテストではその複雑な条件に「たまたま当てはまった過去」しか記録されていないため、見かけ上は良い結果が出ます。しかしフォワードでその複雑な条件が再現される保証はありません。
これが過剰最適化の本質であり、アノマリーEAが特にこのリスクを抱えやすい理由です。
凜の開発で試みて捨てた①:祝日前倒しトレード
凜の開発で最初に直面した問題は「祝日前後の成績不安定」でした。
祝日前は流動性が低下します。ポジション調整の動きが出ます。通常の値動きのパターンが崩れます。これが凜の成績を不安定にする原因でした。
対策として試みたのが「祝日前倒しトレード」というロジックです。
祝日当日はトレードしない代わりに、本来祝日にするはずのトレードを前日に前倒しで実行するというアイデアです。
バックテストで検証しました。
結果は明確な改善が確認できませんでした。
さらに問題がありました。「祝日前倒し」という条件を加えることで、ロジックが複雑になりました。複雑になった分、過剰最適化のリスクが上がります。そして「どの祝日を対象にするか」「何日前から前倒しにするか」というパラメータが増えるため、最適化の余地が広がりすぎる問題が生まれました。
「明確な改善なし・ロジック複雑化・過剰最適化リスク増大」という3つの問題が確認されたため、祝日前倒しトレードは不採用にしました。
凜の開発で試みて捨てた②:時間帯の細分化
次に試みたのが、エントリー時間帯のさらなる細分化です。
最初は大まかな時間帯でアノマリーを設定していました。「この時間帯に動きやすい」という大きな括りです。
バックテストを細かく分析すると「この時間帯の中でも、特にこの30分間が成績が良い」というパターンが見えてきました。
「より良い時間帯に絞ればPFが上がるのでは」という発想で、時間帯を細分化する方向で検証を進めました。
確かにバックテストのPFは上がりました。
しかし細分化した時間帯はフォワードで再現されるでしょうか。
答えはNOでした。
「過去のデータの中で成績が良かった30分間」は、そのデータに特有のものである可能性が高いです。市場参加者の行動パターンが変われば、その30分間の優位性は消えます。
時間帯の細分化は過去への過剰適応であると判断して、採用しませんでした。
大まかな時間帯でも統計的な優位性が確認できるなら、そちらの方がフォワードへの再現性が高いという結論です。
凜の開発で試みて捨てた③:曜日×時間帯の複合フィルター
「曜日と時間帯の組み合わせで成績をさらに絞り込めないか」という発想も試みました。
「月曜日のこの時間帯」「水曜日のこの時間帯」というように、曜日と時間帯を組み合わせた複合フィルターです。
バックテストでは一部の組み合わせで良い結果が出ました。
しかしこれも祝日前倒しや時間帯細分化と同じ問題に直面しました。
複合フィルターを使うと取引数が減ります。取引数が減ると統計的な信頼性が低下します。さらに「この曜日とこの時間帯の組み合わせ」という条件は、過去のデータに特有のパターンを拾っている可能性が高く、フォワードでの再現性が低いと判断しました。
複合フィルターは不採用にして、よりシンプルな条件に戻しました。
GENESISとAXISの開発経験が「削る」判断を後押しした
凜でこれらのロジックを捨てる判断をできたのは、GENESISとAXISの開発経験があったからです。
GENESISの開発でも、初期は「フィルターを増やして精度を上げる」方向で試みました。しかし最終的に「トレードする相場を選別する」というシンプルな方向に転換しています。
AXISの開発では、ロット可変方式を採用したことで複雑なリスク管理が生まれ、固定ロットに変更することで問題が解決しました。
3本のEA開発を通じて一貫して見えてきた原則があります。
「複雑にすることで解決しようとしたものは、シンプルにすることで解決できることが多い」
凜の「削る」判断は、この原則の延長線上にあります。
削った結果、凜に残ったもの
祝日前倒しトレード・時間帯細分化・曜日×時間帯複合フィルターを全て捨てた結果、凜のロジックは非常にシンプルになりました。
シンプルなロジックには批判的な意見もあります。「こんなシンプルなロジックで本当に機能するのか」という疑問です。
しかし凜の10年バックテストの結果はこうです。
PF1.47・最大DD7.20%・取引数451・勝率79.16%
PF1.47はGENESIS(1.17)・AXIS(1.25)より高い水準です。最大DD7.20%も3本の中で最も低い水準です。
複雑なロジックを削ぎ落とした結果として、3本の中で最もバランスの良い数値が出ています。
これは偶然ではありません。本質的な優位性だけを残したことで、長期にわたって安定した成績が出やすい設計になっているからです。
アノマリーEAを選ぶときの注意点
市場には「アノマリー型EA」を謳うEAが存在します。
しかしアノマリーという言葉は定義が曖昧で、過剰最適化されたEAに「アノマリー」というラベルを貼るだけのケースもあります。
アノマリーEAを選ぶときに確認すべきポイントはこうです。
①ロジックがシンプルか
アノマリーEAは条件がシンプルであるほど、フォワードへの再現性が高い傾向があります。複雑な条件が積み重なっているEAは過剰最適化の可能性を疑ってください。
②取引数が十分か
アノマリー型は条件が限定的なため取引数が少なくなりがちです。取引数が少ないと統計的な信頼性が低下します。
③フォワードデータがあるか
アノマリーはフォワードで再現されるかどうかが全てです。バックテストだけのEAでは判断できません。
④過剰最適化の疑いがないか
PFが異常に高い・DDが極端に小さいアノマリーEAは過剰最適化の可能性があります。
「削る」という選択が長期運用を可能にする
EA開発において「削る」という選択は勇気が必要です。
「この条件を入れればもっと良くなるかもしれない」という可能性を捨てることだからです。
しかし凜の開発経験から確信しているのは、「可能性を捨てる勇気が、再現性を守る」ということです。
バックテストでの可能性を追いかけることは、フォワードでの再現性を犠牲にすることです。
フォワードで安定して機能するEAを作るためには、バックテストの可能性を一部諦めることが必要です。
凜が現在の形に至るまでに捨てたロジックの数は、採用したロジックよりも遥かに多いです。
その「捨てた選択の積み重ね」が、10年バックテストでPF1.47・DD7.20%という安定した数値につながっています。
アノマリーEAの詳細な解説はこちらで確認できます。
まとめ
凜の開発で捨てたロジックと、「削る」ことを選んだ理由をまとめます。
祝日前倒しトレード・時間帯細分化・曜日×時間帯複合フィルターの3つを試みて、いずれも不採用にしました。
不採用にした共通の理由は「明確な改善が確認できない・ロジックが複雑化する・過剰最適化リスクが上がる」という3点です。
アノマリーEAはシンプルさが命です。条件を増やすことで精度を上げようとするアプローチは、過去への過剰適応につながりやすく、フォワードへの再現性を損ないます。
「何を加えるか」より「何を捨てるか」。この判断こそが、長期で機能するEAを作るための核心です。