
슈퍼 트렌드 트레이딩 전략 (Supertrend Trading Strategy) 은 평균 실제 범위 (ATR) 와 이동 평균 (MA) 를 기반으로 한 트렌드 추적 전략이다. 그것은 트렌드 추적과 브레이크 트레이딩의 장점을 결합하여 중기 트렌드 방향을 식별하고 트렌드 변화에 따라 거래 신호를 생성하는 것을 목표로 한다.
이 전략의 주요 아이디어는 가격이 슈퍼 트렌드 채널을 뚫을 때, 트렌드가 반전되는 것을 표시하고, 이 때 구매하거나 판매한다. 이 전략은 수익을 잠금하고 위험을 제어하기 위해 동시에 중지 및 중지 수준을 설정한다.
슈퍼 트렌드 전략의 계산 과정은 다음과 같은 몇 가지 단계로 구성됩니다.
이 전략의 장점은, 동시 동향을 따르는 것과 동향 반향을 따르는 거래 방식을 결합한다는 것입니다. 그것은 큰 동향의 방향을 판단 할 수 있고, 반향 기회를 적시에 잡을 수 있습니다. 또한, 위험을 제어하기 위해 손실을 막는 제도를 설정합니다.
슈퍼 트렌드 전략은 다음과 같은 장점이 있습니다.
1. 중기 트렌드를 추적하는 것
슈퍼 트렌드 채널은 ATR 계산을 기반으로 중기 가격 변동 범위를 효과적으로 반영할 수 있다. 일반 이동 평균보다 중기 트렌드를 더 잘 추적한다.
2. 트렌드 반전을 적시에 잡는 것
가격이 통로를 뚫을 때, 빠르게 거래 신호를 발송하여, 큰 추세의 반전을 적시에 포착할 수 있다. 이것은 적절히 포지션을 조정하고, 초과 기간을 보유하는 것을 줄이는 것을 보장한다.
3. 손해 방지 장치
이 전략은 동시에 중지 지점과 중지 지점을 설정하여 자동으로 중지 할 수 있습니다. 이것은 대폭적으로 범용 손실의 위험을 줄여주고 트렌드 상황을 파악하는 데 도움이됩니다.
4. 간단하게 구현할 수 있습니다.
이 전략은 평균선과 ATR 지표를 주로 사용하며, 비교적 간단하고 쉽게 습득할 수 있다. 이것은 실디스크 동작의 난이도를 낮춘다.
5. 자금 사용 효율성
슈퍼 트렌드 전략은 중기 트렌드를 추적하고, 단일 슬라이드 포인트를 제어하며, 전반적인 자금 활용 효율성이 높습니다.
슈퍼 트렌드 전략에는 몇 가지 잠재적인 위험도 있습니다.
1. 동요의 기회비용이 높습니다.
슈퍼 트렌드 전략은 중장기 트렌드를 추적하는 데 초점을 맞추고 있으며, 격동이 있는 시장에서 비용이 더 높기 때문에 일부 공백 기회를 놓칠 수 있습니다.
2. 변수 최적화 효과
ATR 주기 및 ATR 곱수의 선택은 거래 전략의 효과에 큰 영향을 미칩니다. 파라미터를 잘못 설정하면 거래 신호의 효과가 저하됩니다.
3. 다소 뒤처진 상태
슈퍼 트렌드 채널 계산에는 약간의 지연이 존재하며, 이는 신호가 제때 생성되지 않도록 할 수 있다. 이것은 이 전략이 해결해야 하는 주요 문제이다.
4. 엄격한 손해 방지 장치가 필요합니다.
만약 스톱로드 포지션이 너무 커 설정되거나 풍력 조절 회피가 완벽하지 않다면, 극단적인 상황에서는 큰 손실을 초래할 수 있다. 따라서 스톱로드 전략을 엄격하게 실행해야 안정적인 수익을 얻을 수 있다.
이 슈퍼 트렌드 전략에는 다음과 같은 추가적인 최적화 기능이 있습니다.
1. 여러 ATR 사이클을 결합합니다.
예를 들어 10일, 20일 등 여러 개의 ATR 주기를 결합하여 복합 ATR 지표를 형성할 수 있다. 이렇게하면 지표의 민감성을 높이고, 지연 문제를 개선할 수 있다.
2. Stop Loss Module를 추가합니다.
또한, 트리플 스톱, 오징어 스톱, 순차 스톱과 같은 전략 모듈을 추가하여 스톱 컨트롤을 더욱 강화하여 손실 위험을 줄일 수 있습니다.
3. 최적화 변수 설정
최적화 ATR 주기, ATR 곱하기 등 파라미터 설정을 통해 최적의 파라미터 조합을 찾아서 전략적 수익을 더 향상시킬 수 있다. 또한, 파라미터도 동적으로 최적화하여 다양한 품종과 시장 단계에 따라 적절한 값을 선택할 수 있다.
4. 통합 기계 학습 모델
마지막으로, 트렌드 판단과 신호를 생성하는 자동화를 구현하기 위해 기계 학습 모델을 통합하는 것도 시도할 수 있습니다. 이것은 주관적 요소의 간섭을 줄일 수 있으며, 전략 시스템의 안정성을 더욱 향상시킬 수 있습니다.
슈퍼 트렌드 트레이딩 전략은 중간 트렌드를 판단하기 위해 평균선 지표와 ATR 지표를 통합하여 트렌드 반전 시 트레이드 신호를 생성하여 자동 스톱 로드를 구현합니다. 이 전략은 큰 트렌드를 포착하는 동시에 반전 기회를 잡을 수 있습니다. 그것의 장점은 주로 중간 트렌드 추적, 트렌드 반전 식별 및 스톱 로드 제어의 세 가지 측면에 나타납니다.
하지만 이 전략에는 몇 가지 결함이 있습니다. 주로 충격적인 상황을 제대로 파악하지 못하고 지연되는 문제입니다. 이것은 ATR 주기를 조합하고, 손해 방지 모듈을 강화하고, 매개 변수 최적화 및 기계 학습을 도입하는 방법과 같은 여러 가지 측면에서 최적화를 필요로 합니다. 이것은 분명히 슈퍼 트렌드 전략의 안정성과 금률을 더욱 강화 할 수 있습니다.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
//Calculating ATR
atrLength = input(title="ATR Length:", defval=14, minval=1)
Stop_Loss_Factor = input(1.5, minval=0,step=0.01)
factor_profit = input(1.0, minval=0,step=0.01)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 10, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2016, title = "From Year", minval = 2009)
ToMonth = input(defval = 4, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 10, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2039, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
// Calculate ATR
atrValue=atr(atrLength)
decimals = abs(log(syminfo.mintick) / log(10))
Atr = atrValue
if(decimals == 5)
Atr := atrValue * 10000
if(decimals == 4)
Atr := atrValue * 1000
if(decimals == 3)
Atr := atrValue * 100
if(decimals == 2)
Atr := atrValue * 10
//VJ2 Supertrend
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp = 0.0
TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = 0.0
Tsl := Trend==1? TrendUp: TrendDown
linecolor = Trend == 1 ? green : red
plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")
plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)
//plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend")
plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)
//Strategy
Trend_buy = Trend == 1
Trend_buy_prev = Trend[1] == -1
algo_buy_pre = Trend_buy and Trend_buy_prev
algo_buy = algo_buy_pre == 1 ? 1 : na
Trend_sell= Trend == -1
Trend_sell_prev = Trend[1] == 1
algo_sell_pre = Trend_sell and Trend_sell_prev
algo_sell = algo_sell_pre == 1 ? 1:na
strategy.entry("Long1", strategy.long, when= window() and algo_buy==1)
strategy.entry("Short1", strategy.short, when=window() and algo_sell==1)
bought = strategy.position_size > strategy.position_size
sold = strategy.position_size < strategy.position_size
longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0)
shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0)
longProfit = factor_profit * longStop
shortProfit = factor_profit * shortStop
if(decimals == 5)
longStop := longStop *100000
longProfit := longProfit *100000
if(decimals == 4)
longStop := longStop * 10000
longProfit := longProfit * 10000
if(decimals == 3)
longStop := longStop * 1000
longProfit := longProfit * 1000
if(decimals == 2)
longStop := longStop * 100
longProfit := longProfit *100
if(decimals == 5)
shortStop := shortStop * 100000
shortProfit := shortProfit * 100000
if(decimals == 4)
shortStop := shortStop * 10000
shortProfit := shortProfit * 10000
if(decimals == 3)
shortStop := shortStop * 1000
shortProfit := shortProfit * 1000
if(decimals == 2)
shortStop := shortStop * 100
shortProfit := shortProfit * 100
strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit)
strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit)