슈퍼 트렌드 전략

저자:차오장, 날짜: 2023-10-13 17:03:55
태그:

개요

슈퍼트렌드 전략은 평균적인 실제 파장을 계산하는 데 기반한 트렌드 추적 전략이다. 그것은 평균적인 실제 파장을 사용하여 스톱-러지 라인을 설정하여 가격이 스톱-러지 라인을 돌파하는지 판단하여 트렌드 방향을 판단하여 거래 신호를 생성한다.

전략적 원칙

이 전략은 먼저 일정한 주기에 평균 실제 파장 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

마지막으로, 구매 및 판매 신호가 나타나면 적절한 거래 동작을 수행합니다.

전략적 장점

  1. 평균 실제 파장을 계산하는 스톱 로프 라인을 사용하여 시장 소음을 효과적으로 제거하여 더 신뢰할 수있는 트렌드 신호를 캡처 할 수 있습니다.

  2. 전략 매개 변수가 적고 이해하기 쉽고 조작하기 쉽다. ATR 주기와 배수 계수는 다른 시장 환경에 맞게 조정할 수 있다.

  3. 스톱 손실 라인을 깨고 트렌드 방향 변화를 판단하여 위험을 효과적으로 제어하고 적시에 손실을 중지 할 수 있습니다.

  4. 다양한 거래 스타일을 충족시키기 위해 멀티 또는 쌍방향 거래로 구성 할 수 있습니다.

  5. 어떤 시간 사이클에도 사용할 수 있으며 다양한 거래 품종에 적용됩니다.

전략적 위험

  1. 불안정한 시장에서 ATR 값이 높게 당겨질 수 있으며, 중단 손실 라인이 너무 넓어지고 더 많은 잘못된 신호를 생성합니다.

  2. 최적의 매개 변수 조합을 결정할 수 없으므로, ATR 주기와 배수는 시장 상황에 따라 최적화되어야 한다.

  3. 거래 품종에 대한 최적의 거래 주기를 결정할 수 없기 때문에 각 거래 품종에 대한 테스트가 필요합니다.

  4. "이번번엔 이 영화에 출연할 때 가장 좋은 시간을 결정할 수 없었고, 약간의 지연이 있었다.

  5. 어떤 빈 포지션 위험이 존재하며, 트렌드가 약할 때 빈 포지션 상태가 될 수 있다.

  6. 스톱레이션 경계가 뚫릴 위험이 있으므로, 스톱레이션 경계를 적절히 느슨하게 해야 한다.

전략적 최적화 방향

  1. 다른 지표와 함께 필터링을 고려하여 불안정한 시장에서 잘못된 신호를 발생시키지 않도록 할 수 있습니다. 예를 들어 MACD, RSI 등.

  2. 기계 학습이나 유전 알고리즘을 사용하여 최적의 매개 변수 조합을 찾을 수 있습니다.

  3. 다양한 품종에 대한 매개 변수를 최적화하여 최적의 ATR 주기와 배수 계수를 결정할 수 있다.

  4. 이 경우, 거래량과 같은 통행 시간을 결정하는 수량 지표가 결합되어 조기 출입을 방지할 수 있습니다.

  5. 포지션이 빈 상태에서 유지될 수 있도록 포지션을 잠금하는 전략을 고려할 수 있습니다.

  6. 적절한 완화 중지 손실 범위와 트렌드 강도 지표와 결합하여 중지 손실 위치를 최적화 할 수 있습니다.

요약

슈퍼트렌드 전략은 평균의 실제 파장을 계산하여 동적 스톱 라인을 계산하여 가격의 돌파를 판단하여 트렌드 변화를 발견하는 것이 더 신뢰할 수 있고 위험을 제어 할 수있는 트렌드 추적 전략입니다. 이 전략은 간단하고 여러 거래 품종에 적합하지만 다른 시장에서 더 나은 효과를 얻기 위해 매개 변수와 전략 규칙에 최적화해야합니다. 다른 기술 지표와 전략 조합을 사용하여 더 나은 거래 성과를 얻을 수 있습니다. 전반적으로, 슈퍼트렌드 전략은 더 과학적인 개념에 기반하고 거래자가 추가 연구와 응용을받을 가치가 있습니다.


/*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()


더 많은 내용