슈퍼 트렌드 V 전략


생성 날짜: 2023-10-18 12:35:53 마지막으로 수정됨: 2023-10-18 12:35:53
복사: 0 클릭수: 877
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

슈퍼 트렌드 V 전략

개요

슈퍼 트렌드 V 전략은 이동 평균과 표준 격차를 기반으로 한 짧은 라인 거래 전략입니다. 그것은 이동 평균이 형성 된 지원과 저항과 결합하여 진입하기 위해 가격의 경향 방향을 판단하는 슈퍼 트렌드 지표를 사용합니다. 동시에, 그것은 표준 격차 통로를 사용하여 가격의 잠재적인 지원과 저항 지역을 예측하고, 손실을 막는 가격 구간을 설정하여 추세를 따라가고 효율적으로 빠져 나가는 짧은 라인 거래 전략입니다.

전략 원칙

이 전략은 먼저 슈퍼 트렌드 지표를 계산합니다. 슈퍼 트렌드 지표는 ATR과 가격의 관계를 사용하여 트렌드의 방향을 판단합니다. 가격이 상승 추세보다 높을 때 부진하고, 가격이 하락 추세보다 낮을 때 하락합니다.

그리고 가격의 이동 평균 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)