Chiến lược này kết hợp các chỉ báo VWAP (Giá trung bình trọng lượng khối lượng) và siêu xu hướng. Nó xác định tín hiệu mua và bán bằng cách so sánh vị trí giá so với VWAP và hướng của chỉ báo siêu xu hướng. Một tín hiệu mua được tạo ra khi giá vượt qua trên VWAP và siêu xu hướng là dương tính, trong khi một tín hiệu bán được tạo ra khi giá vượt qua dưới VWAP và siêu xu hướng là âm. Chiến lược cũng tránh tạo tín hiệu trùng lặp bằng cách ghi lại trạng thái tín hiệu trước cho đến khi một tín hiệu ngược lại xuất hiện.
Chiến lược mua / bán VWAP và Supertrend nhằm mục đích nắm bắt toàn diện các xu hướng thị trường và các bước ngoặt tiềm năng bằng cách kết hợp hai loại chỉ số khác nhau. Logic chiến lược rõ ràng và dễ thực hiện và tối ưu hóa. Tuy nhiên, hiệu suất của chiến lược phụ thuộc vào lựa chọn tham số và thiếu các biện pháp quản lý rủi ro. Trong các ứng dụng thực tế, cần tối ưu hóa và tinh chỉnh thêm để thích nghi với các điều kiện thị trường và yêu cầu giao dịch khác nhau.
/*backtest start: 2023-05-28 00:00:00 end: 2024-06-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="VWAP and Super Trend Buy/Sell Strategy", shorttitle="VWAPST", overlay=true) //===== VWAP ===== showVWAP = input.bool(title="Show VWAP", defval=true, group="VWAP") VWAPSource = input.source(title="VWAP Source", defval=hl2, group="VWAP") VWAPrice = ta.vwap(VWAPSource) plot(showVWAP ? VWAPrice : na, color=color.teal, title="VWAP", linewidth=2) //===== Super Trend ===== showST = input.bool(true, "Show SuperTrend Indicator", group="Super Trend") Period = input.int(title="ATR Period", defval=10, group="Super Trend") Multiplier = input.float(title="ATR Multiplier", defval=2.0, group="Super Trend") // Super Trend ATR Up = hl2 - (Multiplier * ta.atr(Period)) Dn = hl2 + (Multiplier * ta.atr(Period)) var float TUp = na var float TDown = na TUp := na(TUp[1]) ? Up : close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up TDown := na(TDown[1]) ? Dn : close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn var int Trend = na Trend := na(Trend[1]) ? 1 : close > TDown[1] ? 1 : close < TUp[1] ? -1 : Trend[1] Tsl = Trend == 1 ? TUp : TDown linecolor = Trend == 1 ? color.green : color.red plot(showST ? Tsl : na, color=linecolor, style=plot.style_line, linewidth=2, title="SuperTrend") // Buy/Sell Conditions var bool previousBuysignal = false var bool previousSellsignal = false buysignal = not previousBuysignal and Trend == 1 and close > VWAPrice sellsignal = not previousSellsignal and Trend == -1 and close < VWAPrice // Ensure the signals are not repetitive if (buysignal) previousBuysignal := true previousSellsignal := false else if (sellsignal) previousBuysignal := false previousSellsignal := true // Execute buy and sell orders if (buysignal) strategy.entry("Buy", strategy.long) if (sellsignal) strategy.entry("Sell", strategy.short) // Plot Buy/Sell Labels //plotshape(buysignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white, size=size.normal) //plotshape(sellsignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white, size=size.normal)