이 전략은 시장 트렌드 방향을 판단하고 거래 신호를 생성하기 위해 슈퍼 트렌드 라인을 구축하기 위해 평균 진정한 범위 (ATR) 지표를 기반으로 구성됩니다. 이는 트렌드 판단과 트렌드 추적 기능을 모두 갖추고 있으며 인덱스 선물, 외화 및 암호화폐에 적용됩니다.
이 전략은 특정 기간 동안 ATR을 계산하고 가격을 가격과 비교하여 가격이 상승세 채널 내에 있는지 여부를 결정합니다. 구체적으로, 먼저 ATR을 계산하고, 그 다음 ATR 값을 인수로 곱하여 상위 및 하위 밴드를 그래프화합니다. 가격이 상위 밴드보다 높을 때 상승세가 확인됩니다. 가격이 하위 밴드 아래에있을 때 하락세가 확인됩니다. 상승세에서 가격이 하락세에서 상승세로 변경되면 구매 신호가 생성됩니다. 하락세에서 가격이 상승세에서 하락세로 변경되면 판매 신호가 유발됩니다.
트렌드 판단 벤치마크 - 슈퍼트렌드 라인을 구성하는 것이 핵심입니다. 슈퍼트렌드 라인은 동적으로 변화하는 ATR을 기반으로하며 시장 소음을 효과적으로 필터링하고 주요 트렌드 방향을 결정할 수 있습니다. 한편, 슈퍼트렌드 라인은 특정 지연 효과를 가지고 있으며, 트렌드 반전 지점을 확인하고 잘못된 거래 신호를 생성하는 것을 피합니다.
이 전략의 가장 큰 장점은 트렌드 식별과 추적 능력의 조합입니다.
이 전략의 주요 위험은 다음과 같습니다.
가능한 솔루션은 ATR 기간 및 슈퍼 트렌드 인수와 같은 매개 변수를 최적화하고 확인을 위해 다른 지표와 결합하고 잘못된 신호 확률을 줄이는 것입니다. 또한, 중지 손실은 단일 거래 손실을 제어 할 수 있습니다.
추가 최적화 공간은 다음과 같은 영역에 있습니다.
깊이 있는 최적화는 전략의 안정성, 적응력 및 수익성을 더욱 높일 것으로 약속합니다.
이 전략은 전반적으로 큰 안정성, 신뢰성 및 수익성을 보여줍니다. 주요 트렌드 판단 및 거래 신호를 위해 슈퍼 트렌드 라인을 구축하는 것이 가장 큰 하이라이트입니다. 그러나 일정 수준의 후퇴 효과와 잘못된 판단 위험이 존재한다. 매개 변수 및 모델 최적화는 더 나은 전략 성능을 약속합니다. 요약하자면, 전형적인 트렌드 기반 전략으로서 라이브 거래에서 확인하고 활용하는 것이 가치가 있습니다.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Supertrend Strategy", overlay = true) Periods = input(10, title="ATR Period") src = input(hl2, title="Source") Multiplier = input(3.0, title="ATR Multiplier", step=0.1) changeATR = input(true, title="Change ATR Calculation Method?") showsignals = input(true, title="Show Buy/Sell Signals?") highlighting = input(true, title="Highlighter On/Off?") atr2 = sma(tr, Periods) atr = changeATR ? atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = nz(up[1], up) up := close[1] > up1 ? max(up, up1) : up dn = src + (Multiplier * atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? 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.green) 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.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) 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.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) 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) fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor) strategy.entry("Buy", strategy.long, when=buySignal) strategy.entry("Sell", strategy.short, when=sellSignal) alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!") alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!") changeCond = trend != trend[1] alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")