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

나다라야-워튼 앙벨로프 다중 확인 동적 스톱 로스 전략

저자:차오장, 날짜: 2024-05-24 17:58:47
태그:ADXDIRSIMAE

img

전반적인 설명

이 전략은 나다라야-왓슨 을 사용하여 가격 데이터를 매끄럽게하고 매끄러운 가격에 따라 상위 및 하위 대역을 계산합니다. 그 다음 ADX 및 DI 지표를 사용하여 트렌드 강도 및 방향을 결정하고 RSI 지표를 사용하여 트렌드 모멘텀을 확인합니다. 가격이 대역을 넘어서거나 넘어서면 잠재적 인 브레이크오웃이 확인됩니다. 마지막으로 트렌드, 브레이크오웃 및 모멘텀의 결합 신호를 기반으로 거래를 실행하며 위험을 관리하기 위해 동적 스톱 로스를 사용합니다.

전략 원칙

  1. Nadaraya-Watson 을 적용하여 가격 데이터를 평평하게 하고 상부와 하부 대역을 계산합니다.
  2. ADX 및 DI 지표를 사용하여 트렌드 강도 및 방향을 결정합니다. ADX가 한계 이상이고 +DI가 -DI보다 크면 상승 추세가 표시되며 하락 추세가 나타납니다.
  3. 가격이 상단역 이상 또는 하단역을 넘을 때 잠재적인 브레이크오프를 식별합니다.
  4. RSI 인디케이터를 사용하여 트렌드 모멘텀을 확인합니다. 70 이상의 RSI는 상승 모멘텀을 나타냅니다. 30 이하의 RSI는 하락 모멘텀을 나타냅니다.
  5. 트렌드, 브레이크오웃, 모멘텀의 신호를 기반으로 거래를 실행합니다.
    • 강한 상승 추세, 상승 돌파, 상승 동력이 있을 때 긴 포지션을 입력합니다.
    • 강한 하락 추세, 하락 파격 및 하락 동력이 있을 때 짧은 지위에 진입합니다.
  6. 위험을 관리하기 위해 동적 스톱 로스를 구현합니다. 스톱 로스 가격은 가장 높은 가격/최저 가격 및 폐쇄 가격에 기초하여 계산됩니다.
  7. 그래프에 트렌드 라인, 브레이크아웃 포인트, 그리고 모멘텀 신호를 그리면서 전략 신호를 시각적으로 표시하세요.

전략적 장점

  1. 나다라야와 왓슨 은 가격 데이터를 효율적으로 부드럽게 하고 소음 간섭을 줄여줍니다.
  2. 멀티 확인 메커니즘은 신호 신뢰성을 향상시킵니다. 트렌드, 브레이크아웃 및 모멘텀 신호는 거래 기회를 검증하기 위해 상호 보완됩니다.
  3. 동적 스톱 로스 관리는 시장 변동에 더 잘 적응하고 위험을 줄입니다. 스톱 로스 가격은 가장 높은 가격/최저 가격 및 종료 가격에 기초하여 계산되며 시장에 따라 조정 할 수 있습니다.
  4. 그래프에서 트렌드 라인, 브레이크아웃 포인트 및 모멘텀 신호를 시각적으로 그래프로 표시하면 전략 신호의 사용자 관찰 및 해석이 용이합니다.

전략 위험

  1. 불안한 시장이나 트렌드 반전 시, 빈번한 브레이크아웃 신호는 오버 트레이딩과 손실로 이어질 수 있습니다.
  2. 동적 스톱 로스는 트렌드 역전 시 즉시 포지션을 종료하지 못하여 마감률이 증가할 수 있습니다.
  3. 나다라야-왓슨 앙벨로프의 대역폭과 ADX 임계치와 같은 전략 매개 변수는 다른 시장과 도구에 최적화되어야 합니다. 잘못된 매개 변수 설정은 전략의 성능에 영향을 줄 수 있습니다.

전략 최적화 방향

  1. 트렌드 식별의 정확성과 안정성을 향상시키기 위해 MACD, 이동 평균 시스템 등과 같은 추가 효과적인 트렌드 결정 지표를 포함합니다.
  2. 동적 스톱 로스 계산 방법을 ATR 및 SAR와 같은 변동성 관련 지표를 고려하여 최적화하여 스톱 로스를 보다 유연하고 효과적으로 만듭니다.
  3. 전략의 적응력을 높이기 위해 트렌드 또는 범위 제한 시장과 같은 다양한 시장 특성에 대한 다른 매개 변수 조합을 개발하십시오.
  4. 포지션 사이즈 모듈을 도입하여 시장 트렌드 및 변동성 등의 요인에 따라 포지션 사이즈를 동적으로 조정하여 위험을 제어합니다.

요약

이 전략은 ADX 및 DI, RSI 모멘텀 지표 및 가격 브레이크아웃 포인트와 같은 트렌드 지표와 가격 평형을 위한 나다라야-왓슨 앙벨프를 결합하여 포괄적인 거래 시스템을 만듭니다. 동적 스톱-로스 관리는 시장 변화에 적응하고 어느 정도 위험을 제어하는 데 도움이됩니다. 그러나 실제 응용에서는 트렌드 식별, 동적 스톱-로스 및 매개 변수 설정을 최적화하여 전략의 안정성과 수익성을 향상시키는 데주의를 기울여야합니다.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-18 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nadaraya-Watson Envelope with Multi-Confirmation and Dynamic Stop-Loss", overlay=true)

// Input parameters
h = input.float(7.2, "Bandwidth", minval=0)
mult = input.float(2.1, minval=0)
src = input(close, "Source")

// ADX and DI Input Parameters
adxLength = input.int(14, "ADX Length")
adxThreshold = input.float(25, "ADX Threshold")
adxSmoothing = input.int(14, "ADX Smoothing")

// Calculate ADX and DI
[dmiPlus, dmiMinus, adx] = ta.dmi(adxLength, adxSmoothing)
strongTrendUp = dmiPlus > dmiMinus and adx > adxThreshold
strongTrendDown = dmiMinus > dmiPlus and adx > adxThreshold

// Nadaraya-Watson Envelope Calculation
gauss(x, h) =>
    math.exp(-(math.pow(x, 2) / (h * h * 2)))

coefs = array.new_float(0)
den = 0.0

for i = 0 to 100
    w = gauss(i, h)
    array.push(coefs, w)

den := array.sum(coefs)

out = 0.0
for i = 0 to 100
    out += src[i] * array.get(coefs, i)
out /= den
mae = ta.sma(math.abs(src - out), 100) * mult

upper = ta.sma(out + mae, 10)
lower = ta.sma(out - mae, 10)

// Confirmations
breakoutUp = ta.crossover(src, upper)
breakoutDown = ta.crossunder(src, lower)

// Original RSI period and thresholds
rsiPeriod = input.int(14, "RSI Period")
rsi = ta.rsi(src, rsiPeriod)
momentumUp = rsi > 70 and adx > adxThreshold
momentumDown = rsi < 30 and adx > adxThreshold

// // Plot ADX-based Trend Confirmation Lines
// if (strongTrendUp)
//     line.new(bar_index, low, bar_index + 1, low, color=color.new(color.blue, 50), width=2, style=line.style_dashed)

// if (strongTrendDown)
//     line.new(bar_index, high, bar_index + 1, high, color=color.new(color.red, 50), width=2, style=line.style_dashed)

// Plot Breakout Confirmation Dots
plotshape(series=breakoutUp, style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny, title="Breakout Up")
plotshape(series=breakoutDown, style=shape.circle, location=location.belowbar, color=color.orange, size=size.tiny, title="Breakout Down")

// Plot Momentum Confirmation Arrows
plotshape(series=momentumUp, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Momentum Up")
plotshape(series=momentumDown, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Momentum Down")

// Strategy Entry and Exit
var float stopLossLevel = na
var float highestPrice = na

potentialBuy = strongTrendUp and breakoutUp
potentialSell = strongTrendDown and breakoutDown
momentumConfirmUp = potentialBuy and momentumUp
momentumConfirmDown = potentialSell and momentumDown

if (momentumConfirmUp)
    strategy.entry("Buy", strategy.long)
    stopLossLevel := close * 0.90
    highestPrice := close

if (momentumConfirmDown)
    strategy.entry("Sell", strategy.short)
    stopLossLevel := close * 1.10
    highestPrice := close

if (strategy.position_size > 0)
    highestPrice := math.max(highestPrice, close)
    stopLossLevel := math.max(highestPrice * 0.85, close * 0.90)

if (strategy.position_size < 0)
    highestPrice := math.min(highestPrice, close)
    stopLossLevel := math.min(highestPrice * 1.15, close * 1.10)

// Close position if stop loss is hit
if (strategy.position_size > 0 and close < stopLossLevel)
    strategy.close("Buy")

if (strategy.position_size < 0 and close > stopLossLevel)
    strategy.close("Sell")


관련

더 많은