이 전략은 트렌드를 따라 트렌드 전략을 구현하기 위해 슈퍼트렌드 지표와 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)