/api/sigma-backtest ・ /api/sigma「日経平均が移動平均から何σ離れているかを見ていると、天井と底がなんとなく分かる」—— よく語られる見方です。これを 日経平均の終値が25日移動平均から標準偏差いくつぶん離れているか (σバンド、いわゆるボリンジャーバンド)として定義し、その後の値動きを予測できるかを検証しました。 指標を公開する前に必ず検証するという恒久ルールにもとづく測定です。
結論日経平均の日足終値から、直近N日の移動平均(MA)と、同じN日の終値の母標準偏差(σ)を出し、
現在値の位置を z =(終値 − MA)÷ σ で表します。バンドは MA ± 1σ / 2σ / 3σ。
主系統は 25日、参考として 75日 でも同じものを算出しました。
前方リターンは 翌営業日・5営業日後・20営業日後の3種類。 日経平均そのものを測っているので、日経平均をベンチマークにした超過リターンは意味を持ちません。 そこで全期間平均との差を超過分としています(翌日 +0.13% / 5日後 +0.65% / 20日後 +2.60%)。
z を計算する関数は系列と添字しか受け取りません。参照するのは [i−24, i] の25本だけで、 i より後を見る経路が関数の中に存在しません。テストでは 「未来の終値を書き換えても過去の z が1ビットも変わらない」ことを機械的に確認しています。 当日の終値を窓に含めるのは正しい扱いです —— 大引け後には確定している値であり、その時点で計算できるからです。
日次の指標で5日先・20日先を見ると、観測窓が大きく重なります。 また ±1σ の外側にいる日は連続することが多く、1日ずつ独立に数えると不確実性を大幅に過小評価します。 そこで次の2つを併走させ、両方で |t| ≥ 2 を満たしたものだけを「検出できた」としました。
| 方法 | 内容 | 弱点 |
|---|---|---|
| エピソード+月クラスタ | 5営業日以内に隣接する該当日を1エピソードにまとめ、エピソード平均をとってから月ごとに集計し直して検定する | エピソードの長短にかかわらず等しく重みを置くため、短いエピソードの影響が大きく出る |
| 非重複サンプリング | 基準日を h 営業日以上あけて取り直す。前方リターンの窓が原理的に重ならない | サンプル数が大きく減る |
どちらも一長一短です。だからこそ片方だけで基準を越えるものは採らないことにしました。 結果が方法の選び方に依存しているということは、確立した効果ではないからです。
多重比較に注意してください。この検証では 2窓 × 5閾値 × 2方向 × 3期間 = 60件の検定を回しています。 |t| ≥ 2 は偶然でも 2.7件前後は出る計算です。単独のセルが基準を越えたことに意味を見出してはいけません。
25日窓の主要なセルです。「ep」はエピソード+月クラスタ、「非重複」は非重複サンプリングの t 値。 超過は全期間平均との差(ポイント)。
| 条件 | エピソード | 期間 | 超過 | ep の t | 非重複の t | 判定 |
|---|---|---|---|---|---|---|
| +1σ 以上 | 17回(延べ182日) | 翌日 | −0.35pt | −3.25 | −0.99 | 不成立 |
| +1σ 以上 | 17回 | 5日後 | −1.16pt | −3.65 | −0.62 | 不成立 |
| +1σ 以上 | 17回 | 20日後 | −1.83pt | −1.49 | +0.11 | 不成立 |
| −1σ 以下 | 10回(延べ60日) | 翌日 | +0.48pt | +2.39 | +0.46 | 不成立 |
| +2σ 以上 | 13回(延べ39日) | 5日後 | −1.40pt | −2.87 | −1.10 | 不成立 |
| −2σ 以下 | 6回(延べ18日) | 20日後 | +2.25pt | +0.69 | +0.57 | 不成立 |
| ±3σ | 1〜2回 | — | — | — | — | 検定できない |
これは「有意でなかった」ではなく「方法によって答えが変わった」という結果です。 +1σ・5営業日後の t は、エピソード検定では −3.65(基準を大きく越える)、 非重複サンプリングでは −0.62(ほぼゼロ)。同じデータ・同じ条件でこれだけ動きます。
差が生まれる理由ははっきりしています。エピソード検定はエピソードの長さにかかわらず等しい重みを置くため、 短いエピソードの値が結果を動かします。実際、日単位でそのまま平均すると +1σ 翌日の超過は −0.10pt(エピソード平均では −0.35pt)にとどまります。
±3σ は検定できません。2年で該当したのは +3σ が1回、−3σ が2回だけです。 これは「有意でなかった」のではなく検定に足るデータがないということで、区別して書く必要があります。
期間を半分に割って測り直すと、+1σ 以上の翌日・5日後はどちらの半分でも負の側に出ます (前半 t = −2.15 / −3.57、後半 t = −2.37 / −2.47)。向きが一致するのは事実です。 ただしこれは両方とも、窓の重なりを補正していない同じ方法による数字です。 方法そのものが疑わしい以上、これを根拠に「安定している」とは言えません。
検証期間中、日経平均は 38,063 → 66,220(+74.0%)と大きく上昇しました。 上昇が続くと終値は移動平均の上に居続けるため、z は正に偏ります。
| z の分布(25日窓・463営業日) | 値 |
|---|---|
| 最小 | −3.61 |
| 下位5%点 | −1.82 |
| 中央値 | +0.76 |
| 上位5%点 | +2.22 |
| 最大 | +3.09 |
| z > 0 の日 | 69.8% |
ラベルの頻度も左右対称になりません。 統計的過熱圏(z ≥ +2)が 8.4% に対し 統計的売られすぎ圏(z ≤ −2)は 3.9%、 そして「やや過熱」が 30.9% を占めます。この期間では「やや過熱」は 上昇トレンドの平常状態に近い意味しか持ちません。
それでも閾値を分布に合わせて動かすことはしません。 ±1σ / ±2σ という定義は標準的で、誰でも同じ計算を再現できます。 「この2年の分布に合うように」閾値を選び直すのは、成績への当てはめと同じことです。 代わりに、画面では「過去2年の分布で何パーセンタイルか」を必ず併記しています。 偏った分布のなかで今日がどこにいるかは、σ の値そのものより順位のほうが正確に伝えます。
75日窓では、エピソード検定で +2σ の5営業日後に t = −5.98 という大きな値が出ます。 しかしエピソードは 8回しかなく、非重複サンプリングでは t = −0.56 です。 −1.5σ の5営業日後に至っては エピソード2回で t = −11.57 —— これは統計量として意味を持ちません。 エピソードが少ないセルの t 値は読まないでください。 そのため本検証ではエピソード5件未満・月4件未満のセルは「検定できません」と表示し、 「有意でなかった」と混同しないようにしています。
予測力の有無と、公開の可否は一致しません。σバンドは 「いま統計的にどのくらい端にいるか」を1つの数字で表す記述としては読めます。 「日経平均は25日線から +2.1σ(過去2年で上位3%)」は、それ自体が今日の状態の説明です。
ただし表示にあたっては次を守っています。
本記事の数値は次のAPIの応答から生成しています。誰でも同じ数字を確認できます。
| 用途 | エンドポイント |
|---|---|
| 検証(全セルの t 値・分布・前半後半) | /api/sigma-backtest |
| 現在の状態・ラベル・分布 | /api/sigma |
| 過去日の記録 | /daily/{YYYY-MM-DD}(sigma: の日次記録) |
定義とラベルの閾値は このサイトについて に掲載しています。