Estrategia de trading cuantitativo basada en el cruce de medias móviles ponderadas


Fecha de creación: 2023-12-06 12:05:01 Última modificación: 2023-12-06 12:05:01
Copiar: 0 Número de Visitas: 626
1
Seguir
1619
Seguidores

Estrategia de trading cuantitativo basada en el cruce de medias móviles ponderadas

Descripción general

Esta estrategia se llamaLas estrategias de cruce de medias móviles cuantitativas ponderadas(Weighted Quantitative Moving Average Crossover Strategy), la idea básica es combinar varios indicadores como el precio, el volumen de transacciones, diseñar líneas rápidas y lentas, y enviar señales de compra y venta cuando ocurren horquillas doradas y horquillas muertas.

Principio de estrategia

El indicador central de esta estrategia es el promedio móvil cuantitativo. El QMA mide la dirección de la tendencia mediante el cálculo de un promedio ponderado de precios durante un período de tiempo. Se diferencia del promedio móvil ordinario en que el peso de los precios es igual al peso del precio.*El volumen de transacciones (volumen de transacciones) disminuye con el tiempo. De esta manera, los precios más recientes tienen más peso y se puede responder más rápidamente a los cambios en el mercado.

En concreto, esta estrategia construye una línea de QMA rápida y una línea de QMA lenta. El parámetro de la línea rápida está establecido en 25 días y el parámetro de la línea lenta en 29 días. Se genera una señal de compra cuando la línea rápida atraviesa la línea lenta desde abajo; se genera una señal de venta cuando la línea rápida atraviesa la línea lenta desde arriba.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas en comparación con la media móvil normal:

  1. Responda más rápidamente a los mercados y aproveche las oportunidades de corto plazo
  2. La combinación de varias dimensiones de precios y volúmenes de transacciones con mayor estabilidad
  3. Configuración de parámetros flexible para adaptarse a diferentes entornos de mercado

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Las operaciones de línea corta son frecuentes y pueden aumentar los costos de las transacciones y los puntos de deslizamiento.
  2. PARAMETERS Optimización excesiva que puede conducir a una curva de ajuste
  3. El efecto del indicador puede ser reducido cuando el volumen de transacciones es bajo

El riesgo puede mitigarse mediante un ajuste adecuado de la frecuencia de los parámetros, un análisis riguroso de la marcha hacia adelante y la combinación de otros indicadores.

Dirección de optimización

La estrategia aún tiene espacio para ser mejorada:

  1. Ajuste dinámico de los parámetros de la QMA para que pueda adaptarse a la volatilidad del mercado
  2. Indicadores como la volatilidad y el volumen de transacciones filtran las oportunidades de entrada.
  3. Aumentar las estrategias de stop loss y controlar las pérdidas individuales

Resumir

En general, esta estrategia es una estrategia de negociación a corto plazo que tiene una mejor estabilidad. En comparación con el promedio de un solo precio, sus indicadores reflejan mejor la relación entre la oferta y la demanda en el mercado. Mediante el ajuste de los parámetros y la introducción de medios de control de riesgo, esta estrategia puede operar de manera estable y obtener buenos rendimientos a largo plazo.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA