フィボナッチリトレースメントと移動平均を組み合わせる考え方 — 押し目候補と環境認識をつなぐ設計

トレンドの押し目や戻りを狙うロジックを設計するとき、「どこまで引き付けて仕掛けるか」という 水準 の問題と、「そもそも仕掛けてよい局面か」という 環境 の問題は、切り分けて考える必要があります。本記事では、押し目・戻りの候補水準を測る フィボナッチリトレースメント と、トレンドの向きを整理する 移動平均 を組み合わせて、水準と環境をつなぐ設計の考え方を整理します。cBotとして自動化する際の論点にも触れるため、自作したい方にも、開発を依頼したい方にも、設計ドキュメントの下敷きとして使える内容を目指します。

フィボナッチリトレースメントの水準と移動平均の環境認識が重なる領域の模式図

フィボナッチリトレースメントの役割

フィボナッチリトレースメント(Fibonacci Retracement)は、直近のスイング安値からスイング高値まで(またはその逆)の値幅を、23.6%・38.2%・50%・61.8%といった比率で分割し、押し目・戻りの候補水準として描画するツールです。詳細はフィボナッチリトレースメントの基礎を参照してください。

一方で、単独使用にはいくつかの限界があります。まず、どのスイングを基準に取るかで水準そのものが変わるため、描く人(実装)によって結果が揺れます。また、複数の候補水準のうちどこで反発するかは事前には決められず、水準に「到達したこと」と「反発すること」は別問題です。さらに、リトレースメント自体はトレンドの向きや強さの情報を持たないため、そもそも押し目を拾ってよい局面かどうかの判断材料が不足します。

移動平均の役割

移動平均(Moving Average)は、一定期間の価格を平均して滑らかにした線で、トレンドの向きと大まかな勢いを整理する定番の指標です。詳細は移動平均線の基礎を参照してください。

単独使用時の限界もよく知られています。移動平均は性質上遅行するため、転換点付近では判定が遅れがちです。また、レンジ相場では価格が移動平均を頻繁に往復し、方向シグナルとしてはダマシが増えます。そして「いまが押し目として妥当な深さかどうか」という水準の情報は、移動平均からはほとんど得られません。

なぜこの組み合わせか

フィボナッチリトレースメントと移動平均は、観察する対象がきれいに分かれています。前者は 「どこまで押したか」という水準 を、後者は 「どちらを向いている局面か」という環境 を扱います。互いの不足を補い合う関係になるため、組み合わせるとシグナルの信頼性を多角的に判定する材料になります。

考え方の例を挙げます。

一般論として、逆張り気味のエントリーは「トレンドと逆方向に引き付ける」性質上、環境を選ばずに実行するとダマシを拾いやすくなります。移動平均を環境フィルターとして機能させ、「上位の流れに沿った方向の押し・戻りだけを対象にする」構造にすることで、フィルターとしての働きが期待できます。逆に、フィボナッチ側は「どこまで引き付けるか」の基準を与えるため、移動平均だけでは決めにくいエントリー水準の設計を補完します。

なお、これらは設計上の理屈であり、実際の挙動は時間軸・銘柄・市場環境で変わります。どの水準帯・どの期間設定が想定に合うかは、バックテストでの検証が不可欠です。

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

この組み合わせで検討するパラメータは大きく3系統あります。

「この値が正解」という組み合わせはありません。時間足を変えればスイングの粒度も移動平均の意味も変わるため、想定する時間軸を先に固定し、その中で複数の設定を比較検証する順序が扱いやすいと考えられます。

cBot化する際の考慮点

このロジックをcTraderのcBotに落とし込む場合、フィボナッチ側の「スイング検出の自動化」が設計の中心になります。

// 前バーまでで確定したスイング(右側confirmBars本で確定)
double swingHigh = FindConfirmedSwingHigh(confirmBars);
double swingLow  = FindConfirmedSwingLow(confirmBars);

// リトレースメント水準(上昇スイングの押し目側の例)
double range   = swingHigh - swingLow;
double level50 = swingHigh - range * 0.5;

// 環境フィルター: 移動平均の傾きを確認
var ma = Indicators.MovingAverage(Bars.ClosePrices, maPeriod, MovingAverageType.Exponential);
bool maRising = ma.Result.Last(1) > ma.Result.Last(maSlopeLookback);

// 到達判定は許容幅を持たせた「帯」で行う
bool inZone = Math.Abs(Bars.ClosePrices.Last(1) - level50) <= tolerance;

上記はイメージであり、シンボルごとの呼び値やスプレッド、ストップ設計との整合を取る必要があります。

実装の流れ

全体の流れを整理します。

環境認識からスイング検出、水準判定、リスク管理までの戦略フロー

  1. 環境認識: 移動平均の向きと価格との位置関係から、押し目を監視してよい局面かを分類します
  2. スイング検出: 確定済みの直近スイング高値・安値を特定し、リトレースメント水準を算出します
  3. 水準判定: 監視対象の帯(例: 38.2%〜61.8%)への到達を、許容幅つきで判定します
  4. エントリー判定: 環境の向きと押し・戻りの方向が一致した場合のみ候補とし、反発の兆候(足型など)を併せて確認する設計も選択肢です
  5. リスク管理・記録: ストップは直近スイングの外側などに置き、シグナル発生時のスイング幅・水準・移動平均の状態をログに残して検証材料にします

特に5番の記録は重要です。「どのスイング粒度・どの水準帯で機能したか」を後から切り分けられるかどうかで、改善のしやすさが大きく変わります。

どう活用するか

水準系ツールと環境系指標を分担させるこの構造は、フィボナッチをピボットに、移動平均を一目均衡表に差し替えても応用が利く「型」です。

自作したい方は、Claude Codeを使ったcBot開発の参考にしてください。本記事の構成をそのまま設計ドキュメントとして使えます。実装相談を検討したい方は、ai-programming.xyzで個別の開発相談を承っています。体系的に学びたい方には、スクールで実装手法を順を追って習得できる構成を用意しています。

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