ピボットポイントと移動平均を組み合わせる考え方 — 節目の水準とトレンド方向で判定を二層化する設計

サポートやレジスタンスといった水平線の節目だけを頼りにロジックを組むと、同じ「節目への接近」という現象が、反発の入口にもブレイクの前触れにもなり得て、判断の軸が定まりにくくなります。本記事では、前日の高値・安値・終値から機械的に水準を算出する ピボットポイント と、相場の方向をならして示す 移動平均 を組み合わせ、節目での攻防を「反発を待つ場面」と「見送る場面」に振り分けるための判定材料を整理します。あくまで設計の考え方の共有であり、特定の手法が成果を保証するという話ではありません。

ピボットポイントの水準と移動平均の方向を1枚のチャートに重ねた模式図

ピボットポイントの役割

ピボットポイント(Pivot Point)は、前日の高値・安値・終値の3つの値から、当日の基準となる水準を機械的に算出するレベル系の指標です。基本の考え方はピボットポイントとは何かで解説しています。

計算が機械的で共通という性質は、実装面でも意味を持ちます。裁量的な線引きと違って再現性があり、多くの参加者が同じ水準を目にしている可能性が高いため、当日の値動きの目安として意識されやすいと考えられます。日替わりで自動更新される点も、cBotに組み込みやすい理由の一つです。

一方で、ピボットポイント単独には明確な限界があります。示してくれるのは「どこに節目があるか」だけで、「相場がどちらへ向かっているか」は一切語りません。方向の出た日にはR1、R2と水準を次々に超えていくことも珍しくなく、節目に到達したという情報だけでは、反発を観察すべき局面なのか、ブレイクに巻き込まれる局面なのかを区別できません。

移動平均の役割

移動平均(Moving Average)は、一定期間の終値を平均してつないだ、トレンド系の代表的な指標です。基礎は移動平均線とは何かを参照してください。

移動平均が捉えるのは「値動きの平均的な流れ」であり、ノイズをならした方向感を1本の線で示してくれます。

ただし移動平均にも単独使用時の弱点があります。平均である以上、値動きに対して常に遅れて反応します。レンジ相場では価格が線を挟んで何度も往復し、方向のダマシが増えます。そしてこの組み合わせの文脈で重要なのは、移動平均には「水準感」がないことです。方向は示しても、「どこまで引きつけて判断するか」という具体的な位置の目安までは与えてくれません。

なぜこの組み合わせか

ピボットポイントと移動平均は、担当する情報がきれいに分かれています。前者は 「どこに節目があるか」という場所の情報 を、後者は 「どちら側を向いているか」という方向の情報 を受け持ちます。場所と方向は独立性の高い軸なので、重ねることで「節目への接近」という同じ現象を、文脈付きで読み分ける材料になります。

読み分けの例をいくつか並べます。

この組み合わせには、実装上の利点もあります。ピボットの水準は日替わりの時点で確定するため、「今日はこの水準に近づいたら判定する」という待ち伏せ型の設計が可能です。あらかじめ分かっている水準に対して、移動平均という方向フィルターを通すことで、流れと逆側の節目タッチを機械的に見送る仕組みを作れます。これは、節目タッチをすべて拾ってしまう単純なロジックに対する、ノイズフィルターとして機能することが期待できます。

もっとも、これは設計上の見立てにすぎません。フィルターがどの程度働くかは対象や時間軸によって変わるため、採用する前に検証工程を挟むことが前提になります。

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

両者の設定は、それぞれ性質が異なります。

どの設定にも唯一の正解はありません。「短期の反応を拾いたいのか」「日中の大きな流れに乗りたいのか」という目的を先に決め、複数の設定をバックテストで見比べて、対象に無理のない範囲を探る手順が要になります。

cBot化する際の考慮点

cTraderのcBotへ落とし込む際に注意したいポイントを整理します。

判定部分の骨組みを疑似コードで示します。

// 日付が変わったバーで一度だけ再計算
var daily = MarketData.GetBars(TimeFrame.Daily);
double h = daily.HighPrices.Last(1);
double l = daily.LowPrices.Last(1);
double c = daily.ClosePrices.Last(1);

double pivot = (h + l + c) / 3.0;
double r1 = 2.0 * pivot - l;
double s1 = 2.0 * pivot - h;

// 環境フィルター: 確定バーと移動平均の位置関係
double ma = Indicators.SimpleMovingAverage(Close, maPeriod).Result.Last(1);
bool upSide = Close.Last(1) > ma;

// 例: 上向き環境で、S1近辺への接近を検出
double tolerance = Symbol.TickSize * toleranceTicks;
if (upSide && Math.Abs(Close.Last(1) - s1) <= tolerance)
{
    // リスク幅と発注管理の確認を経て、判断材料の一つとする
}

ここに書いたのは骨組みだけで、実運用ではシンボルごとの呼び値・スプレッド・ロット設計に合わせて細部を詰める必要があります。

実装の流れ

処理の流れを上流から並べると、次のようになります。

日替わり再計算から環境認識、節目接近の判定、発注管理までの戦略フロー図

  1. 日替わりで水準を再計算: 日付の変わり目を検出し、前日の高値・安値・終値からP・R1・S1などを求めて保持します。
  2. 環境認識: 移動平均の傾きと、価格が線のどちら側にいるかで、その日の判定の向きを決めます。
  3. 節目接近の検出: 保持している水準と現在値の距離が許容幅に入ったかを監視します。
  4. 整合の判定: 接近した節目が環境の向きと同じ側なら観察対象に、逆側なら見送りとして扱います。
  5. リスク幅と記録: 発注に進む場合の損切り・利益確定の幅をルール化し、判定時の水準と移動平均の状態をログに残します。

最後の記録は、方向フィルターがどの局面で働き、どこで空振りしたかを後から検証するための一次データになります。

どう活用するか

この組み合わせの本質は、「事前に確定する水準」と「方向フィルター」の役割分担にあります。この構造は、ピボットを前日高値・安値のラインに、移動平均を平均足のような別の方向指標に置き換えても崩れないため、cBot設計のひな型として持っておくと応用が利きます。

自分で組んでみたい方は、Claude Codeを併走させた開発の下敷きとして、この記事の構成を設計メモ代わりに使ってみてください。作るより相談したいという方は、ai-programming.xyzで個別の開発相談を受け付けています。設計の骨子を持ち込んでいただけると、要件の擦り合わせが早く進みます。体系的に学びたい方には、スクールで実装手順を一段ずつたどれるコースも用意しています。

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