
利益の壁を突破!変動制御で実現した上積み
研究87で「スリーブ分散はv1.2.0が天井(Calmar~1.4/DD10%月+1.17%)」と判明 → 分散(相関を足す)でなく**別次元=時間軸でリスク平準化**: ポートフォリオ全体の実現ボラを一定に保つよう日々のエクスポージャーを動的調整(高ボラ/chop局面で縮小・静穏で拡大)。リーク防
本記事は「利益の壁を突破!変動制御で実現した上積み」の検証を、はじめての方にも分かるようにまとめたものです。
研究88 別アプローチ: ポートフォリオ・ボラ・ターゲティング — 初の本物の上積み 前回の研究87で、複数のEAを組み合わせる「スリーブ分散」という手法の限界が見えてきたんです。「Calmar Ratio(カルマー比率=年間平均利益÷最大ドローダウン。数値が大きいほど優秀)」や「DD10%月(最大ドローダウン10%に抑えた場合の月利)」といった指標が、ある一定のレベルで頭打ちになってしまうことが分かったんですね。 そこで今回は、EAの組み合わせ方だけでなく、「時間軸」でリスクをコントロールするという、まったく新しいアプローチを試してみました!
どんなアイデア?
今回の新しいアイデアは、「ポートフォリオ全体のボラティリティ(値動きの激しさ)を一定に保つ」というものです。例えるなら、車のアクセルとブレーキを、相場の状況に合わせて自動で調整するようなイメージですね。 具体的には、
- 相場が荒れていてボラティリティが高い時(値動きが激しい時)は、EAが持つポジションの量を自動的に縮小します。
- 逆に、相場が落ち着いてボラティリティが低い時(値動きが穏やかな時)は、ポジションの量を拡大して、積極的に利益を狙いに行きます。 こうすることで、どんな相場状況でも、全体の「リスクの大きさ」を常に一定に保つことを目指すんです。 この調整は、未来の相場を予測するのではなく、前日までのボラティリティデータを使って行うので、未来の情報を先読みしてしまう「リーク」の心配もありません。
以前の方法とは何が違うの?
以前の研究(研究26や52)で、「エクイティ(口座残高)が移動平均線を下回ったらロットを半分にする」というような手法も試していました。あれは「利益」が減ってきたら対応する、という「リターンベース」の考え方だったんです。でも、これだとどうしても対応が後手に回りがちですよね。 今回の「ボラティリティ・ターゲティング」は、相場の「値動きの激しさ」という、まさに「リスクそのもの」に直接連動してロットを調整します。 だから、より早く、より効果的にリスクを管理できると期待できるわけなんです!
どうやって試した?
パラメータの頑健性をチェック!
この新しい方法が本当に効果があるのか、そして、たまたま良い設定が見つかっただけの「過剰最適化」ではないのかを確認するため、まずは様々な設定でテストを行いました。 例えば、「過去何日間のボラティリティを参考にするか(窓)」や、「どれくらいまでロットを増やせるか(キャップ)」といった設定を色々と変えて、合計12パターンで試したんです。 その結果、なんと全てのパターンで、これまでの最高水準(v1.2.0)を上回るパフォーマンスを記録しました! これは、特定の条件でしか機能しないような「まぐれ」ではなく、どんな設定でもある程度の効果が期待できる、とても「頑健(ロバスト)」な手法だと言えそうです。 最もパフォーマンスが良かった設定では、DD10%月(最大ドローダウン10%に抑えた場合の月利)が**+1.63%と、これまでの記録(+1.17%)から約39%も向上**しました。
未来の情報を知らない「前進検証」もクリア!
さらに、より実践に近いテストとして、「前進検証」も行いました。これは、未来の情報を一切使わずにテストする、言わば「本番さながらのシミュレーション」です。特定の期間で最適化された設定が、その後の未知の相場でも通用するかどうかを確かめる、とても大事な検証なんですね。 設定は「過去40日間のボラティリティを参考に、ロットは最大2倍まで」という条件でテストしました。
実際のEAエンジンに組み込んで「本気のバックテスト」!
この素晴らしい結果を受けて、実際にEAのバックテストエンジンにこの機能を組み込んで、よりリアルな環境での検証を行いました。実際のポジションサイズ調整や取引コストなども考慮した、**「本気のバックテスト」**です。 今回の実装では、各EAがそれぞれ自分のボラティリティを管理する「分散型」という形を取りました。これなら、個々のEAが自律的にリスクを調整できるので、運用もシンプルで実用的です。
結果はどうだった?
利益アップ、損失は減る、勝率も上がる!全方位で改善!
「前進検証」と「本気のバックテスト」の結果は、まさに驚くべきものでした!
- トータルの利益: 元々+152.7%だったものが、**+185.1%**へと大幅アップ!
- 最大ドローダウン(一時的な最大損失): -9.9%から**-8.9%**へと減少! ドローダウンは登山でいう「どれだけ下りに転じたか」のようなもので、これが減るのは精神的にも非常に安心ですよね。
- Calmar Ratio(カルマー比率): 1.41から1.88へ向上!
- PF(プロフィットファクター=総利益÷総損失。1を超えると黒字): 1.45から1.48へ向上!
- 勝率(MC全体): 92%から**94%**にアップ!
- DD10%月(最大ドローダウン10%に抑えた場合の月利): +1.17%から**+1.57%へと、約34%も向上しました! これはまさに、「利益アップ、損失は減る、PFも上がる、勝率も上がる」という、FXトレーダーが夢見るような理想的な改善と言えるでしょう! 平均レバレッジが1.04倍と、ほとんどレバレッジを増やしていないのにこの結果というのは、単にロットを増やしたのではなく、「リスクの配分が上手になった」**証拠なんです。
荒れた相場に強く、日中もより安全に!
相場状況ごとの動きも見てみました。
- 相場が荒れていたり、方向感がなくレンジ相場が多かった2015年〜2020年の期間では、特にパフォーマンスが大きく改善しました。Calmar Ratioが0.55から0.92へと大幅アップです。
- 逆に、ボラティリティが低く強いトレンドが出た2021年〜2026年の期間は、EAが積極的にロットを増やしたことで利益も増えましたが、同時にドローダウンも少し増えるという、狙い通りの動きも確認できました。 つまり、荒れている時はしっかりリスクを抑えて守り、落ち着いている時は積極的に攻める、という理想的なリスク管理ができていたわけです。 さらに注目すべきは、日中のリスクも大幅に改善されたことです。EAが最も苦手とする、値動きが激しくなりやすい日中の相場(M1日中)でも、最大ドローダウンが2.83%から2.10%に減少し、「損切り0日」という安全性をしっかり維持できました。 これは、ボラティリティが高い時にロットを縮小する仕組みが、日中のリスクも効果的に抑え込んでいる証拠ですね。
Core System v1.3.0 として正式採用!
今回の「ボラティリティ・ターゲティング」は、これまでの研究で、前バージョン(v1.2.0)を超えるのが難しいとされてきた壁を、**前進検証付きで唯一クリアした「本物の進化」**と言えます! 「利益アップ、損失は減る、PFも上がる、勝率も上がる、日中もより安全に」という、まさに「全方位での厳密な改善」が確認されたんです! この素晴らしい成果を受けて、この機能は「Core System v1.3.0」として正式に採用されることになりました!
ここから学んだこと
集約型よりも分散型を選んだ理由
実は、もう一つ別の方法も試していました。それは、全てのEAのボラティリティをまとめて計算し、それに基づいて全体のレバレッジを調整する「集約型」というアイデアです。 この集約型を試したところ、なんと、先ほどの分散型よりもさらにパフォーマンスが良くなることが分かりました! 月利換算で約+0.19%(+1.56% vs +1.37%)も上積みされるんです。 「え、じゃあ集約型の方が良いじゃん!」って思いますよね? 確かにパフォーマンスだけ見ればそうなんです。でも、この集約型を導入するには、全てのEAの動きを監視して、全体のレバレッジを調整する「司令塔」のような役割が必要になるんです。 これだと、運用が複雑になりますし、もし司令塔がうまく機能しなくなったら、システム全体が止まってしまう「単一障害点」が増えてしまいます。 そこで、私たちは**「各EAが自分でリスクを管理する分散型」を「Core System v1.3.0」として採用する**という判断をしました。パフォーマンスは少し劣りますが、それぞれのEAが自律的に動くため、導入が簡単で、システム全体の安定性も高まるからです。FX自動売買は、安定して長く運用できることが何よりも大切ですからね。 集約型の研究は、将来的に複数の口座をまとめて運用する際などに役立つ「資産」として、記録に残しておくことにしました。 今回の研究で、EAのパフォーマンスを根本から底上げする、まさに「本物の上積み」が実現しました。新しいCore System v1.3.0の登場で、今後のEA運用がさらに安定し、利益を伸ばしてくれることを期待しています!
この検証のつながり
この検証は、過去の次の検証を踏まえています(前回ダメだった→今回こうした、別ロジックとの比較など)。
関連コード(再現用)
この検証は以下のスクリプトで再現できます(リポジトリ参照)。
btengine/portfolio_engine.py