フィボナッチリトレースメントとATRを組み合わせる考え方 — 押し目候補を「線」から「帯」に変える設計
フィボナッチリトレースメントは、直前の値動き(波)に対してどこまで押したか・戻したかを比率で示す道具です。チャート上では水平な「線」として描かれますが、実際の価格は線の手前で向きを変えたり、少し行き過ぎてから戻ったりします。線ぴったりを条件にすると、ほとんどの場面が「届かなかった」か「抜けた」のどちらかに分類されてしまいます。
本記事では、この水準にATR(平均的な値動きの幅を示す指標)を重ね、押し目候補を「線」ではなく「帯」として扱う設計を整理します。裁量で水準を眺めている方が、その判断をcBotのルールに落とし込むときの参考資料という位置づけです。特定の設定が成果につながるという話ではなく、考え方と実装上の注意点をまとめたものです。
フィボナッチリトレースメントの役割
フィボナッチリトレースメントは、波の起点と終点を結び、その値幅に対する 38.2%・50%・61.8% などの比率の位置に水準を引きます。上昇波であれば「高値からどの程度押したか」を、相場の値幅に対する割合で表現できるのが特徴です。基礎は別記事のフィボナッチリトレースメントとはにまとめています。
単独で使うときの限界は3つあります。
- 許容誤差を持っていない: 水準は一本の線であり、「どこまで近づけば到達とみなすか」という定義を含んでいません
- 波の大きさを区別しない: 小さな揺れに引いても大きな波に引いても、同じ比率の線が描かれます。値幅がごく小さい波では水準同士の間隔が狭くなり、ノイズと区別がつきません
- 起点・終点の選び方に依存する: どの高値と安値を結ぶかで水準の位置が変わり、人によって結果が揃いにくい面があります
ATR の役割
ATR(Average True Range)は、一定期間の値動きの幅を平均した指標で、いまの相場が一本の足でどのくらい動くのが普通かを価格単位で示します。方向は示さず、変動の大きさだけを測ります。基礎はATRとはを参照してください。
単独使用時の限界は明快で、ATRは 「どこで」反応しやすいかを教えてくれません。値動きが大きい・小さいという情報は得られても、どの価格帯に注目すべきかという位置の情報は持っていないためです。また、過去の平均である以上、急に値動きが拡大した直後は実態より小さい値を示す場合があります。
位置は示すが幅を持たないフィボナッチと、幅は示すが位置を持たないATRは、欠けている情報がちょうど逆になっています。
なぜこの組み合わせか
この組み合わせでATRが担う仕事は、大きく3つに分けられます。
1. 水準に幅を持たせる 各水準の上下にATRへ係数を掛けた幅を取り、その範囲を帯として扱います。値動きが大きい時期は帯が広がり、落ち着いている時期は狭まるため、固定の価格幅で許容誤差を決める方法に比べて、相場の状態に合わせやすくなります。
2. 波の大きさを検査する 波の値幅がATRの何倍あるかを確認し、一定に満たない波には水準を引かない、というフィルターが作れます。ATRに対して小さすぎる波は、通常の揺れの範囲内である可能性が高いという考え方です。
3. 候補の無効化ラインを決める 帯の外側を終値で抜けたら、その水準での押し目候補は取り下げる、という判定基準になります。損切り幅の設計とも考え方がつながる部分で、こちらはATRベースの利確幅設計で整理しています。
一般論として、位置の情報と幅の情報が補完関係にあり、判定条件を曖昧さなくコードに書き下ろすための材料になります。
一方で、帯を広げるほど隣り合う水準の帯が重なり、「どの水準の話をしているのか」が曖昧になります。帯を狭めれば線と変わらなくなります。また、帯の内側に入ったことは「候補になった」というだけで、そこで反転することを意味しません。過熱感など別の視点を加える場合はフィボナッチとRSIの組み合わせも参考になります。
パラメータをどう考えるか
唯一の正解はなく、検証を前提に方向性だけ整理します。
ATRの期間 は14が定番として参照されます。短くすると直近の変動に敏感になり、長くすると帯の幅が安定する傾向があります。帯が足ごとに大きく変わると判定が落ち着かないため、やや長めに取る考え方もあります。
帯の係数 は、ATRに対して小さめの倍率から試すのが扱いやすい出発点です。大きくすると拾える場面は増えますが、帯同士の重なりも増えます。隣の水準との間隔より帯が広くならないかを、波の値幅と合わせて確認します。
波の最小サイズ は、ATRの数倍以上という形で指定します。短期足ほど小さな波が多く現れるため、短期向けには条件をやや厳しめに、長期向けには緩めに、という程度の方向性に留めるのが無難です。
起点・終点の探索期間 は、直近何本の中から高値と安値を探すかの設定です。ここが変わると水準そのものが変わるため、最も結果を左右するパラメータと考えられます。いずれの値も、自分の銘柄と時間足でバックテストを行い、期間を分けて挙動が大きく崩れないかを確認するプロセスは省略しないでください。
cBot化する際の考慮点
裁量では目で選んでいた部分を、すべてルールとして書く必要があります。設計上のポイントを挙げます。
起点・終点を確定足だけで決める: 形成中の足を含めて高値・安値を探すと、足が確定するまで水準が動き続けます。判定はOnBarで行い、確定済みの足だけを対象にします。
後から波が書き換わる問題: 高値が更新されると、終点が変わり水準もすべて引き直しになります。バックテストで「後から見れば正しい波」を使ってしまうと、実運用では再現できない結果になります。波を確定させる条件(更新が止まってから何本経過したか等)を明示し、確定した時点の値だけを使う設計にします。
帯の値を固定する: 波が確定した時点のATRで帯を計算して保持します。毎足のATRで帯を動かすと、価格が動いていないのに「帯に入った」と判定が変わる場合があります。
状態管理: 「帯に入った」「帯から水準の内側方向へ離れた」「帯を反対側へ抜けた」は別のイベントです。波ごとに状態を持たせ、新しい波が確定したら状態を初期化します。
// 例: 上昇波に対する帯の計算(確定足のみ使用)
var atr = Indicators.AverageTrueRange(14, MovingAverageType.Simple);
double atrValue = atr.Result.Last(1);
if (double.IsNaN(atrValue) || Bars.Count < Lookback + 2) return;
double swingHigh = double.MinValue, swingLow = double.MaxValue;
for (int i = 1; i <= Lookback; i++)
{
swingHigh = Math.Max(swingHigh, Bars.HighPrices.Last(i));
swingLow = Math.Min(swingLow, Bars.LowPrices.Last(i));
}
double waveSize = swingHigh - swingLow;
if (waveSize < atrValue * MinWaveAtr) return; // 波が小さければ見送り
double level = swingHigh - waveSize * 0.618; // 押しの水準
double band = atrValue * BandAtr; // 帯の半幅
double close = Bars.ClosePrices.Last(1);
bool inBand = Math.Abs(close - level) <= band;
bool invalidated = close < level - band; // 帯を下へ抜けたら候補を取り下げ
上の断片は考え方を示す最小形で、安値が高値より前にあるかという波の向きの確認や、波の確定条件は省いています。実装初期は水準と帯をチャートに描画し、目で見た位置と一致しているかを確かめると、ずれに気づきやすくなります。
実装の流れ
入力から出力までを順に並べます。
- 入力: 銘柄・時間足、探索期間、ATR期間、帯の係数、波の最小サイズを受け取る
- 波の特定: 確定足から起点と終点を決め、波の向きを判定する
- サイズ検査: 波の値幅をATRと比べ、基準に満たなければ見送る
- 帯の計算: 各水準と帯の上下端を計算し、波ごとに保持する
- 帯内の判定: 終値が帯に入ったか、帯から離れたか、反対側へ抜けたかを検出する
- 出力: 候補 / 見送り / 無効化をログや通知に送る
発注まで自動化するかどうかは別の判断です。まずは描画と通知までの構成で、波の選ばれ方が自分の感覚と合っているかを観察し、ずれの原因を潰してから範囲を広げる進め方が、検証としても安全です。
どう活用するか
自作派の方は、Claude Codeを使ったcBot開発で、本記事の「波の特定」「帯の計算」「状態管理」をそれぞれ独立した関数として依頼すると、動作確認がしやすくなります。委託派の方は、ai-programming.xyzへの相談時に「フィボナッチ水準にATRの幅を持たせ、帯への進入を通知したい」と前提を共有すると、要件のすり合わせが進めやすくなります。教育派の方は、スクールの演習として、波が後から書き換わる問題をバックテストで再現してみると、検証の落とし穴を体感できます。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。