移動平均・RSI・ATRの三層構成 — 環境認識とエントリー判定とリスク幅を分けて設計する
ロジックを設計していると、条件を足すほど判断が良くなるように感じます。ただ実際には、「どの条件が何を担当しているのか」が曖昧なまま数だけ増えていくケースのほうが多いのではないでしょうか。本記事では、移動平均で環境、RSIでタイミング、ATRでリスク幅という、役割の異なる三層に分けて組み立てる考え方を整理します。主眼は「シグナルをもう1つ足すこと」ではなく、シグナルを出す層と、判断が外れたときの損失幅を決める層を分離することにあります。cBotの自作を検討している方、条件が増えて構造が見えにくくなってきた方に向けた内容です。
移動平均の役割 — 環境を決める層
移動平均は一定期間の終値を平滑化した線で、この構成では「いまはどちら向きの前提で考えるべき局面か」を決める環境層を担当します。判定材料としては、価格が移動平均のどちら側にあるか、そして移動平均自体の傾きがどちらを向いているか、という2点で十分に機能します。
環境層に求められるのは、細かく反応することではなく、判断の前提を安定させることです。この層で方向を1つに絞っておくと、下位の判定層は「逆張りすべきか順張りすべきか」を毎回考え直す必要がなくなり、ロジック全体の見通しが良くなります。
単独使用時の限界もはっきりしています。移動平均は過去の値を平均する構造上、方向の切り替わりには遅れが伴います。また、レンジでは価格が移動平均をまたいで往復するため、環境判定そのものが頻繁に反転してしまいます。方向は示せても、いつ入るかというタイミングの情報は持っていません。
RSIの役割 — タイミングを測る層
RSIは一定期間の値上がり幅と値下がり幅の比率から、価格の振れの偏りを0〜100の範囲で表すオシレーター系指標です。この構成では、環境層が決めた方向に対して「いま引き付けられた位置にあるか」を測る判定層を担当します。
注目するのは水準そのものより、水準からの戻りです。環境が上向きと判定されている局面で、RSIが中央付近まで下げてから再び上向きへ転じる、といった動きは、押し目形成が一巡した可能性を示す材料になります。買われ過ぎ・売られ過ぎのゾーンだけを見る使い方より、環境と組み合わせたときの整合性が取りやすくなります。
限界は、RSI単独では方向の前提を持てないことです。トレンドが強い局面ではRSIが高い水準に張り付いたまま推移することがあり、その状態を反転の兆候と読むと、流れに逆らった判断を繰り返すことになります。RSIはあくまで「環境層が決めた向きの中での位置」を測る道具として置くのが、この構成での位置づけです。
ATRの役割 — リスク幅を決める層
ATR(Average True Range)は、直近の値幅の平均から相場の変動の大きさを表す指標です。方向の情報は持たず、「いまの相場がどれくらい動く状態か」だけを示します。
この三層構成でATRに任せるのは、シグナルの可否ではなく損切り幅とロットの決定です。同じ銘柄でも、変動が大きい局面と小さい局面では、値動きに耐えるために必要な損切り幅は変わります。値幅を固定してしまうと、変動が大きい局面では通常の揺り戻しで決済され、小さい局面では必要以上に損失幅を広く取ることになります。ATRの倍率で損切り幅を決める設計にすると、その差を自動的に吸収できます。考え方の詳細はATRベースの利確幅設計でも扱っています。
さらに、損切り幅が決まればロットも決まります。1トレードあたりの許容損失額をあらかじめ決めておけば、そこから逆算してロットを算出できるためです(ロットの基礎)。ATR単独では何のシグナルにもなりませんが、リスク側の設計を1つの層にまとめられる点に価値があります。
なぜシグナル層とリスク層を分けるのか
三層それぞれが別の質問に答えている、という点がこの構成の核です。
- 移動平均: どちら向きの前提で考えるか(環境)
- RSI: その向きの中で、いま入る位置にあるか(判定)
- ATR: 外れたとき、どこで撤退しどれだけ張るか(リスク)
補完関係は、前の2層のあいだで明確に働きます。移動平均の弱点である「タイミングを持たない」性質はRSIが補い、RSIの弱点である「方向の前提を持たない」性質は移動平均が補います。環境と逆向きのRSIシグナルを最初から除外する構造になるため、ノイズフィルターとして機能することが期待できます。
一方でATRは、前の2層とは性質が異なります。ATRを条件に加えてシグナルを絞り込むのではなく、シグナルが出た後の損失幅を決める係として独立させておく。この分離が実務上は効いてきます。シグナル条件とリスク設計が1つの条件式に混ざっていると、成績が変わったときに「判定を変えたせいか、損切り幅を変えたせいか」を切り分けられなくなるためです。層を分けておけば、検証も片方ずつ進められます。
もちろん、条件を重ねるほどシグナルの発生頻度は下がります。また、過去データに合わせ込んだ結果として条件が増えていく過剰最適化にも陥りやすくなります。三層構成は機会の多さではなく、判断の一貫性と検証のしやすさを優先する設計だと理解しておくと、期待とのずれを防げます。
パラメータをどう考えるか
調整対象は、移動平均の種類と期間、RSIの期間と参照する水準、ATRの期間と倍率です。数が多いので、正解を探すより方向性を押さえるほうが実用的です。
移動平均は、期間を長くすれば環境判定が安定する代わりに切り替わりが遅くなり、短くすれば追随は速くなる代わりに反転が増えます。RSIは、期間を短くすると振れが大きくなり反応が増え、長くすると滑らかになって反応が減ります。ATRの倍率は、大きくすれば通常の揺り戻しで決済されにくくなる代わりに1回あたりの損失幅が広がり、小さくすればその逆になります。
いずれも「短期向けか長期向けか」という程度の方向性に留め、決め打ちにしないことが重要です。三層すべてを同時に動かすと、どの変更が挙動に効いたのかが分からなくなります。層を1つずつ固定しながらバックテストで確認していく進め方が現実的です。
cBot化する際の考慮点
cTraderのcBotとして実装する場合、押さえておきたい論点を整理します。
計算順序: 三層には依存関係があります。環境層 → 判定層 → リスク層の順に評価し、前段で条件を満たさなければ後段を計算しない早期リターン型に組むと、処理も読みやすさも整理されます。
確定足で揃える: 形成中のバーはRSIもATRも値が動き続けます。判定は Last(1) の確定足で統一し、三層の参照タイミングをずらさないようにします。
エッジケース: 起動直後は参照本数が不足します。三層のうち最も長い期間(多くの場合は移動平均)を基準に本数チェックを入れてから判定を始めます。また、ATRから算出した損切り幅が極端に小さくなる場面では、ブローカーの最小ストップ距離を下回る可能性があるため、下限のガードを入れておくと安全です。
ロット計算: 損切り幅からロットを逆算する際は、Pip値と最小ロット単位での丸め処理が必要です。丸めた結果、許容損失額を超えないよう切り捨て方向で処理するのが基本です。
// 例: 三層を役割ごとに分けて評価する(すべて確定足ベース)
var ma = Indicators.MovingAverage(Bars.ClosePrices, MaPeriod, MovingAverageType.Exponential);
var rsi = Indicators.RelativeStrengthIndex(Bars.ClosePrices, RsiPeriod);
var atr = Indicators.AverageTrueRange(AtrPeriod, MovingAverageType.Exponential);
if (Bars.Count < MaPeriod + 5) return; // 参照本数不足のガード
// ① 環境層: 方向の前提を決める
bool envUp = Bars.ClosePrices.Last(1) > ma.Result.Last(1)
&& ma.Result.Last(1) > ma.Result.Last(5);
if (!envUp) return; // 前提が崩れていれば後段は評価しない
// ② 判定層: 環境と同じ向きへの戻りを検出する
bool turnedUp = rsi.Result.Last(2) < RsiMid && rsi.Result.Last(1) >= RsiMid;
if (!turnedUp) return;
// ③ リスク層: 損切り幅とロットを決める(シグナルの可否には関与させない)
double stopDistance = atr.Result.Last(1) * AtrMultiple; // 倍率は検証対象
計算負荷はいずれも軽く、OnBarでの運用であれば問題になりません。実装初期は三層のフラグとATR由来の損切り幅をバーごとにログへ残し、チャートと突き合わせて意図した場面で成立しているかを目視確認する工程を挟むと、調整の当たりが付けやすくなります。
実装の流れ
全体の処理は、上の層から下の層へ一方向に降りていく構造に整理できます。
- 入力: 対象銘柄と時間足を決め、終値系列と各指標を確定足ベースで更新する
- 環境層: 移動平均との位置関係と傾きから、上向き・下向き・方向感なしを分類する
- 判定層: 環境と同方向のRSIの戻りを検出する。整合しなければ見送りへ分岐する
- リスク層: ATRから損切り幅を算出し、許容損失額から逆算してロットを決める
- 発注・管理: 算出した損切り水準とロットで発注し、決済条件の管理へ引き継ぐ
ポイントは、三層を1つの複合条件にまとめず、層ごとに独立した判定として実装することです。層別のログを残しておけば、どの段で弾かれたのかを後から分析でき、条件の入れ替えやパラメータ調整の判断材料になります。
どう活用するか
自作派の方は、Claude Code を使ったcBot開発の設計ドキュメントとして、この三層の骨格をそのまま流用してみてください。「環境・判定・リスク」という分け方は、移動平均やRSIに限らず他の指標に差し替えても成立する構造です。
委託派の方は、ai-programming.xyz への開発相談時に「環境・判定・リスクの三層で分けたい」という枠組みを共有しておくと、要件定義がスムーズに進みます。教育派の方は、2指標構成に対してリスク層を後から足す実装課題として扱うと、シグナル設計とリスク設計を分離する意味を手を動かしながら確認できます。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。