Cette stratégie combine les indicateurs VWAP (Volume Weighted Average Price) et Supertrend. Elle détermine les signaux d'achat et de vente en comparant la position du prix par rapport au VWAP et la direction de l'indicateur de Supertrend. Un signal d'achat est généré lorsque le prix dépasse le VWAP et que la Supertrend est positive, tandis qu'un signal de vente est généré lorsque le prix dépasse le VWAP et que la Supertrend est négative.
La stratégie VWAP et Supertrend Buy/Sell vise à capturer de manière complète les tendances du marché et les points tournants potentiels en combinant deux types d'indicateurs différents. La logique de la stratégie est claire et facile à mettre en œuvre et à optimiser. Cependant, la performance de la stratégie dépend de la sélection des paramètres et manque de mesures de gestion des risques. Dans les applications pratiques, une optimisation et un raffinement supplémentaires sont nécessaires pour s'adapter aux différentes conditions du marché et aux exigences de négociation.
/*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)