Chiến lược này dựa trên chỉ số siêu xu hướng và chỉ số kênh giá, kết hợp với các tín hiệu trung bình động để giao dịch. Ý tưởng cốt lõi của nó là sử dụng kênh giá để đánh giá liệu giá hiện tại có ở trạng thái bất thường hay không, Super Trend để xác định hướng xu hướng hiện tại và tạo ra các tín hiệu giao dịch kết hợp với các tín hiệu trung bình động.
Tính toán chỉ số siêu xu hướng. Các đường ray trên và dưới là giá hiện tại cộng/từ N lần chỉ số ATR tương ứng. Khi giá cao hơn đường ray trên, nó tăng. Khi giá thấp hơn đường ray dưới, nó giảm.
Tính toán chỉ số kênh giá. Đường kênh giá là M lần độ lệch chuẩn N ngày của giá. Giá cao hơn / thấp hơn đường kênh được coi là trạng thái bất thường.
Tính toán các đường trung bình động.
Tạo tín hiệu giao dịch:
Tín hiệu mua: Giá đóng vượt trên đường Super Trend và cao hơn mức trung bình động của giá mở.
Tín hiệu bán: Giá đóng vượt dưới đường siêu xu hướng và thấp hơn mức trung bình động của giá mở.
Thiết lập dừng lỗ và lấy lợi nhuận kênh giá.
Kết hợp nhiều chỉ số tránh các tín hiệu sai.
Sử dụng kênh giá để đánh giá trạng thái giá bất thường có thể lọc ra một số điểm nhập khẩu không mong muốn.
Mức trung bình động kết hợp với đánh giá hướng xu hướng tránh giao dịch chống lại xu hướng.
Thiết lập stop loss và take profit range kiểm soát rủi ro.
Cài đặt tham số là quá chủ quan và cần tối ưu hóa.
Phạm vi dừng lỗ và lấy lợi nhuận có thể được đặt quá rộng hoặc quá hẹp.
Các thông số kênh giá có thể không phù hợp với tất cả các sản phẩm, cần thử nghiệm riêng biệt.
Mất đáng kể có thể xảy ra trong những thay đổi xu hướng mạnh mẽ.
Kiểm tra và tối ưu hóa các thông số để tìm kết hợp tối ưu.
Kiểm tra các đường trung bình động với các khoảng thời gian khác nhau để chọn các thông số tối ưu.
Backtest trên nhiều sản phẩm và chọn các thông số theo hiệu suất tương ứng.
Tối ưu hóa chiến lược dừng lỗ để tránh lỗ đơn quá lớn.
Chiến lược này kết hợp nhiều chỉ số để đánh giá sự bất thường của giá và hướng xu hướng, về mặt lý thuyết có thể lọc ra một số tín hiệu sai. Tuy nhiên, cài đặt tham số vẫn tương đối chủ quan với chỗ cho tối ưu hóa. Ngoài ra, chi phí giao dịch như hoa hồng và trượt nên được xem xét trong giao dịch thực tế. Nhìn chung, chiến lược này phù hợp hơn như một chiến lược theo xu hướng, nhưng các tham số cần được tối ưu hóa và điều chỉnh cho các sản phẩm khác nhau.
/*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")