トレンドフィルターと逆張りを組み合わせる考え方 — 上位足の流れの中で押し目を拾う設計

順張りは大きな流れに乗れる一方でエントリーのタイミングが遅れがちになり、逆張りはタイミングを細かく取れる一方で強いトレンドに逆らって捕まりやすい——両者の弱点は、ちょうど裏返しの関係にあります。本記事では、上位足のトレンドフィルターで売買の方向をあらかじめ絞り込み、その方向と一致する場面に限って下位足で逆張り(押し目・戻りの拾い)を仕掛ける、という二層構造の設計を整理します。特定の設定が成果を保証するという話ではなく、cBotへ落とし込む際の考え方を共有することが目的です。

上位足のトレンドフィルターと下位足の逆張りトリガーの分担を示した模式図

トレンドフィルターの役割

トレンドフィルターとは、いま取ってよい売買の向きを制限するための仕組みです。代表的なのは、4時間足や日足といった上位足の移動平均を使う方法で、価格が移動平均より上にあればロング目線のみ、下にあればショート目線のみ、と方向を片側に固定します。移動平均そのものの読み方は移動平均線とは何を示す指標かで解説しています。

フィルターが捉えているのは「大きな時間軸で見たときの流れの向き」です。下位足で目まぐるしく上下しているように見える値動きも、上位足に引き直すと一方向の傾きに収まっていることは珍しくありません。

一方、トレンドフィルター単独では、エントリーのタイミングまでは決められません。移動平均は性質上遅行するため、「向きが上」と分かった時点では価格がすでに走った後、ということも起こります。また、方向感のないレンジ局面では価格が移動平均をまたいで往復し、フィルターの向きが頻繁に入れ替わってしまうのが単独使用時の限界です。トレンドとレンジの区別についてはトレンド相場とレンジ相場の基礎も参照してください。

逆張りトリガーの役割

逆張りトリガーは、短期的な「行き過ぎ」を検知してエントリーの瞬間を決める側です。ここではRSI(Relative Strength Index)を例にします。RSIは一定期間の値上がり幅と値下がり幅の比率から過熱感を0〜100で示すオシレーターで、詳細はRSIとは何を測る指標かにまとめています。

ただしRSI単独の逆張りには、よく知られた弱点があります。強いトレンドが出るとRSIは高水準(または低水準)に張り付き、「行き過ぎたから戻るだろう」という前提そのものが崩れます。トレンドに逆らう方向のシグナルを拾い続けてしまうことが、オシレーター単独運用の最大のリスクです。

なぜこの組み合わせか

この組み合わせの核心は、方向の決定とタイミングの決定を別の階層に分担させることにあります。上位足のフィルターが「どちらを狙うか」を決め、下位足のオシレーターが「いつ入るか」を決める。それぞれが単独で抱えていた弱点を、役割分担によって構造的に打ち消し合う関係です。

具体的には、次のような振り分けになります。

注目したいのは2番目です。オシレーター逆張りの失敗の典型は「強い上昇トレンドに逆らって売り続ける」形ですが、フィルターを通すとこの形のシグナルは設計段階で発生しなくなります。逆張りといっても実態は、大きな流れに対する押し目買い・戻り売りであり、順張りの一種と呼べる構造です。

もちろん万能ではありません。トレンドが転換する初動では、フィルターが旧方向を向いたまま押し目シグナルを出し続けますし、レンジ局面ではフィルター自体の信頼性が下がります。どの程度機能するかは対象と時間軸しだいであり、採用前にバックテストで確かめる工程が前提になります。

パラメータをどう考えるか

この設計で決めるべきパラメータは、大きく3つのグループに分かれます。

いずれも「これが正解」という値は存在しません。複数の設定を並べて検証し、狙う時間軸にとって無理のない範囲を探る作業が要になります。

cBot化する際の考慮点

cTraderのcBotとして実装する際に気を配りたい点を整理します。

判定部分の骨組みを疑似コードで示します。

// 上位足(例: 日足)のEMAでフィルター方向を決める
var daily = MarketData.GetBars(TimeFrame.Daily);
double dailyEma = Indicators.ExponentialMovingAverage(daily.ClosePrices, emaPeriod).Result.Last(1);
bool longBias = daily.ClosePrices.Last(1) > dailyEma;

// 実行足のRSIで短期的な行き過ぎを検知
double rsi = Indicators.RelativeStrengthIndex(Bars.ClosePrices, rsiPeriod).Result.Last(1);

// フィルター方向と一致する押し目だけを候補にする
if (longBias && rsi < pullbackLevel)
{
    // リスク幅と発注条件の確認を経てエントリー処理へ
}

実際にはスプレッドやロット設計、ストップ幅の決め方(ATR基準など)を加えて細部を詰めていくことになります。

実装の流れ

処理の流れを上流から並べると、次のようになります。

環境認識から方向決定、逆行検知、エントリー判定、記録までの戦略フロー図

  1. 環境認識: 上位足の確定バーで移動平均との位置関係を確認し、フィルターの向きを更新します。
  2. 方向決定: ロング目線・ショート目線・見送りの三択に落とし込みます。向きが曖昧なら以降の処理へ進みません。
  3. 逆行検知: 下位足のオシレーターで、フィルター方向に対する一時的な逆行(押し・戻り)を検知します。
  4. エントリー判定: フィルター方向とトリガーが一致した場合のみ候補とし、ATRなどを物差しにリスク幅を設定します。
  5. 記録: シグナル発生時のフィルター方向・オシレーターの値・その後の展開を残し、どの局面でフィルターが機能したかを後から検証できるようにします。

どう活用するか

「方向は上位の階層が決め、タイミングは下位の階層が決める」という分担は、移動平均をADXや一目均衡表に、RSIをストキャスティクスに置き換えても崩れない、使い回しの効く設計の骨格です。

自分で組んでみたい方は、Claude Codeを併走させたcBot開発の下敷きとして、この記事の構成をそのまま設計メモに使ってみてください。作るより相談したいという方は、ai-programming.xyzで個別の開発相談を受け付けています。体系的に学びたい方に向けては、スクールでこうした多層構造の戦略設計を実装しながら学べるコースを用意しています。

本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。