
이 전략은 슈퍼 트렌드 지표와 DEMA 지표를 결합하여 트렌드 추적 거래 전략을 구현한다. 가격이 상반도를 초과할 때 구매 신호를 발생시키고, 가격이 하반도로 떨어질 때 판매 신호를 발생시키며, DEMA 지표 필터링 거짓 신호와 결합한다. 이 전략은 트렌드적인 행태에 적용되며, 트렌드를 효과적으로 추적하고, 필터링 흔들림이다.
이 전략은 주로 슈퍼 트렌드 지표에 기반하여 가격 트렌드 방향을 판단한다. 슈퍼 트렌드 지표는 ATR 지표와 결합하여 가격 트렌드를 효과적으로 판단한다. 가격이 상승할 때 위 궤도를 형성하고, 가격이 하락할 때 하향 궤도를 형성한다. 가격이 하향 궤도에서 돌파 할 때 트렌드 전환으로 구매 신호를 생성한다. 가격이 위 궤도에서 돌파 할 때 트렌드 전환으로 판매 신호를 생성한다.
잘못된 신호를 필터링하기 위해, 이 전략은 DEMA 지표도 결합한다. 구매 신호는 가격이 상반도를 넘어서 DEMA 라인보다 높을 때만 발생한다. 판매 신호는 가격이 하반도를 넘어서 DEMA 라인보다 낮을 때만 발생한다. 이것은 흔들리는 시장에서 가짜 신호를 효과적으로 필터링 할 수 있다.
특히, 이 전략의 거래 신호 논리는 다음과 같습니다.
이런 논리적인 설계로, 동향적인 상황에서도 잘 움직일 수 있고, 흔들리는 시장에서 자주 포지션을 열지 않을 수 있다.
위험 해결 방법:
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
슈퍼트렌드 지표 변수 최적화. 다양한 ATR 주기 변수를 테스트하여 최적의 변수 조합을 찾을 수 있다.
DEMA 지표 파라미터 최적화. 다양한 파라미터를 테스트하여 최적의 파라미터 설정을 결정할 수 있다.
손실을 증가시키는 메커니즘. ATR 값에 따라 손실을 설정하여 과도한 손실을 방지 할 수 있습니다.
신호 필터링 규칙을 추가한다. 중요한 지점에서 다른 지표의 확인이 가능하며, 잘못된 신호를 피한다. 예를 들어, 트렌드 전환점에서 양력 지표의 확인이 증가한다.
포지션 관리를 최적화한다. 시장의 변동성과 위험 상황에 따라 포지션을 조정할 수 있다.
이 전략은 슈퍼 트렌드 지표와 DEMA 지표의 장점을 통합하여 트렌드 추적과 신호 필터링 기반의 정량화 거래 전략을 구현한다. 전략 최적화 공간은 넓으며, 변수 최적화, 스톱 로즈 메커니즘 및 신호 필터링과 같은 조치를 통해 전략의 안정성과 수익성을 더욱 향상시킬 수 있다. 이 전략 아이디어는 간단하고 명확하게 구현하기 쉽고, 전반적인 위험이 통제 가능하며, 정량화 거래 실정에 적합하다.
/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Krish\'s Supertrend Strategy', overlay=true)
// Supertrend Settings
Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
// DEMA Settings
dema_length = 200
dema = ta.ema(close, dema_length)
// Long and Short Conditions
longCondition = buySignal and close > dema
shortCondition = sellSignal and close < dema
// Strategy Entry and Exit
strategy.entry('Long', strategy.long, when=longCondition)
strategy.entry('Short', strategy.short, when=shortCondition)
strategy.close('Long', when=ta.change(trend) or close < dema)
strategy.close('Short', when=ta.change(trend) or close > dema)
// Plotting
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
fill(mPlot, upPlot, title='UpTrend Highlighter', color=longFillColor, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highlighter', color=shortFillColor, transp=90)
// Alerts (using plotshape for alerts in strategies)
plotshape(buySignal, title='SuperTrend Buy', color=color.new(color.green, 0), style=shape.triangleup, size=size.small)
plotshape(sellSignal, title='SuperTrend Sell', color=color.new(color.red, 0), style=shape.triangledown, size=size.small)
changeCond = trend != trend[1]
plotshape(changeCond, title='SuperTrend Direction Change', color=color.new(color.yellow, 0), style=shape.triangleup, size=size.small)