UT Bot インジケーターに基づく ATR 移動ストップロス戦略


作成日: 2024-03-11 11:17:33 最終変更日: 2024-03-11 11:17:33
コピー: 0 クリック数: 2014
1
フォロー
1617
フォロワー

UT Bot インジケーターに基づく ATR 移動ストップロス戦略

概要

この戦略は,QuantNomadが開発したUT Botの指標に基づいて,モバイルストップの思考を組み合わせている. @Yo_adriiiiaanが原始コードを書き,@HPotterが修正した. この戦略は,LuxAlgoのSmart Money Conceptsと連携して使用される. この戦略は現在,テスト段階にある.

戦略原則

この戦略の基本原則は以下の通りです.

  1. 50期シンプル・モビング・アベージョンより高い値で取引を多発する.
  2. 複数頭ポジションの場合,移動ストップ価格を設定します.移動ストップ価格は,現在のクローズアップ価格の80% (~1-20%) です.移動ストップ価格は,価格上昇とともに上を移動するが,下を移動しないので,利益を保護する役割を果たします.
  3. 空頭ポジションの場合は,移動ストップ価格を設定します.移動ストップ価格は,現在のクローズアップ価格の120%で,1+20%です.移動ストップ価格は,価格が下がるにつれて下がりますが,上がることはありません.
  4. ATRを移動ストップの基準として使用する.ATR移動ストップの計算方法は,上方へ移動する際,前回のATR移動ストップ価格と現在の閉店価格-ATR*Key Value) の2つの大きい値; 下に移動すると,前回のATRを移動するストップ価格と (現在のクローズアップ価格+ATR)*Key Value) の2つの小さい値である。その中のKey Valueは,移動停止の感度を調節するためにユーザが設定するパラメータである。
  5. ATR移動ストップ価格の突破状況に基づいて,現在のポジションの方向を判断する.価格がATR移動ストップ価格を向上突破したとき,多頭ポジションを保持する.価格がATR移動ストップ価格を下方突破したとき,空頭ポジションを保持する.その他の場合,現在のポジションの状態を保持する.

優位分析

  1. 移動ストップの設定は,トレンド状況で戦略がより多くの利益を得られるようにするために,利益を十分に保護します.
  2. 複数の頭と空頭ポジションのそれぞれに止損を設定し,異なる状況に適応することができる.
  3. ATRを止損の基準として使用すると,止損位置を動的に調整でき,より柔軟に効率的になります.
  4. Key Value パラメータが提供され,ユーザーに最適化され,異なる品種と周期に応じて調整され,適応性を向上させることができる.

リスク分析

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