리소스 로딩... 로딩...

어댑티브 트레일링 스톱과 함께 고급 트렌드 다음 전략

저자:차오장, 날짜: 2024-12-20 14:12:05
태그:ATRSLTS

img

전반적인 설명

이 전략은 슈퍼트렌드 지표에 기반한 트렌드 다음 전략으로, 적응성 트레일링 스톱 로스 메커니즘과 결합된다. 전략은 주로 슈퍼트렌드 지표를 사용하여 시장 트렌드 방향을 파악하고 위험을 관리하고 출구 시기를 최적화하기 위해 동적으로 조정된 트레일링 스톱을 사용한다. 이는 퍼센트 기반, ATR 기반 및 고정 포인트 스톱을 포함한 여러 스톱 로스 방법을 지원하며, 다른 시장 조건에 따라 유연한 조정을 허용한다.

전략 원칙

전략의 핵심 논리는 다음의 핵심 요소에 기초합니다.

  1. 시장 변동성을 측정하기 위해 ATR (평균 진정한 범위) 를 결합하는 트렌드 결정의 주요 기초로 Supertrend 지표를 사용합니다.
  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")


관련

더 많은