前の2つとは、負け方が違いました。ストキャスティクスは主張の中身が、そもそも別のものだったという結末です。 %K と「直近14本の騰落率」の順位相関は 0.856。順位の大部分が重なっています。 そして%K という名前を外して、元の「最近どれだけ上がったか」を直接売買にすると、 このシリーズで初めて信頼区間が0をまたぎませんでした——1取引 +1.7968 pip。 それでも実測コスト 2.00 pip には、わずかに届きませんでした。
1. %K の順位は、その大部分が「最近上がったか」で説明できます。 直近14本の騰落率との順位相関は 0.856(1.000 なら完全に同じ順番)。 ただし 0.856 は 1.000 ではありません。記述としてかなり重なっている、というところまでです。
2. %K が 80〜85 だった場面の 97.2% は、単に直前に上がっていた場面でした。 「上がりすぎ」ではなく「上がった」を検出しています。
3. 売買としても、コストに届きませんでした。 80/20水準の逆張りは27,247回、%K×%D クロスは91,439回。どちらも95%信頼区間が0をまたぎます。 対照に使った「直近14本騰落率」だけで売買すると、グロス +1.7968 pip・区間[+0.141, +3.423]で 0をまたぎません。しかし実測コスト 2.00 pip を引くと −0.2032 pip、PF 0.993——届きませんでした。
式そのものを見れば、答えは半分見えています。 %K は「直近14本の高値と安値のあいだで、いまの終値がどのあたりにいるか」を 0〜100 で表した数です。
ここで、この定義には避けられない性質が2つあります。
| 性質 | 中身 |
|---|---|
| 窓の中には必ず 100 と 0 がある | 分母は「直近14本の高値 − 安値」です。窓の中には定義上、必ず高値の点と安値の点が含まれます。つまり %K は、その窓の中での相対位置しか表せません |
| 価格が動かなくても %K は動く | 窓が1本進めば、いちばん古い1本が捨てられます。それだけで高値や安値が入れ替わり、価格が1銭も動いていないのに %K が 90 から 83.3 へ下がることが起こります |
「買われ過ぎ」という言葉は、ふつう絶対的な高さを想像させます。 しかし %K が言えるのは直近14本の中での位置だけです。 基準も、正しい位置も、計算式のどこにも入っていません。
定義から予想はつきますが、実測で確かめます。 %K と「直近14本での騰落率」を、10通貨ペア・6年分・373,562本ぶん並べました。
指標が「独自の情報」を持っているかを確かめる最短の方法は、 もっと単純なものを隣に置いて、同じことを言っていないか見ることです。 ここで隣に置いたのは「直近14本で上がったか下がったか」という、指標ですらない生の値動きです。 %K は、その値動きを 0〜100 の目盛りに載せ替えたものに近い、という結果になりました。 ただし「同じ情報しかない」ことまでは、この相関だけでは言えません。 予測の役に立つ分が残っているかは別の検定が要ります—— 騰落率を揃えたときの %K の増分は +0.008(0.000 なら増分ゼロ)でした。
相関だけでは実感しにくいので、もう少し直接的に見ます。 %K がある値だったとき、その直前に価格は上がっていたのかを数えました。
つまり「%K が 80 を超えた、買われ過ぎだ、そろそろ下がる」という判断は、 実質的に「最近上がった、だから下がる」と言っているのと変わりません。 そう言い換えてしまうと、根拠として弱く聞こえるはずです。実測が示しているのは、その弱さです。
ここまでは指標の中身の話です。実際に売買として回した結果も出しておきます。
| 使い方 | 取引数 | 勝率 | 平均(グロス) | 95%信頼区間 |
|---|---|---|---|---|
| 80/20水準の逆張り | 27,247 | 49.8% | −0.098 pip | [−0.906, +0.710] |
| %K × %D クロス | 91,439 | 50.0% | +0.110 pip | [−0.333, +0.552] |
平均はどちらもプラスです。しかし見るべきは平均ではなく区間の端で、どちらも0をまたぎます。 9万回というのは、このシリーズで扱ったいちばん大きなサンプルです。それだけ回数があっても、0 と区別がつきませんでした。
なお %K × %D のクロスは、第1章で見た定義からすると当然の結果でもあります。 %D は %K の平均なので、このクロスは「%K が自分自身の平均を追い越した」と言っているにすぎません。
検証に使ったMT5のソースコードを全文公開しています。登録もメールアドレスも要りません。
InpReportRestatement を有効にすれば、02の「言い換えの検定」がそのまま走ります。
このキットにはもう1つ、InpShowSelectionBias という入力があります。既定では無効です。
有効にすると、同じルールの成績を3通りに分けて出します——①全部、②「結果として戻ったもの」だけ、③戻らなかったもの。
②だけを見ると、まったく別の本のように見えます。
ここで起きているのは未来の先読みではありません。決済条件そのものはリアルタイムで実行できます。 問題は、結果を条件にして後から抜き出していることのほうです。これを結果による選別と呼びます。 好成績のバックテストを見たとき、それが①なのか②なのかを見分ける——そのための実演です。
この記事には結果を載せました。書籍には手続きを書いています。 重複しないよう、記事に入れなかったものを挙げておきます。
記事だけで完結して構いません。コードは本を買わなくても使えます。
「その指標は、もっと単純な何かの言い換えではないか」——この問いを他の道具にも当てています。記事にする前のものは、こちらに出しています。
本記事は2026-09-09に数値を訂正しました(検証期間の取り違えによるもの)。同じ日に、再現キットの教材用機能も差し替えています(先読みの実演 → 結果による選別の実演)。
検証条件: 対象=10通貨ペア(AUDJPY/AUDUSD/EURJPY/EURUSD/GBPJPY/GBPUSD/NZDJPY/NZDUSD/USDCAD/USDJPY)/ 期間=2020.01.01–2025.12.31/ストキャスティクス 14-3-3・1時間足・手仕舞い一律24本後/ %K と騰落率の比較は 373,562本、騰落率は 終値比 (close/close[-14]−1)×10000 で算出/ コスト=同期間の実測スプレッド+ECN往復手数料1.0 pip の中央値 2.00 pip。 信頼区間はブロック・ブートストラップおよびクラスター・ブートストラップ(seed固定・B=4000)で算出。 掲載した数値はすべて過去データに対する集計であり、フォワードテスト・実口座運用の結果ではありません。
免責: 本ページは検証プロセスと棄却記録の開示を目的とした研究ノートです。投資助言ではありません。 特定の金融商品・取引業者の利用を推奨するものではありません。 バックテスト結果は過去データに基づくものであり、将来の利益を保証するものではありません。FX取引には元本割れのリスクがあります。 本記事の結論は検証した範囲に限られ、ストキャスティクスに予測能力が存在しないことを示すものではありません。 図表はすべて実測データからPythonで再描画したものであり、生成AIによる作画は含みません。