Esta estrategia combina el oscilador de tendencia de onda (WT) y el precio promedio ponderado por volumen (VWAP) para capturar oportunidades potenciales de inversión de tendencia mediante la identificación de divergencias entre el precio y el indicador. La estrategia utiliza el rango verdadero promedio (ATR) para determinar los niveles de stop-loss y ajusta dinámicamente el tamaño de la posición en función del porcentaje de riesgo de la cuenta. Las principales fortalezas de la estrategia se encuentran en sus capacidades de seguimiento de tendencias y medidas de gestión de riesgos, pero puede sufrir pérdidas en mercados agitados. Las direcciones de optimización incluyen la adición de filtros adicionales y la mejora de las reglas de entrada y salida.
La estrategia de divergencia del oscilador de tendencia de onda combina el indicador de tendencia de onda y el precio promedio ponderado por volumen para identificar oportunidades potenciales de inversión de tendencia. Las fortalezas de la estrategia se encuentran en sus capacidades de seguimiento de tendencias y medidas de gestión de riesgos, pero puede enfrentar riesgos en mercados agitados. La estrategia se puede optimizar aún más mediante la introducción de filtros adicionales, ajustes de parámetros dinámicos y reglas de entrada y salida mejoradas.
/*backtest start: 2023-05-22 00:00:00 end: 2024-05-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("PipShiesty Swagger", overlay=true) // WaveTrend Oscillator (WT) n1 = input.int(10, "Channel Length") n2 = input.int(21, "Average Length") obLevel1 = input.float(60.0, "Overbought Level 1") obLevel2 = input.float(53.0, "Overbought Level 2") osLevel1 = input.float(-60.0, "Oversold Level 1") osLevel2 = input.float(-53.0, "Oversold Level 2") ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) // VWAP vwap = ta.vwma(close, n1) // Signal Line wt1 = tci wt2 = ta.sma(wt1, 4) // Bullish and Bearish Divergences bullishDivergence = (ta.lowest(close, 5) > ta.lowest(close[1], 5)) and (wt1 < wt1[1]) and (close > close[1]) bearishDivergence = (ta.highest(close, 5) < ta.highest(close[1], 5)) and (wt1 > wt1[1]) and (close < close[1]) // Plot WaveTrend Oscillator plot(wt1, title="WT1", color=color.blue) plot(wt2, title="WT2", color=color.red) // Plot Divergences plotshape(series=bullishDivergence, location=location.belowbar, color=color.green, style=shape.labelup, title="Bullish Divergence") plotshape(series=bearishDivergence, location=location.abovebar, color=color.red, style=shape.labeldown, title="Bearish Divergence") // Risk Management Parameters riskPercentage = input.float(1, title="Risk Percentage per Trade", minval=0.1, step=0.1) / 100 stopLossATR = input.float(1.5, title="Stop Loss ATR Multiplier", minval=0.5, step=0.1) // ATR Calculation atr = ta.atr(14) // Position Size Calculation calculatePositionSize(stopLoss) => riskAmount = strategy.equity * riskPercentage positionSize = riskAmount / stopLoss positionSize // Entry and Exit Logic with Stop Loss if bullishDivergence stopLoss = low - atr * stopLossATR positionSize = calculatePositionSize(close - stopLoss) strategy.entry("Buy", strategy.long, qty=positionSize) strategy.exit("Sell", from_entry="Buy", stop=stopLoss) if bearishDivergence strategy.close("Buy") // Plot VWAP plot(vwap, title="VWAP", color=color.orange) // Background color to indicate Overbought/Oversold conditions bgcolor(wt1 > obLevel1 ? color.new(color.red, 90) : na, title="Overbought Level 1") bgcolor(wt1 < osLevel1 ? color.new(color.green, 90) : na, title="Oversold Level 1") bgcolor(wt1 > obLevel2 ? color.new(color.red, 70) : na, title="Overbought Level 2") bgcolor(wt1 < osLevel2 ? color.new(color.green, 70) : na, title="Oversold Level 2")