/api/similar-backtest ・ /api/similar「今日と似た相場は過去にいつあり、その後どうなったか」——直感的で、実際いくつものサービスが 同種の機能を提供しています。当サイトも類似局面として実装しました。 ではそれは、明日を教えてくれるのでしょうか。指標を出す以上は検証とセットにするという 恒久ルールにもとづいて検証しました。
結論各営業日の相場を、10個の指標からなる状態として表しました。25日騰落レシオ/5日騰落レシオ/日経平均の5日騰落率/同20日騰落率/Breadth Gap/値上がり銘柄比率/上位5銘柄の寄与集中/セクター寄与の分散/VIX水準/ドル円の20日騰落率です。
各指標を過去の分布で標準化し、2つの日のあいだの距離を「1指標あたり平均何σ離れているか」として計算します。距離が小さいほど似た相場です。この距離で過去を検索し、見つかった類似日のその後の日経平均の動きを集計します。
検証の問いは単純です。「類似日のその後の平均」が高い日は、実際にその後よく上がったのか。
検索は各営業日についてその時点で入手できた情報だけでやり直しています。標準化に使う分布はその日までのもの(未来の分布で今日を測らない)、候補は20営業日以上前の日に限り、類似日の「その後」も検索時点で確定しているものだけを採用しています。
バックテストの成績が最も良く出る距離を選ぶことは禁じ手です。それは当サイトが重みの調整を拒否してきた原則の閾値版で、いくつも試して一番良かったものを採れば、偶然の山を拾うだけになります。
そこで距離の分布そのものから決めました。20営業日以上離れた全ペア97,903組の距離を出し、その分位点を基準にします。ここにリターンの情報は一切入っていません。
| 全ペア距離の分位点 | 距離 | 10件以上の類似日がある営業日 | エピソード数の中央値 | 延べ日数の中央値 |
|---|---|---|---|---|
| 下位1% | 0.622 | 18.1% | 1 | 1 |
| 下位2.5% | 0.71 | 44% | 3 | 3 |
| 下位5%(採用) | 0.793 | 63.1% | 5 | 8 |
| 下位10% | 0.896 | 81.2% | 8 | 20 |
この分布には、それ自体で意味のある数字があります。97,903組の最小距離が0.305——2年でもっとも似ている2日ですら、1指標あたり平均0.305σ違います。中央値は1.324です。「本当に似た日」は、思っているよりずっと少ない。
この記事でもっとも重要な指摘です。
類似検索が「似ている日」を20日返したとき、それを20の事例だと思って読むのが自然です。「過去20回、こういう相場がありました」と。しかし実際には、そうなっていません。
相場の状態は数日単位で連続します。ある急落局面が3日続けば、その3日はどれも今日と似ていると判定され、3件として数えられます。つまり「20日」の中身は、同じ出来事を何度も数えたものである可能性が高いのです。
例えるなら、ある薬の効果を20人で確かめたつもりが、実は3人を週に何度も測っていただけ、という状態です。人数は20に見えても、独立した事例は3しかありません。
そこで5営業日以内に隣り合う類似日を1つの「局面(エピソード)」にまとめて数え直しました。
| 距離の基準 | 延べ日数の中央値 | エピソード数の中央値 | 延べ日数のp90 | エピソード数のp90 |
|---|---|---|---|---|
| 下位1% | 1 | 1 | 7 | 5 |
| 下位2.5% | 3 | 3 | 17 | 9 |
| 下位5% | 8 | 5 | 20 | 11 |
| 下位10% | 20 | 8 | 20 | 12 |
もっとも緩い基準では、延べ20日が実質8局面でした。半分以下です。当サイトが採用している下位5%の基準でも、延べ日数の中央値8日に対しエピソード数の中央値は5です。
したがって検証では、予報値を「エピソードごとに平均してから、エピソード間で平均する」方式にしました。長く続いた局面が結果を支配しないようにするためです。表示側でも必ず「類似局面 9回(延べ20日)」の形式で出しています。「過去20回ありました」と読ませないための設計です。
この問題は当サイト固有のものではなく、類似検索という機能形式に必ず付いてまわります。同種の機能で「類似日20件」とだけ表示されている場合、その20件が何局面なのかは確認する価値があります。
| 距離の基準 | 期間 | 基準日数 | 素の相関 | 非重複サンプリング | ブートストラップ区間 | 月クラスタt | 判定 |
|---|---|---|---|---|---|---|---|
| 下位1% | 翌営業日 | 53 | 0.272 | n=53 / 0.272 | [0.018, 0.551] | 1.33 | 検出できず |
| 下位1% | 5営業日後 | 53 | 0.076 | n=21 / -0.148 | [-0.206, 0.445] | -0.53 | 検出できず |
| 下位1% | 20営業日後 | 53 | -0.112 | n=10 / 検定不能 | [-0.235, 0.251] | 1.31 | 検出できず |
| 下位2.5% | 翌営業日 | 129 | -0.021 | n=129 / -0.021 | [-0.161, 0.123] | 0.55 | 検出できず |
| 下位2.5% | 5営業日後 | 129 | 0.033 | n=40 / 0.076 | [-0.198, 0.287] | -0.05 | 検出できず |
| 下位2.5% | 20営業日後 | 129 | -0.165 | n=13 / 検定不能 | [-0.26, 0.201] | 0.24 | 検出できず |
| 下位5% | 翌営業日 | 185 | -0.081 | n=185 / -0.081 | [-0.235, 0.053] | -1.74 | 検出できず |
| 下位5% | 5営業日後 | 185 | 0.11 | n=48 / 0.147 | [-0.065, 0.317] | 0.95 | 検出できず |
| 下位5% | 20営業日後 | 185 | -0.139 | n=14 / 検定不能 | [-0.275, 0.181] | -0.1 | 検出できず |
| 下位10% | 翌営業日 | 238 | -0.115 | n=238 / -0.115 | [-0.233, 0.031] | -1.22 | 検出できず |
| 下位10% | 5営業日後 | 238 | 0.056 | n=55 / -0.033 | [-0.119, 0.23] | 1.43 | 検出できず |
| 下位10% | 20営業日後 | 238 | -0.119 | n=14 / 検定不能 | [-0.323, 0.281] | 1.04 | 検出できず |
翌営業日の符号一致率は53%、5営業日後は49.2%で、コインを投げるのと変わりません。
もっとも強く出たのは、もっとも厳しい基準(下位1%)の翌営業日で相関 0.272 でした。ただし基準日はわずか53日しかなく、基準をゆるめると符号ごと反転します(下位2.5%で-0.021、下位5%で-0.081、下位10%で-0.115)。関係が実在するなら基準を変えても向きは保たれるはずで、これはノイズと考えるのが自然です。
4通りの基準をすべて載せているのは、この種の反転を隠さないためです。仮に下位1%の結果だけを示せば「翌日に弱い予測力あり」と書けてしまいます。
採用基準(下位5%)の20営業日後で、実際に起きたことを示します。
| 検定の方法 | 結果 | 読み方 |
|---|---|---|
| 素の差の検定(各営業日を独立とみなす) | t = -2.15 | 基準の2を超えている=有意に見える |
| 月クラスタ補正(窓の重なりを考慮) | t = -0.1 | ほぼゼロ。有意性は消える |
| 非重複サンプリング(窓が重ならない基準日だけ) | n = 14 | そもそも検定に足りない |
日次の指標で20営業日先を見ると、隣り合う基準日の観測期間はほとんど重なります。1月10日から20営業日と1月11日から20営業日は、19日ぶんが同じ値動きです。これを独立した2つの観測として数えると、実際より多くの情報があるかのように扱ってしまい、標準誤差が小さく出すぎます。
素の検定では t = -2.15 と基準の2を超えており、これだけを見れば「有意」です。しかし月ごとに集計し直すと t = -0.1 になり、有意性は消えます。補正しなければ、ここで誤った結論を出していました。
20営業日後については、もう一歩踏み込んで書く必要があります。
窓の重なりを原理的に避けるには、基準日どうしを20営業日以上あければよいのですが、そうすると基準日は10〜14日しか残りません。2年間を20営業日で区切れば当然の帰結です。
この件数では、予測力があってもなくても検出できません。したがって20営業日後について正しい記述は「予測力がないと分かった」ではなく、「判断を下せるだけのデータがない」です。当サイトはこの2つを区別して書きます。前者は結論、後者は結論が出ていないという結論だからです。
翌営業日については窓が重ならないため、この問題は生じません(n=185)。5営業日後は中間で、非重複だと件数が減ります。表の「非重複サンプリング」欄に残った件数を明記してあるのはこのためです。
Breadth Gapのときと同じ判断です。予測力の有無と、公開する価値の有無は別の問題です。
「今日の相場は、2025年3月下旬や2025年2月中旬に似ている」という情報は、明日を当てるためではなく、今の相場がどういう状態なのかを理解するために使えます。数字の羅列である相場状態に、過去の具体的な日付という手がかりが付きます。
そのうえで、当サイトの類似局面のページは次の規律で作っています。
本レポートの数値は当サイトの測定用APIがそのまま返しているものです。/api/similar-backtest が距離の分布・4通りの閾値・エピソード数・3種類の検定結果を返します。現在の相場に対する検索結果は /api/similar、画面は /similar です。