この戦略は,ATR (Average True Range) インジケーターとSMA (Simple Moving Average) インジケーターを組み合わせて,ダイナミック・トレリング・ストップ・トレーディング・システムを実装する.価格がSMAを超えると,ロングポジションを開き,ATRに基づいてダイナミック・ストップ・ロスを設定する.価格が上昇するにつれてストップ・ロスの価格が上昇し続ける.価格がダイナミック・ストップ・ロスの価格を下回ると,ポジションは閉鎖される.この戦略の主な考えは,ダイナミック・ストップ・ロスを使用してトレンド市場の利益をロックダウンし,引き下げを減らすことである.
この戦略は,ATRおよびSMA指標に基づいて動的なトレーリングストップ取引システムを実装し,トレンド市場のストップ損失ポジションを自動的に調整して利益を保護し,リスクを制御することができます.戦略論理は明確で,明らかな利点もありますが,いくつかの制限とリスクポイントもあります.ショート論理を追加し,ポジション管理を最適化し,最大ストップ損失を設定するなどの合理的な最適化と改善により,戦略の堅牢性と収益性がさらに向上できます.実用的な応用では,さまざまな取引品種とサイクルに応じて戦略パラメータを柔軟に調整し,リスクを厳格に制御する必要があります.一般的に,この戦略は定量取引のための実行可能なアイデアを提供し,さらなる調査と最適化に値します.
/*backtest start: 2023-03-05 00:00:00 end: 2024-03-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Trailingstop", overlay=true) if close > sma(close, 50) strategy.entry("long", strategy.long) // Trailing stop loss for long positions Trailperc = 0.20 price_stop_long = 0.0 if (strategy.position_size > 0) stopValue = close * (1 - Trailperc) price_stop_long := max(stopValue, price_stop_long[1]) else price_stop_long := 0 if (strategy.position_size > 0) strategy.exit(id="stoploss_long", stop=price_stop_long) // Trailing stop loss for short positions Trailperc_short = 0.20 price_stop_short = 0.0 if (strategy.position_size < 0) stopValue_short = close * (1 + Trailperc_short) price_stop_short := min(stopValue_short, price_stop_short[1]) else price_stop_short := 0 if (strategy.position_size < 0) strategy.exit(id="stoploss_short", stop=price_stop_short) // ATR Trailing Stop for visualization keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5) atrperiod = input(10, title="ATR Period") xATR = atr(atrperiod) nLoss = keyvalue * xATR xATRTrailingStop = 0.0 xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) pos = 0 pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")