슈퍼트렌드 전략은 평균적인 실제 파장을 계산하는 데 기반한 트렌드 추적 전략이다. 그것은 평균적인 실제 파장을 사용하여 스톱-러지 라인을 설정하여 가격이 스톱-러지 라인을 돌파하는지 판단하여 트렌드 방향을 판단하여 거래 신호를 생성한다.
이 전략은 먼저 일정한 주기에 평균 실제 파장 ATR을 계산한다. 그 다음, ATR값을 곱하여 확장 계수로 계산하여 긴 선 스톱 손실 라인과 짧은 선 스톱 손실 라인을 계산한다. 구체적인 계산 방법은 다음과 같다:
atr = mult * atr(length)
longStop = hl2 - atr
shortStop = hl2 + atr
여기서 length는 계산된 ATR의 주기의 길이를 나타내고, mult은 ATR의 확장 계수를 나타낸다.
정지선을 계산한 후, 전략은 계속적으로 가격이 K선 위의 정지선을 돌파하는지 여부를 판단하여 추세 방향을 결정합니다:
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
긴 줄의 스톱 손실 라인을 뚫을 때, 트렌드 전환이 많다고 생각되며, 짧은 줄의 스톱 손실 라인을 뚫을 때, 트렌드 전환이 공허하다고 생각합니다.
트렌드 방향의 변화에 따라 구매 및 판매 신호가 생성됩니다.
buySignal = dir == 1 and dir[1] == -1
sellSignal = dir == -1 and dir[1] == 1
마지막으로, 구매 및 판매 신호가 나타나면 적절한 거래 동작을 수행합니다.
평균 실제 파장을 계산하는 스톱 로프 라인을 사용하여 시장 소음을 효과적으로 제거하여 더 신뢰할 수있는 트렌드 신호를 캡처 할 수 있습니다.
전략 매개 변수가 적고 이해하기 쉽고 조작하기 쉽다. ATR 주기와 배수 계수는 다른 시장 환경에 맞게 조정할 수 있다.
스톱 손실 라인을 깨고 트렌드 방향 변화를 판단하여 위험을 효과적으로 제어하고 적시에 손실을 중지 할 수 있습니다.
다양한 거래 스타일을 충족시키기 위해 멀티 또는 쌍방향 거래로 구성 할 수 있습니다.
어떤 시간 사이클에도 사용할 수 있으며 다양한 거래 품종에 적용됩니다.
불안정한 시장에서 ATR 값이 높게 당겨질 수 있으며, 중단 손실 라인이 너무 넓어지고 더 많은 잘못된 신호를 생성합니다.
최적의 매개 변수 조합을 결정할 수 없으므로, ATR 주기와 배수는 시장 상황에 따라 최적화되어야 한다.
거래 품종에 대한 최적의 거래 주기를 결정할 수 없기 때문에 각 거래 품종에 대한 테스트가 필요합니다.
"이번번엔 이 영화에 출연할 때 가장 좋은 시간을 결정할 수 없었고, 약간의 지연이 있었다.
어떤 빈 포지션 위험이 존재하며, 트렌드가 약할 때 빈 포지션 상태가 될 수 있다.
스톱레이션 경계가 뚫릴 위험이 있으므로, 스톱레이션 경계를 적절히 느슨하게 해야 한다.
다른 지표와 함께 필터링을 고려하여 불안정한 시장에서 잘못된 신호를 발생시키지 않도록 할 수 있습니다. 예를 들어 MACD, RSI 등.
기계 학습이나 유전 알고리즘을 사용하여 최적의 매개 변수 조합을 찾을 수 있습니다.
다양한 품종에 대한 매개 변수를 최적화하여 최적의 ATR 주기와 배수 계수를 결정할 수 있다.
이 경우, 거래량과 같은 통행 시간을 결정하는 수량 지표가 결합되어 조기 출입을 방지할 수 있습니다.
포지션이 빈 상태에서 유지될 수 있도록 포지션을 잠금하는 전략을 고려할 수 있습니다.
적절한 완화 중지 손실 범위와 트렌드 강도 지표와 결합하여 중지 손실 위치를 최적화 할 수 있습니다.
슈퍼트렌드 전략은 평균의 실제 파장을 계산하여 동적 스톱 라인을 계산하여 가격의 돌파를 판단하여 트렌드 변화를 발견하는 것이 더 신뢰할 수 있고 위험을 제어 할 수있는 트렌드 추적 전략입니다. 이 전략은 간단하고 여러 거래 품종에 적합하지만 다른 시장에서 더 나은 효과를 얻기 위해 매개 변수와 전략 규칙에 최적화해야합니다. 다른 기술 지표와 전략 조합을 사용하여 더 나은 거래 성과를 얻을 수 있습니다. 전반적으로, 슈퍼트렌드 전략은 더 과학적인 개념에 기반하고 거래자가 추가 연구와 응용을받을 가치가 있습니다.
/*backtest start: 2023-09-12 00:00:00 end: 2023-10-12 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000) LongOnly = input(title="Long Only ?", type=input.bool, defval=true) length = input(title="ATR Period", type=input.integer, defval=22) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval=1, title="From Day", minval=1, maxval=31) fromMonth = input(defval=1, title="From Month", minval=1, maxval=12) fromYear = input(defval=2019, title="From Year", minval=1970) // To Date Inputs toDay = input(defval=1, title="To Day", minval=1, maxval=31) toMonth = input(defval=1, title="To Month", minval=1, maxval=12) toYear = input(defval=2020, title="To Year", minval=1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// atr = mult * atr(length) longStop = hl2 - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = hl2 + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir longColor = color.green shortColor = color.red plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0) plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0) if LongOnly if buySignal and time_cond strategy.entry("Long", strategy.long, comment="Long") if(sellSignal and time_cond) strategy.close("Long") else if buySignal and time_cond strategy.entry("Long", strategy.long, comment="Long") else strategy.cancel("Long") if sellSignal and time_cond strategy.entry("Short", strategy.short, comment="Short") else strategy.cancel("Short") if not time_cond strategy.close_all()