「トレンドフォロー戦略は相場の70%を占めるレンジ相場で利益が出ない」——この問題に対して、レンジ相場を「検出」して「別の戦略で取引する」アプローチを実装した。
ADX(トレンド強度)、NATR(正規化ATR)、BBW(ボリンジャーバンド幅)の3指標を組み合わせた複合レジーム判定(RNG-A1〜A4)で相場環境を分類し、レンジ相場と判定された局面ではボリンジャーバンドバウンス逆張り(RNG-B1〜B2)で取引する。全4施策が本番稼働中だ。
トレンドフォローの弱点
相場の70%はレンジ
一般的にFX相場は「70%がレンジ、30%がトレンド」と言われる。トレンドフォロー戦略は30%の期間で大きな利益を出すが、70%のレンジ期間では小さな損失を積み重ねる。
トレンド期間(30%): シグナル多数 → 利益
レンジ期間(70%): シグナル多数 → 損失(ダマシが多い)
問題は「レンジ期間にもシグナルが出てしまう」ことだ。テクニカル指標はレンジ相場でもシグナルを生成するが、価格がすぐに反転するため損切りになりやすい。
2つの解決策
- レンジ相場を検出してトレードしない: 市場レジームフィルター(FX-ADD-A2)のアプローチ
- レンジ相場を検出してレンジ用の戦略で取引する: 本施策のアプローチ
1は「損失を減らす」防御的な戦略、2は「レンジ期間も利益を出す」攻めの戦略だ。
レジーム判定の3指標
RNG-A1: ADX(Average Directional Index)
トレンドの強さを測る最も基本的な指標。
- ADX < 20: レンジ相場(トレンドなし)
- ADX 20〜30: 過渡期
- ADX > 30: トレンド相場
ADXだけでは「レンジの中でもボラティリティが高いレンジ」と「静かなレンジ」を区別できない。
RNG-A2: NATR(Normalized Average True Range)
NATR(正規化ATR)は、ATR(Average True Range、平均値動き幅)を現在価格で割って正規化した指標だ。異なる価格帯の通貨ペア間でボラティリティを比較できる。
NATR = (ATR / Close) × 100
- NATR < 0.5%: 低ボラティリティ(静かなレンジ)→ レンジ逆張りに最適
- NATR 0.5〜1.0%: 通常ボラティリティ
- NATR > 1.0%: 高ボラティリティ → レンジ逆張りには不向き
NATRが低い(静かな)レンジ相場は、バンドの反発が綺麗に機能しやすい。
RNG-A3: BBW(Bollinger Band Width)
ボリンジャーバンドの上下バンドの幅を数値化した指標。
BBW = (Upper Band - Lower Band) / Middle Band × 100
BBWが小さい = バンドが収縮している = ボラティリティが低い = レンジ相場の可能性が高い
RNG-A4: 複合判定
3指標を組み合わせた複合フラグを生成する。
def detect_regime(adx: float, natr: float, bbw: float) -> str:
is_range_adx = adx < 20
is_low_vol_natr = natr < 0.5
is_narrow_bb = bbw < 4.0 # 通貨ペアにより調整
# 2指標以上がレンジ判定なら「レンジ」
range_score = sum([is_range_adx, is_low_vol_natr, is_narrow_bb])
if range_score >= 2:
return "RANGE"
elif adx > 30:
return "TREND"
else:
return "TRANSITIONING"
なぜ3指標の多数決か: 1指標だけだとダマシが多い。ADXが一時的に20を下回っただけでレンジと判定してしまう。3指標中2指標以上がレンジを示すときだけ「レンジ」と判定することで、精度を高めた。
BBバウンス逆張り(RNG-B1〜B2)
レンジ相場と判定された局面で適用する戦略。
ボリンジャーバンドバウンス(BB Bounce)とは
ボリンジャーバンド(Bollinger Bands)は、移動平均線の上下に標準偏差(σ)のバンドを引いたものだ。統計的に、価格は約95%の確率でバンド内に収まる(±2σの場合)。
レンジ相場では、価格がバンドの下端に到達すると反発し、上端に到達すると反落する傾向がある。この反発を「バウンス」と呼ぶ。
BBバウンス買いシグナル:
1. レジーム = RANGE(RNG-A4で判定済み)
2. 価格が下バンド(-2σ)以下に到達
3. RSI < 30(売られすぎ確認)
→ 買いエントリー
BBバウンス売りシグナル:
1. レジーム = RANGE
2. 価格が上バンド(+2σ)以上に到達
3. RSI > 70(買われすぎ確認)
→ 売りエントリー(※ 現行はLong-only制約で未実装)
SL/TPの設定
レンジ逆張りのSL/TPはトレンドフォローとは異なる考え方で設定する。
# レンジ逆張り用のSL/TP
SL = 下バンド - ATR × 0.5 # バンド外にSLを置く
TP = ミドルバンド # 中心回帰を狙う
TPをミドルバンド(移動平均線)に設定するのがポイントだ。レンジ相場では「バンド端から中心に戻る」動きが支配的なので、ミドルバンド到達で利確するのが合理的だ。
上バンドまで利益を引っ張ろうとすると、レンジの中で反転して損切りになるリスクが高まる。
トレンド戦略との切り替え
レジーム判定の結果に応じて、トレンドフォロー戦略とレンジ逆張り戦略を自動的に切り替える。
相場状態 → 使用する戦略
TREND → トレンドフォロー(Swing/Day)
TRANSITIONING → トレンドフォロー(閾値引き上げ)
RANGE → BBバウンス逆張り(RNG-B1/B2)
2つの戦略が同時にシグナルを出すことはない。レジーム判定が排他的に「今どちらの戦略を使うか」を決定する。
学んだこと
1. 「レンジを避ける」と「レンジで稼ぐ」は別の問題
レンジ相場でトレードしないのは簡単だが、相場の70%を捨てていることになる。レンジ用の戦略を持つことで、「相場環境に関係なく毎月収益を出す」可能性が開ける。
2. レジーム判定は複数指標の多数決が安定
ADX単体だと誤判定が多い。NATR(ボラティリティ)とBBW(バンド幅)を加えた3指標の多数決(2/3以上一致)にすることで、レジーム切り替えのチャタリング(高頻度の行き来)を大幅に抑制できた。
3. レンジ逆張りのTPはミドルバンドが正解
レンジ相場で欲張って上バンドまで利益を引っ張ると、反転で損切りになる。「バンド端 → 中心」の動きだけを確実に取る方が、勝率もシャープ比も安定する。
まとめ
レンジ相場収益化の設計で重要なのは以下の3点だ。
- 3指標複合レジーム判定: ADX + NATR + BBWの多数決で、安定したレンジ/トレンド分類
- BBバウンス逆張り: バンド端での反発をRSI確認付きでエントリー。TPはミドルバンド
- 戦略の自動切り替え: レジーム判定結果に応じて、トレンドフォローとレンジ逆張りを排他的に使い分け
相場の70%を占めるレンジ相場を「ノイズ」として捨てるのか、「収益機会」として活用するのか。この判断が、月次リターンの安定性を大きく左右する。