슈퍼 트렌드 5 전략

저자:차오장, 날짜: 2023-10-18 12:35:53
태그:

img

전반적인 설명

슈퍼 트렌드 V 전략은 이동 평균과 표준 편차를 기반으로 한 단기 거래 전략이다. 슈퍼 트렌드 지표를 사용하여 가격 트렌드 방향을 결정하고 이동 평균에 의해 형성된 지원과 저항을 결합하여 시장에 진출합니다. 한편, 표준 편차 채널을 사용하여 가격의 잠재적 지원 및 저항 구역을 예측하고 트렌드를 따르는 효율적인 출구 단기 거래 전략을 구현하기 위해 스톱 로스 및 수익 가격 범위를 설정합니다.

전략 논리

우선, 이 전략은 슈퍼 트렌드 인디케이터를 계산한다. 슈퍼 트렌드 인디케이터는 트렌드 방향을 결정하기 위해 ATR과 가격 사이의 관계를 사용합니다. 가격이 상승 트렌드 위에있을 때, 상승 추세입니다. 가격이 하락 트렌드 아래에있을 때, 하락 추세입니다.

그 다음에는 가격의 EMA와 오픈 가격의 EMA를 계산합니다. 가격이 EMA를 넘어서 오픈 가격 EMA보다 높으면 구매 신호입니다. 가격이 EMA를 넘어서 오픈 가격 EMA보다 낮으면 판매 신호입니다.

다음으로, 표준편차를 사용하여 가격 채널의 상부 및 하부 대역을 계산하고 평탄화 처리를 수행합니다. 가격이 표준편차의 상부 대역을 통과하면 스톱 손실 신호입니다. 가격이 표준편차의 하부 대역을 통과하면 수익 신호입니다.

마지막으로, 트렌드 방향을 결정하기 위해 다른 시간 프레임의 이동 평균을 슈퍼 트렌드 지표와 결합하여 안정적인 트렌드 판단을 형성합니다.

전략 의 장점

  • 슈퍼 트렌드 지표를 사용하여 트렌드 역전으로 인한 손실을 피하여 가격 트렌드 방향을 결정합니다.
  • 오픈 가격과 결합된 이동 평균은 입력 시기를 결정하고 잘못된 분할을 피하는 데 도움이됩니다.
  • 표준편차 채널은 스톱 로스 및 수익을 취하기 위한 가격의 잠재적 지지 및 저항 구역을 예측합니다.
  • 여러 시간 프레임 조합은 트렌드 판단의 안정성을 향상시킵니다.

전략 의 위험

  • 슈퍼 트렌드 지표는 지연 효과가 있으며 트렌드 변화 지점을 놓칠 수 있습니다.
  • 이동 평균의 크로스오버는 지연 효과가 있고, 입력 시기는 정확하지 않을 수 있습니다.
  • 표준편차 채널의 범위는 실시간 시장 변동을 반영하기에는 너무 고정되어 있습니다.
  • 여러 시간 프레임에 기반한 판단은 서로 충돌할 수 있습니다.

위험 관리:

  • 감수성을 향상시키기 위해 슈퍼 트렌드 매개 변수를 적절히 단축
  • 이동 평균 기간을 최적화하거나 진입을 결정하기 위해 다른 지표를 추가하십시오.
  • 시장에 맞춰 표준편차 채널을 동적으로 조정
  • 갈등을 처리하기 위해 여러 시간 프레임 판단에 대한 명확한 논리를 정의하십시오.

최적화 방향

  • 최고의 조합을 찾기 위해 슈퍼 트렌드 매개 변수를 최적화
  • 진입을 결정하기 위해 이동 평균과 함께 다른 지표를 시도
  • 표준편차 채널의 동적 조정 시도
  • 가장 적합한 조합을 찾기 위해 여러 시간 프레임 조합을 테스트합니다.
  • 수익 공간을 개선하기 위해 손해를 중지하고 수익 전략을 최적화

결론

슈퍼 트렌드 V 전략은 트렌드, 이동 평균, 표준 편차 채널 및 기타 지표의 장점을 통합하여 안정적인 트렌드 판단, 적절한 입시 타이밍 및 가격 영역에 따라 손실을 멈추고 이익을 취합니다. 매개 변수, 지표, 손실을 멈추고 이익을 취하기 등을 최적화함으로써 전략의 안정성과 수익성을 향상시킬 수 있습니다. 탄탄한 논리와 엄격한 사고는 배우고 연구 할 가치가 있습니다.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © theCrypster 2020

//@version=4
strategy(title = "Super trend V Strategy version", overlay = true, pyramiding=1,initial_capital = 1000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

v =  spreadvol + cum(spreadvol)
smooth = sma(v, v_len)
v_spread = stdev(v - smooth, window_len)
shadow = (v - smooth) / v_spread * price_spread

out = shadow > 0 ? high + shadow : low + shadow
//
src = out
src1=open
src2=low
src3=high
tf =input(720)
len = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   tf / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7

c = ema(src, len)
plot(c,color=color.red)
o = ema(src1,len)
plot(o,color=color.blue)
//h = ema(src3,len)
//l=ema(src2,len)
//
col=c > o? color.lime : color.orange
vis = true
vl = c
ll = o
m1 = plot(vl, color=col, linewidth=1, transp=60)
m2 = plot(vis ? ll : na,  color=col, linewidth=2, transp=80)

fill(m1, m2,  color=col, transp=70)
//

vpt=ema(out,len)

// INPUTS //
st_mult   = input(1,   title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = 'SuperTrend Period',     minval = 1)

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend ==1 ? up_trend : down_trend

// Plotting
plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy=crossover( close, st_line) and close>o
sell=crossunder(close, st_line) and close<o
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon


//
multiplier = input(title="TP VWAP Deviation", type=input.float, defval=2, minval=1)
src5 = vwap
len5 = input(title="TP length", defval=150, minval=1)
offset = 0

calcSlope(src5, len5) =>
    sumX = 0.0
    sumY = 0.0
    sumXSqr = 0.0
    sumXY = 0.0
    for i = 1 to len5
        val = src5[len5-i]
        per = i + 1.0
        sumX := sumX + per
        sumY := sumY + val
        sumXSqr := sumXSqr + per * per
        sumXY := sumXY + val * per
        
        
    slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
    average = sumY / len5
    intercept = average - slope * sumX / len5 + slope
    [slope, average, intercept]

var float tmp = na
[s, a, i] = calcSlope(src5, len5)

vwap1=(i + s * (len5 - offset))
sdev = stdev(vwap, len5)
dev = multiplier * sdev
top=vwap1+dev
bott=vwap1-dev

//
z1 = vwap1 + dev
x1 = vwap1 - dev

low1 = crossover(close, x1)  
high1 = crossunder(close, z1) 

plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon



//
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

l = buy
s1 = sell
        
if l and testPeriod()
    strategy.entry("buy", strategy.long)
if s1 and testPeriod()
    strategy.entry("sell", strategy.short)



더 많은