Esta estrategia es un sistema de ruptura de tendencia basado en VWAP (Volume Weighted Average Price) y canales de desviación estándar. Construye un rango de precios dinámico mediante el cálculo de VWAP y bandas de desviación estándar para capturar oportunidades de ruptura al alza. La estrategia se basa principalmente en señales de ruptura de banda de desviación estándar para el comercio, con objetivos de ganancia e intervalos de orden para controlar el riesgo.
Esta es una estrategia de trading cuantitativa que combina principios estadísticos y análisis técnico. A través de la combinación de VWAP y bandas de desviación estándar, construye un sistema de trading relativamente confiable.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("VWAP Stdev Bands Strategy (Long Only)", overlay=true) // Standard Deviation Inputs devUp1 = input.float(1.28, title="Stdev above (1)") devDn1 = input.float(1.28, title="Stdev below (1)") // Show Options showPrevVWAP = input(false, title="Show previous VWAP close?") profitTarget = input.float(2, title="Profit Target ($)", minval=0) // Profit target for closing orders gapMinutes = input.int(15, title="Gap before new order (minutes)", minval=0) // Gap for placing new orders // VWAP Calculation var float vwapsum = na var float volumesum = na var float v2sum = na var float prevwap = na // Track the previous VWAP var float lastEntryPrice = na // Track the last entry price var int lastEntryTime = na // Track the time of the last entry start = request.security(syminfo.tickerid, "D", time) newSession = ta.change(start) vwapsum := newSession ? hl2 * volume : vwapsum[1] + hl2 * volume volumesum := newSession ? volume : volumesum[1] + volume v2sum := newSession ? volume * hl2 * hl2 : v2sum[1] + volume * hl2 * hl2 myvwap = vwapsum / volumesum dev = math.sqrt(math.max(v2sum / volumesum - myvwap * myvwap, 0)) // Calculate Upper and Lower Bands lowerBand1 = myvwap - devDn1 * dev upperBand1 = myvwap + devUp1 * dev // Plot VWAP and Bands with specified colors plot(myvwap, style=plot.style_line, title="VWAP", color=color.green, linewidth=1) plot(upperBand1, style=plot.style_line, title="VWAP Upper (1)", color=color.blue, linewidth=1) plot(lowerBand1, style=plot.style_line, title="VWAP Lower (1)", color=color.red, linewidth=1) // Trading Logic (Long Only) longCondition = close < lowerBand1 and close[1] >= lowerBand1 // Price crosses below the lower band // Get the current time in minutes currentTime = timestamp("GMT-0", year(timenow), month(timenow), dayofmonth(timenow), hour(timenow), minute(timenow)) // Check if it's time to place a new order based on gap canPlaceNewOrder = na(lastEntryTime) or (currentTime - lastEntryTime) >= gapMinutes * 60 * 1000 // Close condition based on profit target if (strategy.position_size > 0) if (close - lastEntryPrice >= profitTarget) strategy.close("B") lastEntryTime := na // Reset last entry time after closing // Execute Long Entry if (longCondition and canPlaceNewOrder) strategy.entry("B", strategy.long) lastEntryPrice := close // Store the entry price lastEntryTime := currentTime // Update the last entry time // Add label for the entry label.new(bar_index, close, "B", style=label.style_label_down, color=color.green, textcolor=color.white, size=size.small) // Optional: Plot previous VWAP for reference prevwap := newSession ? myvwap[1] : prevwap[1] plot(showPrevVWAP ? prevwap : na, style=plot.style_circles, color=close > prevwap ? color.green : color.red)