フィボナッチリトレースメントと移動平均を組み合わせる考え方 — 押し目候補と環境認識をつなぐ設計
トレンドの押し目や戻りを狙うロジックを設計するとき、「どこまで引き付けて仕掛けるか」という 水準 の問題と、「そもそも仕掛けてよい局面か」という 環境 の問題は、切り分けて考える必要があります。本記事では、押し目・戻りの候補水準を測る フィボナッチリトレースメント と、トレンドの向きを整理する 移動平均 を組み合わせて、水準と環境をつなぐ設計の考え方を整理します。cBotとして自動化する際の論点にも触れるため、自作したい方にも、開発を依頼したい方にも、設計ドキュメントの下敷きとして使える内容を目指します。
フィボナッチリトレースメントの役割
フィボナッチリトレースメント(Fibonacci Retracement)は、直近のスイング安値からスイング高値まで(またはその逆)の値幅を、23.6%・38.2%・50%・61.8%といった比率で分割し、押し目・戻りの候補水準として描画するツールです。詳細はフィボナッチリトレースメントの基礎を参照してください。
- 基準となるのは「直近スイングの高値と安値」という2点
- 出力は複数の水平ライン(候補水準の集合)
- 「どこまで押したら浅い/深いか」を相対的に表現できる
一方で、単独使用にはいくつかの限界があります。まず、どのスイングを基準に取るかで水準そのものが変わるため、描く人(実装)によって結果が揺れます。また、複数の候補水準のうちどこで反発するかは事前には決められず、水準に「到達したこと」と「反発すること」は別問題です。さらに、リトレースメント自体はトレンドの向きや強さの情報を持たないため、そもそも押し目を拾ってよい局面かどうかの判断材料が不足します。
移動平均の役割
移動平均(Moving Average)は、一定期間の価格を平均して滑らかにした線で、トレンドの向きと大まかな勢いを整理する定番の指標です。詳細は移動平均線の基礎を参照してください。
- 傾きでトレンドの向きを読む
- 価格と移動平均の位置関係で環境を分類できる
- 期間を変えることで観察する時間軸を調整できる
単独使用時の限界もよく知られています。移動平均は性質上遅行するため、転換点付近では判定が遅れがちです。また、レンジ相場では価格が移動平均を頻繁に往復し、方向シグナルとしてはダマシが増えます。そして「いまが押し目として妥当な深さかどうか」という水準の情報は、移動平均からはほとんど得られません。
なぜこの組み合わせか
フィボナッチリトレースメントと移動平均は、観察する対象がきれいに分かれています。前者は 「どこまで押したか」という水準 を、後者は 「どちらを向いている局面か」という環境 を扱います。互いの不足を補い合う関係になるため、組み合わせるとシグナルの信頼性を多角的に判定する材料になります。
考え方の例を挙げます。
- 移動平均が上向き、かつ価格が38.2%〜61.8%の帯まで押した → 押し目候補として監視する材料
- リトレースメント水準に到達したが、移動平均が横ばい〜逆向き → 環境が整っていないと読んで見送る材料
- 50%付近の水準と移動平均の現在値が近接している → 複数の根拠が重なる水準として注目する材料
一般論として、逆張り気味のエントリーは「トレンドと逆方向に引き付ける」性質上、環境を選ばずに実行するとダマシを拾いやすくなります。移動平均を環境フィルターとして機能させ、「上位の流れに沿った方向の押し・戻りだけを対象にする」構造にすることで、フィルターとしての働きが期待できます。逆に、フィボナッチ側は「どこまで引き付けるか」の基準を与えるため、移動平均だけでは決めにくいエントリー水準の設計を補完します。
なお、これらは設計上の理屈であり、実際の挙動は時間軸・銘柄・市場環境で変わります。どの水準帯・どの期間設定が想定に合うかは、バックテストでの検証が不可欠です。
パラメータをどう考えるか
この組み合わせで検討するパラメータは大きく3系統あります。
- スイング検出の感度: 高値・安値を「左右何本の足と比較して確定するか」。本数を増やすと大きなスイングを、減らすと細かいスイングを拾います
- 対象とする水準帯: 23.6%は浅く61.8%は深い、という相対関係だけを前提に、どの帯を監視対象にするかを決めます
- 移動平均の期間と種類: 短期向けなら反応の速いEMA、環境認識重視ならやや長めのSMAなど、目的に応じて方向性を決めます
「この値が正解」という組み合わせはありません。時間足を変えればスイングの粒度も移動平均の意味も変わるため、想定する時間軸を先に固定し、その中で複数の設定を比較検証する順序が扱いやすいと考えられます。
cBot化する際の考慮点
このロジックをcTraderのcBotに落とし込む場合、フィボナッチ側の「スイング検出の自動化」が設計の中心になります。
- スイングの確定タイミング: 高値・安値は「右側にN本の足が並んで初めて確定」します。確定前の足を使うとリペイント的な挙動になり、バックテストと実運用がずれる原因になります
- 計算順序: スイング確定 → リトレースメント水準の算出 → 水準到達判定 → 環境フィルター、という依存関係を崩さないこと
- 到達判定の許容幅: 水準に「ぴったり一致」はまず起きないため、許容幅(トレランス)を設けて帯として判定します
- イベント選択: 水準到達を足の確定ベースで見るなら
OnBar、ヒゲでの到達も拾うならOnTick。挙動が大きく変わるので先に方針を決めます - 足の本数チェック: スイング検出にも移動平均にも十分な本数が必要です。起動直後のバー不足を必ずガードします
// 前バーまでで確定したスイング(右側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;
上記はイメージであり、シンボルごとの呼び値やスプレッド、ストップ設計との整合を取る必要があります。
実装の流れ
全体の流れを整理します。
- 環境認識: 移動平均の向きと価格との位置関係から、押し目を監視してよい局面かを分類します
- スイング検出: 確定済みの直近スイング高値・安値を特定し、リトレースメント水準を算出します
- 水準判定: 監視対象の帯(例: 38.2%〜61.8%)への到達を、許容幅つきで判定します
- エントリー判定: 環境の向きと押し・戻りの方向が一致した場合のみ候補とし、反発の兆候(足型など)を併せて確認する設計も選択肢です
- リスク管理・記録: ストップは直近スイングの外側などに置き、シグナル発生時のスイング幅・水準・移動平均の状態をログに残して検証材料にします
特に5番の記録は重要です。「どのスイング粒度・どの水準帯で機能したか」を後から切り分けられるかどうかで、改善のしやすさが大きく変わります。
どう活用するか
水準系ツールと環境系指標を分担させるこの構造は、フィボナッチをピボットに、移動平均を一目均衡表に差し替えても応用が利く「型」です。
自作したい方は、Claude Codeを使ったcBot開発の参考にしてください。本記事の構成をそのまま設計ドキュメントとして使えます。実装相談を検討したい方は、ai-programming.xyzで個別の開発相談を承っています。体系的に学びたい方には、スクールで実装手法を順を追って習得できる構成を用意しています。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。