サポート・レジスタンスとローソク足の組み合わせ — 節目での反応を足の形で確かめる設計

サポート・レジスタンス(過去に価格が反応した水平の価格帯)とローソク足パターンは、どちらもインジケーターを使わずにチャートから直接読み取るプライスアクション系の手法です。本記事では、サポレジ(サポート・レジスタンスの略)を「どこで判断するか」を決める層、ローソク足を「その場所で価格がどう反応したか」を読む層として役割分担させる組み合わせを整理します。裁量で使っている水平線とローソク足の読み方を、cBot のルールとして書き起こしたい方に向けた内容です。両者は同じ価格データから作られるため、指標どうしの組み合わせとは異なる注意点がある点もあわせて扱います。

水平のサポートゾーンに対して、ゾーン内の反発形・ゾーン外の反発形・ゾーンを実体で抜けた足の3ケースを並べた模式図

サポート・レジスタンスの役割 — 判断する「場所」を絞る

サポートとレジスタンスは、過去に価格が下げ止まった、あるいは押し戻された価格帯を水平に示したものです。多くの参加者が意識する価格帯と考えられるため、再び価格が近づいたときに何らかの反応が起こりやすい場所として扱われます。

組み合わせの中でサポレジが担当するのは、判断を行う場所を絞り込むことです。節目から離れた中間地帯では判断を保留し、節目に近づいたときだけ次の工程へ進む、という入口の役割になります。

単独使用時の限界は3つあります。第一に、節目に到達したことは分かっても、そこで反発するのか抜けるのかは線そのものからは読み取れません。第二に、線は一点ではなく幅を持つゾーンとして振る舞うことが多く、どこまでを「到達」とみなすかに主観が入ります。第三に、線の引き方には流派があり、スイングの高安を機械的に拾うと候補が増えすぎる一方、絞りすぎると意識されている節目を見落とします。

ローソク足パターンの役割 — その場所での「反応」を読む

ローソク足の形は、その期間中に売り買いのどちらが優勢だったかを表します。この組み合わせで主に使うのは、実体が小さく片側のヒゲが長いピンバーと、前の足の実体を反対方向の実体で覆う包み足の2つです。どちらも「ある価格帯まで進んだが押し返された」という拒否の痕跡として読まれます。

ローソク足が担当するのは、節目に来た価格が実際にどう反応したかを確かめることです。サポレジが注目すべき場所を示しても、市場の答えは足が確定するまで分かりません。その答えを形として読み取る層です。

単独使用時の限界は、形が場所を選ばずに大量に出現する点です。レンジの中間でもトレンドの途中でもピンバーや包み足は現れ、その多くは文脈を持たない形にすぎません。また、同じ値動きでも時間足を変えると形が変わり、1時間足の包み足が15分足では別の並びに見えることもあります。さらに「ヒゲがどれくらい長ければピンバーか」という定義自体に幅があり、決め方次第で検出数が大きく変わります。

なぜこの組み合わせか

2つの弱点は、ちょうど裏返しの関係にあります。サポレジは場所を示せても反応の中身を示せず、ローソク足は反応の中身を示せても場所を選べません。そこで「節目のゾーン内で、反発を示す形が確定した」ときだけ判断材料として扱うと、互いに欠けている情報を補う構成になります。

図1の3ケースで読み方を整理します。

この組み合わせには副次的な利点もあります。反発形のヒゲの先やゾーンの外側が、「この読みが外れた」と判断する位置として自然に決まることです。損切りの位置と、反対側の次の節目までの距離が同時に見えるため、エントリー前にリスクリワード比を確認する設計と相性の良い構成になります。

一方で注意点もあります。サポレジもローソク足も同じ4本値(始値・高値・安値・終値)から作られるため、素材の異なる指標どうしのように独立した2つの証拠がそろったわけではありません。ひとつの値動きを「場所」と「形」の2つの問いに分解して確認している、と捉えるほうが実態に近いと考えられます。両層の一致を過大評価せず、上位足の方向など別系統の情報と併用する余地を残しておくことが大切です。

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

調整対象は、大きく「節目の作り方」と「形の定義」に分かれます。

節目側では、スイング高安を判定する左右の本数が中心になります。本数を少なくすると細かな節目まで拾えますが、候補が増えてノイズも増えます。多くすると主要な節目に絞れる一方、確定までの遅れが大きくなります。ゾーンの幅は固定の価格幅よりも、ATR(平均的な値幅)に対する比率で決めるほうが、銘柄や相場の荒さの違いに追従しやすい傾向があります。近すぎる節目をまとめる距離や、反応のない節目を破棄するまでの本数も決めておきます。

形側では、ピンバーを「足全体の値幅に対してヒゲが占める割合」で定義するのが扱いやすい出発点です。包み足は、実体だけで覆うのか、ヒゲまで含めて覆うのかを決めます。時間足については、節目は上位足で作り、形は執行する時間足で確認する、という分担がよく使われます。

注意したいのは、この組み合わせは調整できる項目が多いという点です。スイング本数、ゾーン幅、統合距離、ヒゲの割合を同時に動かし、過去データで成績が最もよい組み合わせを探すと、過剰最適化に陥りやすくなります。多くの項目は一般的な値に固定して動かすのは1〜2項目にとどめ、調整に使っていない期間でのバックテストとフォワード検証で挙動を確かめる流れが安全です。

cBot化する際の考慮点

プライスアクション系は裁量で無意識にこなしている判断が多く、コードに落とすと曖昧さが表面化します。

スイングの確定遅れ(ルックアヘッド): スイング安値は、その足の左右N本がそろって初めて確定します。つまり節目として使えるのは、実際に安値を付けた足からN本後です。バックテストで安値の足の時点に節目を登録すると、未来のデータを使った判定になり、実運用より良く見える結果が出てしまいます。上位足の節目を使う場合も同様で、形成中の上位足ではなく確定済みの上位足だけを参照します。

形は確定足で判定する: ピンバーのヒゲは足が閉じるまで伸び縮みします。OnTick で形成中の足を判定すると、確定時には別の形になっていることがあるため、形の判定は OnBar で直前の確定足に対して行います。

節目の管理: 節目は価格・反応回数・最終反応の足番号を持つリストで管理し、近接する節目の統合、古い節目の破棄、保持数の上限を設けます。これを省くと候補が膨らみ、毎バーの走査コストも増えていきます。

エッジケース: 高値と安値が同じ値幅ゼロの足は、割合の計算で0除算になるため除外します。週明けのギャップでゾーンを飛び越えた場合、ゾーン内で取引が成立していないのに「到達」と判定される恐れがあるため、始値がゾーンの外側へ窓を開けたケースは区別して扱います。

// 例: 直前の確定足に対して「場所」と「形」を別々のフラグで判定する
protected override void OnBar()
{
    int i = Bars.Count - 2;                     // 直前の確定足
    if (i < SwingWidth * 2 + 1) return;         // 参照本数不足のガード

    // 左右 SwingWidth 本がそろった足だけを節目として登録(未来の足を使わない)
    TryRegisterSwingLow(i - SwingWidth);

    double o = Bars.OpenPrices[i], h = Bars.HighPrices[i];
    double l = Bars.LowPrices[i],  c = Bars.ClosePrices[i];
    double range = h - l;
    if (range <= 0) return;                     // 値幅ゼロの足は形の判定から外す

    double zoneHalf = _atr.Result[i] * ZoneAtrRatio;   // ゾーン幅(検証対象)
    var zone = _supports.FirstOrDefault(s =>
        l <= s.Price + zoneHalf && c >= s.Price - zoneHalf);

    bool atZone   = zone != null;                                // 層1: 場所
    bool pinShape = (Math.Min(o, c) - l) / range >= WickRatio;   // 層2: 形(割合は検証対象)

    Print("{0} atZone={1} pinShape={2}", Bars.OpenTimes[i], atZone, pinShape);
}

ポジション管理との連携: 損切りは反発形のヒゲの先にスプレッド分の余裕を加えた位置、利食いの候補は反対側の次の節目、というように節目リストからそのまま導けます。発注前にこの2つの距離を比べ、自分で決めたリスクリワードの基準に届かない場面は見送る判定を入れておくと、形がきれいでも割に合わない場面を機械的に除外できます。

実装の流れ

入力から発注までを6つの工程で整理します。

  1. 初期化(OnStart): 上位足のバーと ATR を用意し、過去データから確定済みのスイングだけで節目リストを作る
  2. 節目の更新(OnBar): 新たに確定したスイングを登録し、統合・破棄・上限管理を行う
  3. 場所の判定: 直前の確定足がいずれかのゾーンに触れたかを確認する
  4. 形の判定: 反発形か、実体でゾーンを抜けたか、どちらでもないかを分類する
  5. リスクの確認: 損切り位置と反対側の節目までの距離から、リスクリワードの基準を満たすかを見る
  6. 発注・記録: 経済指標の前後やスプレッド拡大などのフィルターを通過したら発注し、各工程の判定結果をログに残す

節目の登録から場所の判定、形の判定、リスクの確認を経て発注・記録に至り、不一致の場合は見送りとしてログに残す戦略フロー図

3判定を独立したフラグでログに残しておくと、見送りがどの工程で起きたかを後から集計できます。節目の検出ロジックは、Swing Point Auto Marker の紹介記事で扱っているフラクタル方式の描画のように挙動を目視で確認してから、判定部分を足していく進め方もあります。

どう活用するか

自分で cBot を作る方は、Claude Code を使った開発で、本記事の「場所」「形」「リスク」の3層をそれぞれ別の関数として実装してみてください。裁量で引いている水平線を言語化する作業そのものが、ルールの曖昧さを洗い出す練習になります。

既存の手法をルール化したいものの時間が取れない方は、ai-programming.xyz で個別の実装相談を承っています。「どの節目で、どの形を、どう定義するか」を整理して持ち込むと、要件の擦り合わせがスムーズに進みます。

体系的に学びたい方は、スクールでスイング検出やバックテスト時のルックアヘッド対策など、プライスアクションをコードに落とす際の論点を、実際の開発フローに沿って学ぶことができます。

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