이 전략은 슈퍼 트렌드 지표와 가격 채널 지표, 거래용 이동 평균 신호와 결합하여 이루어집니다. 주요 아이디어는 현재 가격이 비정상적인 상태에 있는지 판단하기 위해 가격 채널을 사용하며, 현재 트렌드 방향을 결정하기 위해 슈퍼 트렌드를 사용하며, 이동 평균 신호와 결합하여 거래 신호를 생성하는 것입니다.
슈퍼 트렌드 지표를 계산한다. 상부와 하부 레일은 각각 현재 가격 더하기/ 빼기 N 곱하기 ATR 지표이다. 가격이 상부 레일보다 높을 때 상승률이다. 가격이 하부 레일보다 낮을 때 하향률이다.
가격 채널 지표를 계산합니다. 가격 채널 라인은 M 곱하기 가격의 N 일 표준편차입니다. 채널 라인보다 높고 낮은 가격은 비정상 상태로 간주됩니다.
이동 평균을 계산해 보세요. 각각 오픈 가격, 클로즈 가격, 슈퍼 트렌드의 평균 라인을 보세요.
거래 신호를 생성합니다.
구매 신호: 닫기 가격은 슈퍼 트렌드 라인 위에 넘어가며 오픈 가격 이동 평균보다 높습니다.
판매 신호: 닫기 가격은 슈퍼 트렌드 라인 아래를 넘고 오픈 가격 이동 평균보다 낮습니다.
스톱 로스를 설정하고 이윤 가격 채널을 취합니다.
여러 가지 지표를 결합하면 잘못된 신호를 피할 수 있습니다.
비정상적인 가격 상태를 판단하기 위해 가격 채널을 사용하면 일부 바람직하지 않은 입구점을 필터링 할 수 있습니다.
트렌드 방향을 판단하는 것과 함께 움직이는 평균은 트렌드에 반대하는 거래를 피합니다.
스톱 로스 및 수익 범위 설정은 위험을 제어합니다.
매개 변수 설정은 너무 주관적이고 최적화가 필요합니다.
스톱 로즈와 취득 범위가 너무 넓거나 너무 좁을 수도 있습니다.
가격 채널 매개 변수는 모든 제품에 적합하지 않을 수 있으므로 별도의 테스트가 필요합니다.
급격한 트렌드 변화에서는 상당한 손실이 발생할 수 있습니다.
최적의 조합을 찾기 위해 매개 변수를 테스트하고 최적화합니다.
최적의 매개 변수를 선택하기 위해 다른 기간으로 이동 평균을 테스트합니다.
여러 제품에서 백테스트하고 성능에 따라 매개 변수를 선택합니다.
너무 큰 단일 손실을 피하기 위해 스톱 로스 전략을 최적화하십시오.
이 전략은 가격 이상과 트렌드 방향을 판단하기 위해 여러 지표를 결합하여 이론적으로 일부 잘못된 신호를 필터링 할 수 있습니다. 그러나 매개 변수 설정은 여전히 최적화 할 수있는 공간이있는 상대적으로 주관적입니다. 또한 실제 거래에서 수수료 및 미끄러짐과 같은 거래 비용이 고려되어야합니다. 전반적으로이 전략은 트렌드 다음 전략으로 더 적합하지만 매개 변수를 최적화하고 다양한 제품에 조정해야합니다.
/*backtest start: 2023-12-10 00:00:00 end: 2023-12-11 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Vol ST VM", overlay=true) source = close 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", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0) //plot for buy icon plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0) //plot for sell icon // multiplier = input(title="TP", type=input.float, defval=2, minval=1) src5 = close 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(close, 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 strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1) strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1) /////// Alerts ///// alertcondition(buy,title="buy") alertcondition(sell,title="sell") alertcondition(low1,title="sell tp") alertcondition(high1,title="buy tp")