변동성 추세 오실레이터 발산 전략,

WT VWAP
생성 날짜: 2024-05-28 17:43:54 마지막으로 수정됨: 2024-05-28 17:43:54
복사: 0 클릭수: 721
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

변동성 추세 오실레이터 발산 전략,

개요

이 전략은 WaveTrend의 흔들림 지표 ((WT) 와 거래량 가중 평균 가격 ((VWAP) 을 결합하여 가격과 지표의 오차를 식별하여 잠재적인 트렌드 반전 기회를 포착한다. 이 전략은 ATR (Average True Range) 을 사용하여 스톱 포지션을 결정하고 계정 위험 비율에 따라 포지션을 동적으로 조정한다. 이 전략의 주요 장점은 트렌드 추적 능력과 위험 관리 조치이지만, 흔들림 시장에서 손실이 발생할 수 있다.

전략 원칙

  1. WaveTrend 흔들림 지표 ((WT) 를 계산한다: 현재 가격과 그것의 채널 및 평균 사이의 차이를 비교하여 동력 흔들림 지표를 생성한다.
  2. 거래량 가중 평균 가격 ((VWAP): 거래량을 무게로 사용하여 이동 평균 가격을 계산한다.
  3. 가격과 WT 지표의 이탈을 식별: 가격이 새로운 고/저를 만들고 지표가 새로운 고/저를 만들지 못할 때, 트렌드 반전이 일어날 수 있음을 나타냅니다.
  4. 진입 조건: 상자가 이탈하는 것을 인식할 때, 더 많은 포지션을 열고, 상자가 이탈하는 것을 인식할 때, 평지 포지션을 한다.
  5. 스톱: ATR (Average True Range) 를 기반으로 동적 스톱 위치를 설정한다.
  6. 포지션 규모: 계좌의 위험 비율과 스톱로스 거리에 따라 거래당 포지션 규모를 동적으로 조정한다.
  7. 배경 색상: 지표의 오버 바이/오버 세일 수준에 따라 배경 색상을 변경하여 추가적인 시각적 충고를 제공합니다.

우위 분석

  1. 트렌드 추적: 이 전략은 가격과 지표의 이탈을 식별하여 잠재적인 트렌드 반전 기회를 잡을 수 있습니다.
  2. 위험 관리: ATR 기반의 동적 스톱로스를 사용하여 위험 비율에 따라 포지션 크기를 조정하여 잠재적인 손실을 제어하는 데 도움이됩니다.
  3. 시각적 힌트: 배경 색상은 지표의 오버 바이/오버 셀 상태에 따라 변하며, 거래자에게 추가적인 시각적 신호를 제공합니다.
  4. 유연성: 이 전략의 매개 변수들 (채널 길이, 평균 길이, 오버 바이/오버 세일 등) 은 다른 시장 조건과 거래 스타일에 따라 조정될 수 있다.

위험 분석

  1. 흔들리는 시장: 명확한 추세가 없는 시장 조건에서 이 전략은 연속적인 손실을 입을 수 있다.
  2. 매개 변수 최적화: 이 전략의 성능은 매개 변수 선택에 크게 의존하며, 부적절한 매개 변수 설정은 부적절한 결과를 초래할 수 있다.
  3. 과도한 거래: 자주 나오는 출구 신호는 전략의 전반적인 성과에 영향을 미치는 높은 거래 비용을 초래할 수 있습니다.

최적화 방향

  1. 트렌드 필터링: 부조화가 발생했을 때, 잠재적인 가짜 신호를 필터링하기 위해 이동 평균과 같은 추가적인 트렌드 확인 지표를 도입한다.
  2. 동적 파라미터: 시장의 변동성에 따라 지표 파라미터를 조정하여 변동성이 낮을 때 더 짧은 채널과 평균 길이를 사용하고, 변동성이 높을 때 더 긴 파라미터를 사용합니다.
  3. 정지: 수익률에 대한 위험이나 목표 가격에 기반한 동적 정지 수준을 도입하여 수익을 얻은 지위를 더 잘 관리합니다.
  4. 다중 공간 필터: 시장의 전체적인 추세 방향에 따라 거래 신호를 필터링하고, 추세 방향에만 거래한다.

요약하다

WaveTrend Oscillator Divergence Strategy는 변동하는 추세 지표와 거래량 가중 평균 가격을 결합하여 잠재적인 추세 반전 기회를 식별합니다. 이 전략의 장점은 추세를 추적하는 능력과 위험 관리 조치에 있습니다. 그러나 불안한 시장에서 위험이 발생할 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-05-22 00:00:00
end: 2024-05-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("PipShiesty Swagger", overlay=true)

// WaveTrend Oscillator (WT)
n1 = input.int(10, "Channel Length")
n2 = input.int(21, "Average Length")
obLevel1 = input.float(60.0, "Overbought Level 1")
obLevel2 = input.float(53.0, "Overbought Level 2")
osLevel1 = input.float(-60.0, "Oversold Level 1")
osLevel2 = input.float(-53.0, "Oversold Level 2")

ap = hlc3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)

// VWAP
vwap = ta.vwma(close, n1)

// Signal Line
wt1 = tci
wt2 = ta.sma(wt1, 4)

// Bullish and Bearish Divergences
bullishDivergence = (ta.lowest(close, 5) > ta.lowest(close[1], 5)) and (wt1 < wt1[1]) and (close > close[1])
bearishDivergence = (ta.highest(close, 5) < ta.highest(close[1], 5)) and (wt1 > wt1[1]) and (close < close[1])

// Plot WaveTrend Oscillator
plot(wt1, title="WT1", color=color.blue)
plot(wt2, title="WT2", color=color.red)

// Plot Divergences
plotshape(series=bullishDivergence, location=location.belowbar, color=color.green, style=shape.labelup, title="Bullish Divergence")
plotshape(series=bearishDivergence, location=location.abovebar, color=color.red, style=shape.labeldown, title="Bearish Divergence")

// Risk Management Parameters
riskPercentage = input.float(1, title="Risk Percentage per Trade", minval=0.1, step=0.1) / 100
stopLossATR = input.float(1.5, title="Stop Loss ATR Multiplier", minval=0.5, step=0.1)

// ATR Calculation
atr = ta.atr(14)

// Position Size Calculation
calculatePositionSize(stopLoss) =>
    riskAmount = strategy.equity * riskPercentage
    positionSize = riskAmount / stopLoss
    positionSize

// Entry and Exit Logic with Stop Loss
if bullishDivergence
    stopLoss = low - atr * stopLossATR
    positionSize = calculatePositionSize(close - stopLoss)
    strategy.entry("Buy", strategy.long, qty=positionSize)
    strategy.exit("Sell", from_entry="Buy", stop=stopLoss)

if bearishDivergence
    strategy.close("Buy")

// Plot VWAP
plot(vwap, title="VWAP", color=color.orange)

// Background color to indicate Overbought/Oversold conditions
bgcolor(wt1 > obLevel1 ? color.new(color.red, 90) : na, title="Overbought Level 1")
bgcolor(wt1 < osLevel1 ? color.new(color.green, 90) : na, title="Oversold Level 1")
bgcolor(wt1 > obLevel2 ? color.new(color.red, 70) : na, title="Overbought Level 2")
bgcolor(wt1 < osLevel2 ? color.new(color.green, 70) : na, title="Oversold Level 2")