Esta estrategia combina los indicadores VWAP (Volume Weighted Average Price) y Supertrend. Determina las señales de compra y venta comparando la posición del precio con respecto al VWAP y la dirección del indicador Supertrend. Una señal de compra se genera cuando el precio cruza por encima del VWAP y la Supertrend es positiva, mientras que una señal de venta se genera cuando el precio cruza por debajo del VWAP y la Supertrend es negativa. La estrategia también evita generar señales duplicadas registrando el estado de la señal anterior hasta que aparezca una señal opuesta.
La estrategia VWAP y Supertrend Buy/Sell tiene como objetivo capturar de manera integral las tendencias del mercado y los puntos de inflexión potenciales mediante la combinación de dos tipos diferentes de indicadores. La lógica de la estrategia es clara y fácil de implementar y optimizar. Sin embargo, el rendimiento de la estrategia depende de la selección de parámetros y carece de medidas de gestión de riesgos.
/*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)