スーパートレンドとMACDを組み合わせる考え方 — フリップの裏付けと勢いの衰えで出口を整える設計
スーパートレンド(Supertrend)は、ATR(平均真の値幅)を使って価格の上か下に1本のラインを描き、局面の向きと「ここを割ったら向きが変わる」水準を同時に示すインジケーターです。MACD(移動平均収束拡散法)は、短期と長期の指数平滑移動平均(EMA)の差から、値動きの勢いが強まっているのか弱まっているのかを読む指標です。
スーパートレンドは向きと撤退ラインを明快に示す一方で、ラインが反転(フリップ)した瞬間に、それが本物の方向転換なのかレンジ内の揺れなのかを判別できません。また保有中は、価格がラインに触れるまで何も知らせてくれません。本記事では、MACDを「フリップの裏付け」と「保有中の勢いの衰えの検知」という2つの場面に割り当てる設計を整理します。入口と出口の両方に第二の視点を足したいcBot開発者を想定しています。押し目側の使い方はスーパートレンドとRSIの組み合わせで扱っているので、あわせて読むと違いが見えやすいはずです。特定の設定や条件が成果を保証するものではなく、設計の考え方の整理として読んでください。
スーパートレンドの役割
最初に、スーパートレンドが単独で何を示し、どこで行き詰まるのかを確認します。
ラインは足の中値からATRの一定倍だけ離れた位置に置かれ、上向きの局面では価格の下側で切り上がり続け、下向きの局面では価格の上側で切り下がり続けます。終値がラインを反対側へ越えると、ラインは逆側へ移って色が変わります。ATRの基本はATRとはを参照してください。
単独で読み取れる情報は、主に次の3つです。
- 向き: ラインが価格の下にあるか上にあるか
- フリップ: 向きが切り替わった足
- 撤退ラインとしての水準: 保有ポジションの損切候補
限界は入口と出口の両側に現れます。入口側では、フリップは方向転換の「確認」ではなく「可能性の提示」にとどまります。値幅の小さいレンジでは、ラインを挟んだ価格の往復がそのままフリップの往復になり、反転のたびに逆方向へ振られやすくなります。出口側では、ラインが価格の勢いを見ていないことが問題になります。上昇の勢いが明らかに鈍っていても、価格がラインに届くまでスーパートレンドは「上向き継続」を示し続けます。ラインまでの距離が広い局面ほど、この空白は大きくなります。
MACDの役割
次に、勢いの変化を読む側としてのMACDを見ていきます。
MACDラインは短期EMAと長期EMAの差、シグナルラインはMACDラインをさらに平滑化したもの、ヒストグラムは両者の差です。基本的な読み方はMACDとはで解説しています。この記事で使うのは、次の2つの性質です。
- MACDラインの符号: ゼロラインの上なら短期平均が長期平均の上にある状態で、向きの大まかな裏付けになる
- ヒストグラムの増減: 勢いの加速と減速。縮み始めると勢いが衰えている材料になる
MACD単独の弱点は、価格水準の情報を持たないことです。ヒストグラムが縮んでも、それが押しの始まりなのかトレンドの終わりなのかは区別できず、どこで撤退するかの基準も持ちません。さらにレンジではゼロライン付近で符号が頻繁に入れ替わり、クロスが連発します。勢いの変化は測れても、それを「どの水準で行動に移すか」は別の仕組みに頼る必要があります。
なぜこの組み合わせか
ここでは、2つの指標がどう補い合うのかを入口と出口に分けて整理します。
スーパートレンドは「水準」を持ち、「勢い」を持ちません。MACDは「勢い」を持ち、「水準」を持ちません。この非対称性が組み合わせの根拠です。
入口: フリップの裏付け
フリップが出た時点で、MACDラインの符号とヒストグラムの増減が同じ向きを示しているかを確認します。
- 上向きフリップ + MACDラインがゼロより上 + ヒストグラムが増加 → 方向転換の裏付けがそろった候補とする材料
- 上向きフリップ + MACDラインがゼロより下 → 決めた本数の猶予内にそろうかを待ち、間に合わなければ見送る材料
- 猶予中に逆向きのフリップが出た → 揺れとみなして待ち状態を破棄する材料
レンジでのフリップの往復では、MACDもゼロライン近辺で小さく揺れていることが多く、両方の条件がそろう場面はトレンド相場より少なくなると考えられます。これがノイズフィルターとして機能することが期待される理由です。二重確認の一般的な考え方はダマシ回避の二重確認にまとめています。
出口: 勢いの衰えで撤退ラインを引き寄せる
保有中はスーパートレンドのラインを基本の撤退ラインとし、ヒストグラムが連続して縮んだら、ストップをラインより価格に近い位置へ引き上げる、あるいは部分決済を検討する、といった段階的な管理に使います。勢いの衰えは反転の証明ではないため、ここで全決済まで踏み込むかどうかは運用方針次第です。考え方の土台はトレーリングストップとはを参照してください。
ただし代償もはっきり書いておきます。両方とも過去の価格から計算される遅行系の指標で、裏付けを重ねるほど入口はさらに遅れます。フリップから裏付けまでの間に価格が進めば、ラインまでの距離が広がり、損切幅も大きくなります。フィルターで減らせるのは揺れの一部であり、遅れと引き換えである点は設計時に織り込んでおく必要があります。
パラメータをどう考えるか
パラメータに正解はないため、調整の方向性だけを整理します。
スーパートレンドの主な設定はATR期間と倍率です。倍率を上げるとフリップの頻度は下がりますが、ラインが遠くなり、撤退時の損失幅が広がります。MACDによる裏付けを足す場合はすでにフィルターが1段あるため、倍率を極端に大きくする必要性は下がるとも考えられます。
MACDは短期12・長期26・シグナル9が広く使われる設定です。期間を短くすると反応は速まりますが、ゼロライン付近の揺れも増えます。スーパートレンドのATR期間に比べてMACDの長期EMAがかなり長いと、裏付けの遅れが目立ちやすくなるため、両者の時間感覚をそろえる意識を持つとよいでしょう。
猶予本数と出口側の縮小判定本数は、この組み合わせ独自の設定です。ここを細かく詰めるほど過去データへの当てはめになりやすいため、少数の候補値で比較し、期間を分けたバックテストで傾向が保たれるかを確認する進め方が安全です。評価の際は、シグナル件数が十分か、特定の相場局面に偏っていないかもあわせて確認してください。
cBot化する際の考慮点
ここからは、cTraderのcBotに組み込む際の設計上のポイントです。
確定足のみで判定する: スーパートレンドのフリップもMACDの符号も、未確定足では足の途中で入れ替わります。OnBarで処理し、値はLast(1)(直近の確定足)から取ります。
向きと値の取得: 組み込みのIndicators.Supertrend(periods, multiplier)はUpTrendとDownTrendの2系列を持ち、該当しない側はNaNです。両方NaNの立ち上がり区間は判定対象外とします。MACDはIndicators.MacdCrossOver(source, longCycle, shortCycle, signalPeriods)でMACD・Signal・Histogramを取得できます。
裏付け待ちの状態管理: フリップと裏付けは別の足で起きることがあるため、「フリップ後の裏付け待ち」状態と経過本数を保持します。猶予切れで破棄、逆フリップで上書き、裏付け成立で発火して状態を閉じる、という3通りの遷移を明示的に書き分けます。
出口管理との連携: 保有中はヒストグラムの縮小が何本続いたかを数え、条件を満たしたときにストップ更新処理を呼びます。ストップを不利な方向へは動かさないガードを入れておき、スプレッド分の余白も考慮します。
計算負荷: どちらも組み込みインジケーターで、1足に1回の参照なら負荷は軽微です。インスタンスはOnStartで生成して使い回します。
// 例: フリップ後の裏付け待ちと、保有中の勢い衰え検知(OnStartで st / macd を生成済み)
bool isUp = !double.IsNaN(st.UpTrend.Last(1));
bool isDown = !double.IsNaN(st.DownTrend.Last(1));
if (!isUp && !isDown) return; // 計算に必要な本数が不足
int dir = isUp ? 1 : -1;
if (lastDir == 0) { lastDir = dir; return; } // 初回は基準の記録のみ
if (dir != lastDir) { pendingDir = dir; waitBars = 0; } // フリップ検出(逆フリップは上書き)
lastDir = dir;
double m = macd.MACD.Last(1);
double h1 = macd.Histogram.Last(1), h2 = macd.Histogram.Last(2);
if (pendingDir != 0)
{
bool agree = pendingDir * m > 0 && pendingDir * (h1 - h2) > 0;
if (agree) { /* 裏付けがそろった候補として判断材料に渡す */ pendingDir = 0; }
else if (++waitBars > maxWaitBars) pendingDir = 0; // 猶予切れで破棄
}
// 保有中: Math.Abs(h1) < Math.Abs(h2) が続いた本数を数え、ストップ引き上げの判断材料とする
実装の流れ
全体の処理を、入力から出力までの流れで整理します。
- 入力: 対象銘柄と時間足の確定足を
OnBarで受け取る - 計算: スーパートレンドの向きとライン値、MACDラインとヒストグラムを取得する
- 状態更新: フリップを検出したら裏付け待ちを開始し、待機中は経過本数を進める。保有中はヒストグラム縮小の連続本数を数える
- 判定: 未保有なら裏付けの成立か破棄か、保有中ならストップ引き上げや部分決済の要否を判断する
- 出力: 新規の場合はラインを損切候補としてロットを逆算し発注、保有中はストップ更新とログ出力を行う
この構成のポイントは、同じ2つの指標を、ポジションの有無によって別の問いに使い分けていることです。未保有のときは「この反転を信じてよいか」、保有中は「撤退ラインをどこまで引き寄せるか」を問います。分岐を分けておけば、入口のフィルターだけ、あるいは出口の管理だけを差し替えて検証することもできます。
どう活用するか
最後に、立場別の使い方をまとめます。
自作派の方は、本記事の「入口の裏付け」と「出口の引き寄せ」を別モジュールとして、Claude Code を使ったcBot開発の設計書にしてみてください。裏付け待ちの状態遷移はバグが出やすいため、足ごとの状態をログに出して確認する進め方がおすすめです。委託派の方は、ai-programming.xyzへの相談時に「スーパートレンドのフリップをMACDの符号とヒストグラムで裏付け、保有中はヒストグラムの縮小でストップを引き寄せたい」と伝えていただくと、要件のすり合わせが進めやすくなります。教育派の方は、ポジション有無による分岐と状態管理の練習題材として活用できます。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。