トレンドフィルターと逆張りを組み合わせる考え方 — 上位足の流れの中で押し目を拾う設計
順張りは大きな流れに乗れる一方でエントリーのタイミングが遅れがちになり、逆張りはタイミングを細かく取れる一方で強いトレンドに逆らって捕まりやすい——両者の弱点は、ちょうど裏返しの関係にあります。本記事では、上位足のトレンドフィルターで売買の方向をあらかじめ絞り込み、その方向と一致する場面に限って下位足で逆張り(押し目・戻りの拾い)を仕掛ける、という二層構造の設計を整理します。特定の設定が成果を保証するという話ではなく、cBotへ落とし込む際の考え方を共有することが目的です。
トレンドフィルターの役割
トレンドフィルターとは、いま取ってよい売買の向きを制限するための仕組みです。代表的なのは、4時間足や日足といった上位足の移動平均を使う方法で、価格が移動平均より上にあればロング目線のみ、下にあればショート目線のみ、と方向を片側に固定します。移動平均そのものの読み方は移動平均線とは何を示す指標かで解説しています。
フィルターが捉えているのは「大きな時間軸で見たときの流れの向き」です。下位足で目まぐるしく上下しているように見える値動きも、上位足に引き直すと一方向の傾きに収まっていることは珍しくありません。
一方、トレンドフィルター単独では、エントリーのタイミングまでは決められません。移動平均は性質上遅行するため、「向きが上」と分かった時点では価格がすでに走った後、ということも起こります。また、方向感のないレンジ局面では価格が移動平均をまたいで往復し、フィルターの向きが頻繁に入れ替わってしまうのが単独使用時の限界です。トレンドとレンジの区別についてはトレンド相場とレンジ相場の基礎も参照してください。
逆張りトリガーの役割
逆張りトリガーは、短期的な「行き過ぎ」を検知してエントリーの瞬間を決める側です。ここではRSI(Relative Strength Index)を例にします。RSIは一定期間の値上がり幅と値下がり幅の比率から過熱感を0〜100で示すオシレーターで、詳細はRSIとは何を測る指標かにまとめています。
- 一般に70以上で買われ過ぎ、30以下で売られ過ぎと解釈される
- 下位足のRSIが一時的に低下する場面は、上昇の流れの中の「押し」と重なりやすい
- 反応が速いぶん、エントリーポイントを細かく取る用途に向く
ただしRSI単独の逆張りには、よく知られた弱点があります。強いトレンドが出るとRSIは高水準(または低水準)に張り付き、「行き過ぎたから戻るだろう」という前提そのものが崩れます。トレンドに逆らう方向のシグナルを拾い続けてしまうことが、オシレーター単独運用の最大のリスクです。
なぜこの組み合わせか
この組み合わせの核心は、方向の決定とタイミングの決定を別の階層に分担させることにあります。上位足のフィルターが「どちらを狙うか」を決め、下位足のオシレーターが「いつ入るか」を決める。それぞれが単独で抱えていた弱点を、役割分担によって構造的に打ち消し合う関係です。
具体的には、次のような振り分けになります。
- 上位足が上向き、かつ下位足のRSIが低下 → 上昇の流れの中の押し目候補として扱う材料
- 上位足が上向きなのに、RSIの買われ過ぎを理由にショートしたくなる場面 → フィルターが機械的に却下
- 上位足の向きが定まらない → そもそもエントリー候補を出さない
注目したいのは2番目です。オシレーター逆張りの失敗の典型は「強い上昇トレンドに逆らって売り続ける」形ですが、フィルターを通すとこの形のシグナルは設計段階で発生しなくなります。逆張りといっても実態は、大きな流れに対する押し目買い・戻り売りであり、順張りの一種と呼べる構造です。
もちろん万能ではありません。トレンドが転換する初動では、フィルターが旧方向を向いたまま押し目シグナルを出し続けますし、レンジ局面ではフィルター自体の信頼性が下がります。どの程度機能するかは対象と時間軸しだいであり、採用前にバックテストで確かめる工程が前提になります。
パラメータをどう考えるか
この設計で決めるべきパラメータは、大きく3つのグループに分かれます。
- 時間足のペア: 日足×1時間足、4時間足×15分足など。上位足と下位足の間隔が近すぎるとフィルターの意味が薄れ、離れすぎるとシグナルの整合が取りにくくなります。時間足の関係は時間足の基礎も参考になります。
- 移動平均の期間: 短期向けなら20前後、中長期向けなら50〜200程度が一つの目安。期間が長いほど向きの入れ替わりは減りますが、転換への追従は遅れます。
- 押し目判定の水準: トレンド方向への押しを拾う場合、RSIの30を待たず40〜50への低下を候補とする調整もよく検討されます。深く待つほど機会は減り、浅くするほどノイズを拾いやすくなる、というトレードオフです。
いずれも「これが正解」という値は存在しません。複数の設定を並べて検証し、狙う時間軸にとって無理のない範囲を探る作業が要になります。
cBot化する際の考慮点
cTraderのcBotとして実装する際に気を配りたい点を整理します。
- 上位足データの取得: 実行足と別の時間足を参照するには
MarketData.GetBars(TimeFrame.Daily)のように明示的に上位足のバー列を取得します。実行足のインジケーターと混在するため、どの系列を渡しているかを常に意識します。 - 確定バーの使用: フィルターにもトリガーにも、確定済みバーの値(shift=1)を使うと挙動が安定します。特に未確定の上位足バーで向きを判定すると、足が確定するまでフィルターの向きが揺れ、検証結果と実運用の食い違いの原因になります。
- 計算順序: 先にフィルター方向を確定し、方向が決まった場合のみトリガー判定へ進む、という段取りを崩さないようにします。順序を逆にすると、捨てるべき逆方向シグナルの処理が紛れ込みがちです。
- 本数の下限確認: 上位足の移動平均は、上位足換算で期間ぶんのバーが必要です。下位足の本数が足りていても上位足が不足しているケースがあるため、両方の系列で
Countを確認します。 - イベントの粒度: この設計は足の確定ごとの判定で十分成立するため、
OnBarベースが素直です。
判定部分の骨組みを疑似コードで示します。
// 上位足(例: 日足)の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基準など)を加えて細部を詰めていくことになります。
実装の流れ
処理の流れを上流から並べると、次のようになります。
- 環境認識: 上位足の確定バーで移動平均との位置関係を確認し、フィルターの向きを更新します。
- 方向決定: ロング目線・ショート目線・見送りの三択に落とし込みます。向きが曖昧なら以降の処理へ進みません。
- 逆行検知: 下位足のオシレーターで、フィルター方向に対する一時的な逆行(押し・戻り)を検知します。
- エントリー判定: フィルター方向とトリガーが一致した場合のみ候補とし、ATRなどを物差しにリスク幅を設定します。
- 記録: シグナル発生時のフィルター方向・オシレーターの値・その後の展開を残し、どの局面でフィルターが機能したかを後から検証できるようにします。
どう活用するか
「方向は上位の階層が決め、タイミングは下位の階層が決める」という分担は、移動平均をADXや一目均衡表に、RSIをストキャスティクスに置き換えても崩れない、使い回しの効く設計の骨格です。
自分で組んでみたい方は、Claude Codeを併走させたcBot開発の下敷きとして、この記事の構成をそのまま設計メモに使ってみてください。作るより相談したいという方は、ai-programming.xyzで個別の開発相談を受け付けています。体系的に学びたい方に向けては、スクールでこうした多層構造の戦略設計を実装しながら学べるコースを用意しています。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。