슈퍼트렌드 기반 트렌드 추적 전략

저자:차오장, 날짜: 2023-12-08 17:07:53
태그:

img

전반적인 설명

이 전략은 시장 트렌드 방향을 판단하고 거래 신호를 생성하기 위해 슈퍼 트렌드 라인을 구축하기 위해 평균 진정한 범위 (ATR) 지표를 기반으로 구성됩니다. 이는 트렌드 판단과 트렌드 추적 기능을 모두 갖추고 있으며 인덱스 선물, 외화 및 암호화폐에 적용됩니다.

전략 논리

이 전략은 특정 기간 동안 ATR을 계산하고 가격을 가격과 비교하여 가격이 상승세 채널 내에 있는지 여부를 결정합니다. 구체적으로, 먼저 ATR을 계산하고, 그 다음 ATR 값을 인수로 곱하여 상위 및 하위 밴드를 그래프화합니다. 가격이 상위 밴드보다 높을 때 상승세가 확인됩니다. 가격이 하위 밴드 아래에있을 때 하락세가 확인됩니다. 상승세에서 가격이 하락세에서 상승세로 변경되면 구매 신호가 생성됩니다. 하락세에서 가격이 상승세에서 하락세로 변경되면 판매 신호가 유발됩니다.

트렌드 판단 벤치마크 - 슈퍼트렌드 라인을 구성하는 것이 핵심입니다. 슈퍼트렌드 라인은 동적으로 변화하는 ATR을 기반으로하며 시장 소음을 효과적으로 필터링하고 주요 트렌드 방향을 결정할 수 있습니다. 한편, 슈퍼트렌드 라인은 특정 지연 효과를 가지고 있으며, 트렌드 반전 지점을 확인하고 잘못된 거래 신호를 생성하는 것을 피합니다.

장점

이 전략의 가장 큰 장점은 트렌드 식별과 추적 능력의 조합입니다.

  1. ATR 기반의 슈퍼트렌드 라인은 시장 트렌드를 효과적으로 식별하고 소음을 필터링할 수 있습니다.
  2. 슈퍼트렌드 라인의 지연 효과는 잘못된 신호를 줄이는 데 도움이 됩니다.
  3. 트렌드 판단과 트레이딩 신호를 제공하여 쉽게 작동할 수 있습니다.
  4. 매개 변수들은 더 다양한 시장에 맞게 최적화 될 수 있습니다.
  5. 시각적 지표는 직관적인 트렌드 판단을 허용합니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 부적절한 ATR 매개 변수 설정은 너무 민감하거나 지연된 SuperTrend 라인을 유발할 수 있습니다.
  2. 소음의 영향을 완전히 피할 수 없습니다. 가끔은 잘못된 신호를 유발할 수 있습니다.
  3. 시장의 격렬한 변동으로 정확도가 떨어집니다.
  4. 트렌드 전환점을 예측할 수는 없지만 기존 트렌드를 추적할 수 있습니다.

가능한 솔루션은 ATR 기간 및 슈퍼 트렌드 인수와 같은 매개 변수를 최적화하고 확인을 위해 다른 지표와 결합하고 잘못된 신호 확률을 줄이는 것입니다. 또한, 중지 손실은 단일 거래 손실을 제어 할 수 있습니다.

최적화 방향

추가 최적화 공간은 다음과 같은 영역에 있습니다.

  1. 자동 매개 변수 최적화를 위해 기계 학습을 채택합니다.
  2. 확인을 위해 기하급수적인 이동 평균과 같은 지표를 추가합니다.
  3. 재무 관리에 필요한 스톱 로스/이익 취득 전략을 세우는 것
  4. 감정 지표와 뉴스 분석을 결합하여 잠재적인 트렌드 반전을 예측합니다.
  5. 더 많은 역사적 데이터를 분석하고 정확도를 향상시키기 위해 딥러닝을 활용합니다.

깊이 있는 최적화는 전략의 안정성, 적응력 및 수익성을 더욱 높일 것으로 약속합니다.

결론

이 전략은 전반적으로 큰 안정성, 신뢰성 및 수익성을 보여줍니다. 주요 트렌드 판단 및 거래 신호를 위해 슈퍼 트렌드 라인을 구축하는 것이 가장 큰 하이라이트입니다. 그러나 일정 수준의 후퇴 효과와 잘못된 판단 위험이 존재한다. 매개 변수 및 모델 최적화는 더 나은 전략 성능을 약속합니다. 요약하자면, 전형적인 트렌드 기반 전략으로서 라이브 거래에서 확인하고 활용하는 것이 가치가 있습니다.


/*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!")


더 많은