資源の読み込みに... 荷物...

アダプティブ トレイリングストップの先端トレンドフォロー戦略

作者: リン・ハーンチャオチャン開催日:2024年12月20日 14:12:05
タグ:ATRSLTS

img

概要

この戦略は,スーパートレンド指標に基づいたトレンドフォロー戦略であり,適応型トレーリングストップロスのメカニズムと組み合わせられている.この戦略は主にスーパートレンド指標を使用して市場のトレンド方向を特定し,リスクを管理し,出口タイミングを最適化するために動的に調整されたトレーリングストップを使用している. パーセントベースの,ATRベースの,固定ポイントストップを含む複数のストップロスの方法をサポートし,異なる市場状況に応じて柔軟な調整が可能である.

戦略の原則

戦略の基本論理は次の主要な要素に基づいています

  1. 市場変動を測定するために,ATR (平均の真の範囲) を組み合わせる,スーパートレンド指標をトレンド決定の主な基盤として使用します.
  2. 入力シグナルはスーパートレンドの方向の変化によって引き起こされ,ロング,ショート,または二国間取引をサポートします.
  3. ストップ・ロスのメカニズムは,市場の変動に基づいて自動的に調整される適応型トレーリング・ストップを使用します.
  4. 取引管理システムには,ポジションサイズ (口座資本のデフォルト15%) と時間フィルタリングメカニズムが含まれます.

戦略 の 利点

  1. 強力なトレンドキャプチャ能力: スーパートレンド指標を通じて主要なトレンドを効果的に識別し,偽信号を減らす
  2. 総合的なリスク管理: 異なる市場環境に適した様々なストップ損失メカニズムを使用する
  3. 高い柔軟性:複数の取引方向とストップ・ロスのメソッドの設定をサポート
  4. 高い適応力: 市場の変動に応じて自動調整し,戦略の適応性を高める.
  5. 完全なバックテストシステム: 履歴性能分析のための時間フィルタリング機能

戦略リスク

  1. トレンド逆転リスク: 変動が激しい市場では誤った信号が発信される可能性があります
  2. スリップリスク: トレイリングストップ実行は市場の流動性によって影響を受ける可能性があります.
  3. パラメータの感度: スーパートレンドファクターとATR期間の設定は戦略の業績に影響を及ぼします
  4. 市場環境による依存: 異なる市場での頻繁な取引はコストを増加させる可能性があります

戦略の最適化方向

  1. シグナルフィルタリングの最適化: 偽信号をフィルタリングするために追加の技術指標を追加できます
  2. ポジション管理の最適化: ポジションサイズは市場の変動に基づいて動的に調整できます
  3. ストップ損失メカニズムの強化:コスト平均価格を組み込むより複雑なストップ損失ロジックは設計できます
  4. 入場タイミングの最適化: 入場精度を向上させるために価格構造分析を追加できます
  5. バックテストシステムの改善: 戦略の業績を評価するためにより多くの統計指標を追加することができます

概要

これは,制御可能なリスクを持つ戦略をフォローするよく設計されたトレンドである.スーパートレンド指標と柔軟なストップロスのメカニズムを組み合わせることで,戦略はリスクを効果的に制御しながら高い収益性を維持することができる.戦略は高度に構成可能で,異なる市場環境で使用するのに適していますが,徹底的なパラメータ最適化とバックテストの検証が必要です.将来の改善は,戦略の安定性と収益性をさらに高めるためにより多くの技術分析ツールとリスク管理措置を追加することによって行えます.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Supertrend Strategy with Adjustable Trailing Stop [Bips]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=15)

// Inputs
atrPeriod = input(10, "ATR Länge", "Average True Range „wahre durchschnittliche Schwankungsbreite“ und stammt aus der technischen Analyse. Die ATR misst die Volatilität eines Instruments oder eines Marktes. Mit ihr kann die Wahrscheinlichkeit für einen Trendwechsel bestimmt werden.", group="Supertrend Settings")
factor = input.float(3.0, "Faktor", step=0.1, group="Supertrend Settings")
tradeDirection = input.string("Long", "Trade Direction", options=["Both", "Long", "Short"], group="Supertrend Settings")
sl_type    = input.string("%", "SL Type", options=["%", "ATR", "Absolute"])
// Parameter für ST nur für einstieg -> Beim Ausstieg fragen ob der bool WWert true ist -> Für weniger und längere Trädes 

sl_perc    = input.float(4.0, "% SL", group="Stop Loss Einstellung")
atr_length = input.int(10, "ATR Length", group="Stop Loss Einstellung")
atr_mult   = input.float(2.0, "ATR Mult", group="Stop Loss Einstellung")
sl_absol   = input.float(10.0, "Absolute SL", group="Stop Loss Einstellung")

//-------------------------//
// BACKTESTING RANGE
fromDay   = input.int(defval=1, title="From Day", minval=1, maxval=31, group="Backtesting Einstellung")
fromMonth = input.int(defval=1, title="From Month", minval=1, maxval=12, group="Backtesting Einstellung")
fromYear  = input.int(defval=2016, title="From Year", minval=1970, group="Backtesting Einstellung")
toDay     = input.int(defval=1, title="To Day", minval=1, maxval=31, group="Backtesting Einstellung")
toMonth   = input.int(defval=1, title="To Month", minval=1, maxval=12, group="Backtesting Einstellung")
toYear    = input.int(defval=2100, title="To Year", minval=1970, group="Backtesting Einstellung")

startDate  = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond  = time >= startDate and time <= finishDate

//-------------------------//
// Supertrend calculation
[_, direction] = ta.supertrend(factor, atrPeriod)

// SL values
sl_val = sl_type == "ATR"      ? atr_mult * ta.atr(atr_length) : 
         sl_type == "Absolute" ? sl_absol : 
         close * sl_perc / 100
         
// Init Variables
var pos         = 0
var float trailing_sl = 0.0

// Signals
long_signal  = nz(pos[1]) !=  1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low  < nz(trailing_sl[1]) 

// Calculate SL
trailing_sl := short_signal     ? high + sl_val : 
               long_signal      ? low  - sl_val : 
               nz(pos[1]) ==  1 ? math.max(low  - sl_val, nz(trailing_sl[1])) :  
               nz(pos[1]) == -1 ? math.min(high + sl_val, nz(trailing_sl[1])) : 
               nz(trailing_sl[1])
               
// Position var               
pos := long_signal  ? 1 : short_signal ? -1 : nz(pos[1]) 

// Entry logic
if ta.change(direction) < 0 and time_cond
    if tradeDirection == "Both" or tradeDirection == "Long"
        strategy.entry("Long", strategy.long, stop=trailing_sl)
    else
        strategy.close_all("Stop Short")

if ta.change(direction) > 0 and time_cond
    if tradeDirection == "Both" or tradeDirection == "Short"
        strategy.entry("Short", strategy.short, stop=trailing_sl)
    else
        strategy.close_all("Stop Long")

// Exit logic: Trailing Stop and Supertrend
//if strategy.position_size > 0 and not na(trailing_sl)
    //strategy.exit("SL-Exit Long", from_entry="Long", stop=trailing_sl)

//if strategy.position_size < 0 and not na(trailing_sl)
    //strategy.exit("SL-Exit Short", from_entry="Short", stop=trailing_sl)

// Trailing Stop visualization
plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)
//plot(not na(trailing_sl) ? trailing_sl : na, color=pos == 1 ? color.green : color.red, linewidth=2, title="Trailing Stop")


関連性

もっと