UT ボット インディケーター ベース ATR トレイリングストップ 戦略

作者: リン・ハーンチャオチャン, 日付: 2024-03-11 11:17:33
タグ:

img

概要

この戦略は,QuantNomadが開発したUT Botインジケーターをベースに,トレーリングストップロスのアイデアを組み込みました.オリジナルのコードは@Yo_adriiiiaanによって書かれ,@HPotterによって修正されました.この戦略は,LuxAlgoのスマートマネーコンセプトと組み合わせて使用されます.現在,戦略はテスト段階にあります.

戦略原則

この戦略の主な原則は以下のとおりです.

  1. 閉じる価格が50期間の単純な移動平均値より高くなった場合,ロング取引が開始されます.
  2. ロングポジションでは,トライリングストップ損失価格が設定される.トライリングストップ損失価格は,現在の閉店価格の80% (1-20%) である.トライリングストップ損失価格は,価格上昇とともに上昇するが,減少しない.したがって利益を保護する.
  3. ショートポジションでは,トレーリングストップ損失価格も設定されています.トレーリングストップ損失価格は,現在の閉店価格の120% (1+20%) です.トレーリングストップ損失価格は,価格の下落とともに下がりますが,上昇しません.
  4. ATR (Average True Range) は,トレーリングストップの基準として使用される.ATRトレーリングストップ価格の計算方法は:上向きに動くと,以前のATRトレーリングストップ価格の大きい値と (現在の閉盤価格 - ATR * キー値) を取る.下向きに動くと,以前のATRトレーリングストップ価格の小さい値と (現在の閉盤価格 + ATR * キー値) を取る.キー値は,トレーリングストップの感度を調整するために使用されるユーザー設定パラメータである.
  5. ATR トレイリングストップ価格の突破に基づいて,現在のポジション方向が決定されます.価格がATR トレイリングストップ価格を超えると,ロングポジションが保持されます.価格がATR トレイリングストップ価格を下回ると,ショートポジションが保持されます.他の場合,現在のポジションの状態は変化しません.

利点分析

  1. トレーリングストップの設定は利益を効果的に保護し,戦略がトレンド市場でより多くの利益を得ることができます.
  2. ロングとショートポジションのストップ損失を別々に設定することは,異なる市場状況に適応できる.
  3. ストップ・ロスの基準としてATRを使用することで,ストップ・ロスの位置を動的に調整し,より柔軟かつ効率的にします.
  4. キーバリューパラメータは,ユーザー最適化のために提供されており,適応性を向上させるために異なる品種やサイクルに応じて調整できます.

リスク分析

  1. 不安定な市場では 頻繁にストップアウトする取引が 過剰な取引に繋がり 佣金費用が増加し 収益が低下します
  2. 固定パーセンテージのトレーリングストップ方法は比較的シンプルで,一部の市場条件では価格変動にうまく対応できない場合があります.
  3. この戦略は,遅延停止のみを考慮し,遅延利益目標を設定していない.これは,いくつかの利益機会を逃す可能性があります.
  4. パラメータの選択は戦略の業績に大きな影響を及ぼし,不適切なパラメータは引き上げリスクが大きくなる可能性があります.

最適化方向

  1. 他の指標や条件,例えば取引量や変動は,エントリー条件を最適化し,信号の信頼性を向上させるために検討できる.
  2. トレイリングストップの計算方法については,パラボリックストップ損失またはダイナミック・パーセンテージストップ損失などのより複雑で効果的な方法を探求することができる.
  3. 例えば,ATRやパーセントに基づいて動的な利益目標を設定することで,利益をより確実に確保できる.
  4. パラメータ最適化は,最も適したパラメータ組み合わせを見つけるために,異なる品種やサイクルで実行できます.また,市場状況の変化に応じてパラメータを動的に調整することもできます.

概要

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")

もっと