Esta estrategia se llama
Esta estrategia calcula el precio promedio de transacción actual a través del indicador VWAP. VWAP representa el precio promedio y es la relación entre la facturación y el volumen de operaciones. El indicador VWAP refleja el grado de desviación entre el precio actual y el precio promedio histórico de negociación.
La estrategia utiliza la línea media móvil del indicador VWAP y sus líneas de canal desplazadas. Las proporciones de las líneas de canal desplazadas se establecen a través de los parámetros
Los usuarios pueden ajustar el ancho del canal y el tamaño de las posiciones como porcentaje del total de activos de acuerdo con sus propias preferencias, logrando así diferentes grados de frecuencia de negociación.
Esta estrategia comercial tiene las siguientes ventajas:
Dado que el indicador VWAP puede reflejar bien el nivel promedio de precios, el comercio basado en sus líneas de canal puede bloquear efectivamente los puntos medios de valor y evitar ser sesgado por las fluctuaciones a corto plazo. Al mismo tiempo, la combinación de canales con diferentes parámetros y la construcción de posiciones en lotes pueden controlar eficazmente los riesgos y prevenir concentraciones de riesgo unilaterales que resultan en liquidaciones forzadas. Por último, al cerrar las posiciones cerca de la regresión de la línea promedio móvil VWAP, se pueden reducir las pérdidas causadas por las reversiones de precios.
Esta estrategia también tiene algunos riesgos:
El indicador VWAP es insensible a la volatilidad de las operaciones de alta frecuencia. En caso de brechas de precios extremas o anomalías a corto plazo, todavía desencadenará señales y pérdidas comerciales innecesarias. Además, si los parámetros del canal se establecen demasiado sueltos, formará fácilmente señales de penetración de precios inválidas. Finalmente, si el rango de posiciones que se cierran en operaciones de regresión se establece demasiado amplio, puede perder el mejor momento para obtener ganancias y causar pérdidas atrapadas.
Las contramedidas consisten en evaluar razonablemente la configuración de los parámetros y ajustar adecuadamente los parámetros de los canales; al tiempo que se combinan otros indicadores para juzgar las anomalías de los precios y evitar seguir ciegamente las señales; y, finalmente, evaluar la optimización de parámetros de canales de diferentes niveles y rangos de regresión para lograr mejores efectos de obtención de beneficios.
Esta estrategia se puede optimizar en las siguientes direcciones:
Se pueden agregar más niveles de líneas de canal y se pueden combinar parámetros para la optimización para lograr efectos comerciales más estables. Además, se pueden agregar reglas de juicio de volumen de negociación para evitar brechas de precios inválidas que causan pérdidas comerciales. Finalmente, también se pueden establecer reglas de stop loss para que cuando la pérdida de posiciones alcance un cierto porcentaje, se elimine la pérdida de las posiciones de salida, controlando efectivamente los riesgos.
Esta estrategia combina el indicador VWAP con los canales de precios para lograr una estrategia comercial relativamente estable. Las configuraciones de parámetros de la estrategia son flexibles para que los usuarios puedan ajustarse de acuerdo con sus propias preferencias. Esta estrategia puede determinar efectivamente la dirección de los puntos medios de valor. A través de la combinación de parámetros y la construcción por lotes de posiciones, se puede lograr una rentabilidad estable. Aunque todavía hay margen de mejora en la estrategia, en general es una estrategia comercial cuantitativa con una alta practicidad.
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %") lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %") short1 = input(true, title = "short 1") long1 = input(true, title = "long 1") shortlevel1 = input(1.0, title = "Short line 1") longlevel1 = input(-1.0, title = "Long line 1") needoffset = input(true, title = "Offset") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Variables size = strategy.position_size mult = 1 / syminfo.mintick truetime = true //VWAP ma = vwap(hlc3) //Levels longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close //Lines colorlong1 = long1 ? color.lime : na colorshort1 = short1 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1") plot(ma, offset = offset, color = color.blue, title = "MA line") plot(longline1, offset = offset, color = colorlong1, title = "Long line 1") //Trading lotlong = 0.0 lotshort = 0.0 lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1] lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1] if ma > 0 if lotlong > 0 lotslong = 0.0 lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0 strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime)) if lotshort > 0 lotsshort = 0.0 lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0 strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime)) if strategy.position_size > 0 strategy.exit("TPL", "L1", limit = ma) if strategy.position_size < 0 strategy.exit("TPS", "S1", limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("L1") strategy.cancel("S1") strategy.cancel("TPL") strategy.cancel("TPS")