MACDとATRを組み合わせる考え方 — モメンタムの大きさを変動幅で正規化して読む設計

MACDはモメンタム(値動きの勢い)の向きと変化を捉える定番の指標ですが、cBotに組み込もうとすると「ヒストグラムがどれくらい大きければ意味のある動きとみなすか」という閾値の問題に突き当たります。MACDの値は価格そのものの単位で出るため、銘柄が変わっても、同じ銘柄で時期が変わっても、同じ数字が同じ意味を持ちません。

本記事では、この問題をATR(平均的な値動きの幅)で割ることで扱いやすくする組み合わせを整理します。フィルターとして2つの指標を並べるのではなく、一方をもう一方の「物差し」として使う構成です。複数銘柄で同じロジックを動かしたい方、閾値の決め方に迷っている方に向けた設計の参考としてまとめており、特定の設定が成果につながるという話ではありません。

MACDヒストグラムをATRで割り、変動幅に対する比率として読む構成の模式図

MACD の役割

MACDは、短期と長期の指数平滑移動平均(EMA)の差を取り、その差がどちら向きにどれだけ開いているかでモメンタムを測る指標です。MACDライン、それを平滑化したシグナルライン、両者の差を棒で示すヒストグラムの3要素で構成されます。基礎は別記事のMACDとはにまとめています。

単独で使う場合、ラインのクロスやヒストグラムの符号反転が、勢いの転換を観察する材料になります。

限界は2つあります。1つ目は、値動きの小さい局面でもクロスが発生する点です。ほぼ横ばいの相場ではヒストグラムがゼロ付近を細かく行き来し、符号反転だけを条件にすると意味の薄いシグナルが連続します。2つ目は スケールが価格に依存する 点です。価格水準の高い銘柄と低い銘柄ではヒストグラムの桁がまったく違うため、「この値を超えたら有効」という固定の閾値を銘柄をまたいで使い回せません。

ATR の役割

ATR(Average True Range)は、一定期間の値幅の平均を取り、いまの相場が1本あたりどれくらい動いているかを示す指標です。方向は示さず、動きの大きさだけを価格単位で返します。詳しくはATRとはを参照してください。

単独では、損切り幅の目安や、相場が活発か静かかの判定に使われます。

限界は明確で、ATRには 方向の情報がありません。値が大きくても、それが上昇によるものか下落によるものかは分からず、ATRだけでは売買方向の判断材料になりません。また平均値である以上、急な変動に対しては遅れて反応します。

なぜこの組み合わせか

この組み合わせの要点は、MACDとATRが 同じ単位(価格)を持っている ことです。同じ単位の値どうしは割り算ができ、その結果は単位のない比率になります。

この比率にすると、MACDの2つの弱点に同時に手が届きます。

まずスケールの問題です。比率は価格水準に左右されにくいため、銘柄ごとに閾値を作り直す手間を減らせます。同じ銘柄でも、変動の大きい時期と小さい時期で同じ基準を当てやすくなります。

次に、小さな値動きでのクロスの問題です。比率の絶対値が小さい間は「勢いが変動幅に対して目立たない」とみなして見送り、一定の大きさを超えたときだけ材料として扱う、という設計にできます。一般論として、ATRがノイズフィルターの基準として機能することが期待できます。

ATRは従来どおり損切り幅の設計にも使えるため、1つの指標が「判定の物差し」と「リスク幅の物差し」を兼ねる構成になります。利確・損切り幅の考え方はATRベースの利確幅設計で扱っています。

ただし注意点もあります。変動幅が急拡大した直後はATRが大きくなり、比率が小さく出て、強い動きの初動を見送る場面が生じます。逆に極端に静かな相場ではATRが小さくなり、わずかな動きでも比率が大きく出ます。正規化は便利な道具ですが、判定の歪みを別の形に置き換えている面があることは理解しておく必要があります。

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

正解となる設定はなく、方向性だけを整理します。

MACDの期間 は12・26・9が標準として広く参照されます。短くすると反応が速くなる代わりにヒストグラムの振れが細かくなり、長くすると滑らかになる代わりに検知が遅れる傾向があります。

ATRの期間 は14が標準です。ここで意識したいのは、MACDの長期側の期間との釣り合いです。ATRの期間が極端に短いと分母が1本ごとに大きく動き、比率そのものが不安定になります。物差しとして使う以上、分母はある程度ゆっくり動くほうが扱いやすいと考えられます。

比率の閾値 は、この組み合わせで新しく生まれるパラメータです。短期向けには低め、長期向けには高めという程度の方向性はありますが、適切な値は時間足と銘柄の性格で変わります。過去データで比率の分布を実際に出力し、どの水準が多くてどの水準が稀かを確認してから決める手順をおすすめします。バックテストでの検証は省略できない工程です。

cBot化する際の考慮点

cTraderのcBotとして実装する場合の設計ポイントを挙げます。

ゼロ除算の防止: 比率を取る以上、分母のATRがゼロまたは極小になる状況を想定します。休場明けや値動きのない足が続いた場合に起こり得るため、下限値を設けて判定をスキップする処理を入れます。

データ取得タイミング: 確定足(OnBar)での判定が基本です。形成中の足ではヒストグラムもATRも動き続けるため、OnTickで比率を評価すると閾値の前後で判定が揺れます。

計算順序と履歴不足: MACDとATRは互いに依存しないので順序は自由ですが、比率の計算は両方がそろってから行います。起動直後は長期EMAの期間分の足がそろうまで値が安定せず、NaNが返る場合もあるため、判定前のチェックが必要です。

計算負荷: インジケーターの生成はOnStartで一度だけ行い、OnBarでは値の参照に留めます。

// 例: OnStartで生成済みの macd / atr を OnBar で参照する
double hist = macd.Histogram.Last(1);   // 確定足の値
double atrValue = atr.Result.Last(1);

if (double.IsNaN(hist) || double.IsNaN(atrValue)) return;
if (atrValue < Symbol.TickSize) return; // ゼロ除算の防止

double ratio = hist / atrValue;         // 単位のない比率

// Math.Abs(ratio) が閾値未満なら「勢いが目立たない」として見送り、
// 閾値以上のときだけ符号(向き)を判断材料として扱う

ポジション管理との連携: 損切り幅にも同じATRを使う場合、エントリー時点の値を保持して使うのか、毎足更新するのかを先に決めておきます。ここが曖昧だと、バックテストと実運用で挙動がずれる原因になります。

実装の流れ

全体を入力→計算→判定→出力の順に整理します。

  1. 入力: 銘柄・時間足を決め、OnStartでMACDとATRを生成する
  2. 計算: OnBarで確定足のヒストグラムとATRを取得し、比率を求める
  3. 大きさの判定: 比率の絶対値が閾値未満なら見送る
  4. 向きの判定: 閾値以上のとき、比率の符号と前の足からの変化を確認する
  5. 出力: 判定結果と比率の値をログ・通知に出し、必要ならATR基準の損切り幅を添える

最初は発注まで直結させず、比率の値をログに残して分布を観察する段階を挟むと、閾値の検討がしやすくなります。

比率の計算から大きさの判定、向きの判定、出力までの戦略フロー図

どう活用するか

自作派の方は、Claude Codeを使った開発の際に「ヒストグラムをATRで正規化した比率を判定に使う」という一文を仕様として渡すと、設計の意図が伝わりやすくなります。委託派の方は、対象銘柄の数と「銘柄ごとに閾値を持つか、共通にするか」を整理したうえで ai-programming.xyz へご相談いただくと、要件のすり合わせが進めやすくなります。教育派の方は、スクールの演習として比率の分布をログ出力し、銘柄間で比べてみると正規化の意味が体感できます。

モメンタムを別の角度から選別する構成としては、MACDとADXの組み合わせも参考になります。ADXが「トレンドの強さ」で選別するのに対し、本記事の構成は「変動幅に対する大きさ」で選別する点が違いです。

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