この戦略は,動的ストップ損失レベルを設定するために,異なるパラメータを持つ2つのATRストップを使用します. 1つの高速ストップと1つのスローストップ. 異なるストップレベルの価格ブレイクに基づいてロングポジションを確立し,トレーリングストップを使用してポジションを終了します. 目標は,トレンドフォローする能力を最大化しながら,合理的なストップ損失レベルを設定するためにATRストップを使用することです.
この戦略は,ストップ損失レベルを2つ計算するためにATRインジケーターを使用する. ファーストストップはストップ距離として5期ATRを0.5倍にする. スローストップはストップ距離として10期ATRを3倍にする. 価格がファーストストップレベルを突破すると,ロングポジションが確立される. 価格がスローストップレベルを突破し続けると,ストップはスローストップレベルに調整される. 価格がダウンした場合,ストップレベルはクロスオーバー関係に基づいて調整される.
論理的には
速止Trail1を計算する: 5 期間のATR * 0.5
スローストップを計算するTrail2: 10 期間のATR * 3
価格がTRAIL1を突破すると,ロングポジションを設定します.
価格がTRAIL2を突破し続けると,ストップをTRAIL2に調整します.
トレイル1を壊して価格が下がると トレイル1に戻る
価格がTRAIL2を突破して下落を続けると,ストップをTRAIL2に調整します.
最後に,価格がストップレベルに達すると,ストップ損失でポジションを退場します.
この方法により,戦略はトレンドが逆転するときに損失を迅速に停止しながら,トレンド上昇時に利益を最大化することができます. 2つのストップはトレンドを捕捉し損失を制限するバランスも保持しています.
ATRストップは,市場の変動に基づいて動的ストップ損失レベルを設定する.
二重停止メカニズムは,損失を停止する傾向と後押し傾向のバランスをとります.
長期方向は全体的な上昇傾向と一致し,収益性が高くなります
シンプルで明快な論理,理解し実行しやすい
ストップ・ロスの厳格な規則は,損失を効果的に制限する.
誤ったATRパラメータにより,ストップが幅が広いり狭すぎたりする
長い方向は方向性バイアスがあり,市場のトップで停止する傾向があります
ダブルストップルールは複雑で,正しく設定しないと失敗する可能性があります
EMAクロスオーバーのようなフィルタがない場合,悪い取引を引き起こす可能性があります.
ポジション管理やリスク管理なし,過剰取引のリスク
ATRパラメータを最適化し,フィルターを追加し,リスク管理を強化することで これらのリスクを軽減できます.
最適な結果を得るため,ATRパラメータの組み合わせを最適化
EMAのようなフィルターを追加して入口信号を評価します
追加的なエッジのためにストックRSIのような指標を組み込む
位置管理を最適化するために再入力論理を追加
リスク管理のルールを最適化し,取引ごとにストップ損失を制限する
方向性に関する誤りを避けるために市場レベルの分析を組み込む
時計などより速い時間枠戦略を考慮してください
多市場共通戦略への拡大
高性能取引エンジンを展開する
これらの改善により,戦略はより堅牢で安定し,利益を得ることができます.
この戦略は,長いエントリーと出口のために明確なATRトレーリングストップを使用している.利点は,トレンドを追跡する際に損失を制限するための厳格なストップロスのルールにあります.より良いパラメータ,フィルターを追加し,リスク管理を強化するなどの最適化によって軽減できる方向性バイアスのリスクがあります.さらなるテストと改善により,これは信頼できるトレンドフォロー戦略になることができます.
/*backtest start: 2023-10-25 00:00:00 end: 2023-11-01 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ATR Trailing Stop Strategy (Long Position Only)", overlay=true) SC = input(close, "Source", input.source) // Fast Trail AP1 = input(5, "Fast ATR period", input.integer) AF1 = input(0.5, "Fast ATR multiplier", input.float) SL1 = AF1 * atr(AP1) Trail1 = 0.0 Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0), SC + SL1, na)) // Slow Trail AP2 = input(10, "Slow ATR period", input.integer) AF2 = input(3, "Slow ATR multiplier", input.float) SL2 = AF2 * atr(AP2) Trail2 = 0.0 Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0), SC + SL2, na)) Green = Trail1 > Trail2 and close > Trail2 and low > Trail2 Buy = crossover(Trail1, Trail2) plotshape(Buy, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) strategy.entry("Buy", strategy.long, when = Buy) var float trailingStopPrice = na if (Trail2 > trailingStopPrice) trailingStopPrice := Trail2 if (crossover(Trail1, Trail2)) trailingStopPrice := Trail2 strategy.exit("Exit", from_entry = "Buy", stop=trailingStopPrice)