📝 概要
今回は、TradingViewのPine Scriptで作成した ATR Trailing Stop Reversal Strategy を紹介します。
この戦略は、いわゆる UT Bot系のロジック をベースにしたストラテジーです。
ざっくり言うと、価格とATRトレーリングストップの位置関係を見ながら、上抜けたらロング、下抜けたらショートに切り替える戦略です。
使っている考え方はとてもシンプルです。
価格がATRトレーリングストップを上抜けたら、上方向への転換と判断してロング。
価格がATRトレーリングストップを下抜けたら、下方向への転換と判断してショート。
つまり、名前の通り ATRトレーリングストップを使ったリバーサル型の順張り戦略 です。
この戦略の特徴は、単純な移動平均線クロスではなく、ATRを使って相場のボラティリティを考慮している ところです。ボラティリティが大きい相場ではストップ幅も広がり、ボラティリティが小さい相場ではストップ幅も狭くなります。
つまり、相場の呼吸に合わせてストップラインが動くイメージです。カチカチの固定幅ストップではなく、少し柔軟な戦略ですね。
トレンドが出る場面では比較的きれいに乗りやすい一方、レンジ相場では売買シグナルが行ったり来たりしやすいので、そこは注意ポイントです。
バックテスト
XAUUSD専用です。

🎯 作成の意図
このストラテジーの狙いは、ATRトレーリングストップを使って、トレンド転換をシンプルに売買ルール化すること です。
トレードでは、「どこで入るか」も大事ですが、それと同じくらい「どこで方向転換と判断するか」が重要です。このコードでは、その判断基準としてATRトレーリングストップを使っています。
ATRは、Average True Rangeの略で、相場の値動きの大きさ、つまりボラティリティを見るための指標です。通常の固定幅ストップだと、値動きが荒い場面ではすぐに刈られやすくなります。
逆に、値動きが小さい場面ではストップが広すぎて、損切りが遅れることもあります。
そこでATRを使うことで、
・値動きが大きいときは、広めに見る
・値動きが小さいときは、狭めに見る
という調整ができます。
この戦略では、価格がATRトレーリングストップより上にあるときは上昇方向、下にあるときは下降方向と見ます。そして、価格がそのラインをクロスしたタイミングで売買シグナルを出します。
ロングだけでなくショートにも対応しているので、上昇トレンドだけでなく下落トレンドも取りに行ける構成です(とはいえ、XAUUSDではロングのみに設定してますが)。
また、ロングとショートはそれぞれオン・オフを切り替えられます。
そのため、
・ロング専用で検証する
・ショート専用で検証する
・ロングとショートの両方で検証する
といった使い分けも可能です。
📘 コード(戦略部分)の解説
UT Bot系(ATRトレーリングストップを中心に据えた戦略)の中心となるパラメータです。
sensitivity = input.float(1.0, title="Key Value (Sensitivity)", minval=0.1, step=0.1)
atrPeriod = input.int(10, title="ATR Period", minval=1)
useHeikinAshi = input.bool(false, title="Use Heikin Ashi?")
sensitivity は、ATRトレーリングストップの感度を決めるパラメータです。
値を大きくすると、トレーリングストップの幅が広がり、シグナルは出にくくなります。
逆に値を小さくすると、ストップ幅が狭くなり、シグナルは増えやすくなります。
つまり、
・Key Valueを大きくする:ゆったり判定
・Key Valueを小さくする:敏感に判定
というイメージです。
次に、ATRトレーリングストップの計算部分です。
atrTrailingStop = 0.0
previousTrailingStop = nz(atrTrailingStop[1], 0.0)
if sourcePrice > previousTrailingStop
atrTrailingStop := sourcePrice[1] > previousTrailingStop ? math.max(previousTrailingStop, sourcePrice - atrLoss) : sourcePrice - atrLoss
else
atrTrailingStop := sourcePrice < previousTrailingStop and sourcePrice[1] < previousTrailingStop ? math.min(previousTrailingStop, sourcePrice + atrLoss) : sourcePrice + atrLoss
ここがこの戦略の心臓部です。
価格が前回のトレーリングストップより上にある場合は、上昇トレンド側のストップとして機能します。その場合、ストップラインは基本的に価格の下側に置かれます。
逆に、価格が前回のトレーリングストップより下にある場合は、下降トレンド側のストップとして機能します。
その場合、ストップラインは基本的に価格の上側に置かれます。
上昇中はストップラインが下から追いかけてくる。
下落中はストップラインが上から追いかけてくる。
そんな感じ。
トレンドに沿ってじわじわ追尾するので、トレーリングストップという名前がしっくり来ます。
🚀 ワン モア ステップ
この戦略は、ATRトレーリングストップを使ったかなり実用的な土台です。
ただし、このまま使うだけでなく、いくつか改良ポイントがあります。
まず試したいのは、Key ValueとATR期間の最適化 です。
デフォルトでは、
・Key Value:1.0
・ATR期間:10
になっています。
Key Valueを大きくすると、ストップラインが価格から離れるため、シグナルは減りやすくなります。そのぶん、細かいノイズには強くなります。
反対に、Key Valueを小さくすると、ストップラインが価格に近づくため、シグナルは増えやすくなります。ただし、レンジ相場ではダマシも増えやすくなります。
このあたりは、かなり味付けが変わる部分です。
同じUT Bot系のロジックでも、Key ValueとATR期間が違うだけで、まったく別の戦略に見えることがあります。
次に試したいのは、上位足トレンドフィルター です。
この戦略は、価格がATRトレーリングストップをクロスすればシグナルが出ます。
そのため、レンジ相場ではロングとショートを細かく切り替えてしまうことがあります。
そこで、上位足のトレンド方向と一致したときだけエントリーするようにすると、不要なシグナルを減らせる可能性があります。
たとえば、
・日足EMAが上向きのときだけロング
・日足EMAが下向きのときだけショート
・4時間足のトレンドと一致したときだけエントリー
といったフィルターです。
短期足だけ見ていると波に振り回されますが、上位足を見ると潮の流れが見えやすくなります。
最後に、固定の利食い・損切りを追加する という方法もあります。
「いや、せっかくATR使ってるのに固定に戻るの?」という声が聞こえてきそうですが、以外にこっちのほうが効くことがあります。興味がある人はやってみましょう。
コアメンバー向けソース
こちらからどうぞ。



コメント