Strategi ini menggabungkan indikator VWAP (Volume Weighted Average Price) dan Supertrend. Ini menentukan sinyal beli dan jual dengan membandingkan posisi harga relatif terhadap VWAP dan arah indikator Supertrend. Sinyal beli dihasilkan ketika harga melintasi di atas VWAP dan Supertrend positif, sementara sinyal jual dihasilkan ketika harga melintasi di bawah VWAP dan Supertrend negatif. Strategi ini juga menghindari menghasilkan sinyal duplikat dengan merekam keadaan sinyal sebelumnya sampai sinyal sebaliknya muncul.
Strategi VWAP dan Supertrend Buy/Sell bertujuan untuk menangkap secara komprehensif tren pasar dan titik balik potensial dengan menggabungkan dua jenis indikator yang berbeda. Logika strategi jelas dan mudah diimplementasikan dan dioptimalkan. Namun, kinerja strategi tergantung pada pemilihan parameter dan tidak memiliki langkah-langkah manajemen risiko. Dalam aplikasi praktis, optimasi dan penyempurnaan lebih lanjut diperlukan untuk beradaptasi dengan kondisi pasar dan persyaratan perdagangan yang berbeda.
/*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)