Estrategia cuantitativa de cruce de medias móviles SMA de tendencia a largo plazo

SMA EMA
Fecha de creación: 2025-01-06 17:01:08 Última modificación: 2025-01-06 17:01:08
Copiar: 3 Número de Visitas: 432
1
Seguir
1617
Seguidores

Estrategia cuantitativa de cruce de medias móviles SMA de tendencia a largo plazo

Descripción general

La estrategia es un sistema de trading cuantitativo basado en señales de cruce de promedios móviles simples (SMA) de múltiples períodos. Opera principalmente identificando oportunidades de retroceso a corto plazo dentro de una tendencia alcista a largo plazo. La estrategia utiliza indicadores SMA con cinco períodos de 5 días, 10 días, 20 días, 60 días y 120 días para juzgar las tendencias del mercado y las oportunidades comerciales a través de la relación de posiciones y las señales de cruce de los promedios móviles.

Principio de estrategia

La lógica central de la estrategia incluye las siguientes partes clave:

  1. La tendencia a largo plazo se puede juzgar por la relación de posición relativa entre la media móvil simple (SMA20) y la media móvil simple (SMA60). Cuando la media móvil simple (SMA20) está por encima de la media móvil simple (SMA60), se confirma que el mercado está en una tendencia alcista.
  2. Bajo la premisa de confirmar la tendencia alcista a largo plazo, se activa una señal de compra cuando la SMA5 de corto plazo rebota desde abajo de la SMA20 hacia arriba. Esto sugiere que el mercado se está recuperando después de un retroceso de corto plazo en una tendencia alcista.
  3. Cuando SMA20 cruza SMA5, se activa una señal de cierre. Esto indica que el impulso ascendente a corto plazo se ha debilitado y podría entrar en un período de ajuste.
  4. La estrategia también incluye una función de filtro de tiempo, que puede limitar el rango de tiempo del backtest y aumentar la flexibilidad de la estrategia.

Ventajas estratégicas

  1. La lógica de la estrategia es clara y simple, fácil de entender e implementar, y no implica procesos de cálculo complejos.
  2. Al utilizar promedios móviles de múltiples períodos en coordinación, se puede filtrar eficazmente el ruido del mercado y se puede mejorar la confiabilidad de las señales comerciales.
  3. La estrategia se centra en las oportunidades de retroceso en los mercados con tendencia, lo que está en línea con el concepto central del “comercio de tendencias”.
  4. El uso de SMA en lugar de EMA reduce la sensibilidad a los cambios de precios y reduce las señales falsas.
  5. La lógica de entrada y salida es clara, lo que facilita la ejecución y el control de riesgos.

Riesgo estratégico

  1. El sistema de promedio móvil tiene retrasos que pueden generar tiempos de entrada y salida subóptimos.
  2. En un mercado volátil, los cruces frecuentes de medias móviles pueden generar demasiadas señales falsas.
  3. La estrategia carece de un mecanismo de filtrado de volatilidad y puede enfrentar mayores riesgos de caída durante períodos de alta volatilidad.
  4. Sin tener en cuenta la cooperación de otros indicadores técnicos, como el volumen de operaciones, es necesario mejorar la confiabilidad de la señal.
  5. Los parámetros de promedio móvil fijo pueden no ser adecuados para todos los entornos de mercado.

Dirección de optimización de la estrategia

  1. Introduzca el indicador ATR para filtrar la volatilidad y evitar operar cuando la volatilidad sea demasiado alta.
  2. Agregue un mecanismo de confirmación de volumen para mejorar la confiabilidad de las señales comerciales.
  3. Desarrollar un mecanismo de ciclo de promedio móvil adaptativo para permitir que la estrategia se adapte mejor a diferentes entornos de mercado.
  4. Agregue un filtro de fuerza de tendencia, como el indicador ADX, para garantizar que se opere en tendencias fuertes.
  5. Mejorar el mecanismo de stop loss, como agregar un trailing stop, para controlar mejor los riesgos.

Resumir

Esta estrategia utiliza promedios móviles SMA de múltiples períodos para construir un sistema comercial que se centra en capturar oportunidades de retroceso en tendencias ascendentes a largo plazo. El diseño de la estrategia es conciso y práctico, con buena comprensibilidad e implementación. Se espera que mediante la introducción de medidas de optimización como el filtrado de volatilidad y la confirmación del volumen, se mejore aún más la solidez y la confiabilidad de la estrategia.

Código Fuente de la Estrategia
/*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=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")