슈퍼 트렌드 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)