この戦略は,QuantNomadが開発したUT Botインジケーターをベースに,トレーリングストップロスのアイデアを組み込みました.オリジナルのコードは@Yo_adriiiiaanによって書かれ,@HPotterによって修正されました.この戦略は,LuxAlgo
この戦略の主な原則は以下のとおりです.
UT Bot インディケーターに基づいたこの戦略は,トレンド市場の利益を保護できるトライリングストップロジックを含有している.同時に,戦略は,ロングとショートポジションのストップ損失を別々に設定し,高度に適応できるようにする.トライリングストップの基準としてATRを使用することで,ストップ損失ポジションのダイナミックな調整が可能になり,柔軟性が向上する.しかし,この戦略は,不安定な市場で頻繁なストップアウトによる高取引コストのリスクに直面し,トライリング利益目標設定がないため,利益機会を逃す可能性があります.また,パラメータの選択は戦略のパフォーマンスに大きな影響を与えます.
将来,戦略は,より安定した収益を得るために,エントリー条件を最適化し,より複雑なトライリングストップ方法を探求し,トライリング利益目標メカニズムを追加し,異なる品種やサイクルのためのパラメータを最適化することで改善することができる.全体として,戦略のアイデアはシンプルで直接的で,理解し実行しやすいが,さらなる最適化のための余地があり,探索と改善を続けることに価値がある.
/*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")