Estrategia de cruce de medias móviles rápidas y lentas

El autor:¿ Qué pasa?, Fecha: 2024-02-27 16:06:30
Las etiquetas:

img

Resumen general

La estrategia de cruce de promedio móvil rápido y lento es una estrategia simple basada en promedios móviles. Utiliza dos promedios móviles, uno rápido y otro lento. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento desde abajo, va largo, lo que indica que los precios pueden subir. Cuando el promedio móvil rápido cruza por debajo del promedio móvil lento desde arriba, sale de su posición, lo que indica que los precios pueden caer. Esto puede servir como indicador para predecir la acción futura de los precios.

Principios

La estrategia utiliza dos promedios móviles, uno rápido y otro lento. Específicamente, las longitudes predeterminadas son de 25 períodos para el promedio móvil rápido y 62 períodos para el lento. La estrategia permite la selección de diferentes tipos de promedios móviles, incluidos SMA, EMA, WMA, RMA y VWMA.

Cuando el promedio móvil rápido cruza por encima del promedio móvil lento desde abajo, indica que los precios a corto plazo han comenzado a romper los precios a largo plazo, que es una típica señal de cruz dorada, lo que indica que los precios pueden entrar en una tendencia alcista. La estrategia es larga en este punto. Cuando el promedio móvil rápido cruza por debajo del promedio móvil lento desde arriba, indica que los precios a corto plazo han comenzado a romper los precios a largo plazo, que es una señal de cruz de muerte, lo que indica que los precios pueden entrar en una tendencia bajista. La estrategia sale de su posición en este punto.

Al utilizar el cruce de promedios móviles rápidos y lentos para determinar la tendencia y dirección del precio, y tomar posiciones largas o cerradas correspondientes, se pueden obtener ganancias.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. La idea es simple y fácil de entender e implementar
  2. Configuración de parámetros flexible, con períodos y tipos de medias móviles personalizables
  3. Indicador fiable, preciso para determinar las tendencias de los precios utilizando el cruce de la media móvil
  4. Automatización realizada, reduciendo la influencia de factores psicológicos sin juicio manual
  5. Aplicable a múltiples productos, puede ser ampliamente utilizado para índices, divisas, criptomonedas, etc.
  6. Fácil de optimizar, los parámetros se pueden ajustar para encontrar mejores configuraciones
  7. Fuerte extensibilidad, puede combinarse con otros indicadores o estrategias

En resumen, con el cruce de promedio móvil rápido y lento como la señal de negociación principal, la estrategia tiene una fuerte capacidad para juzgar las tendencias futuras de precios.

Análisis de riesgos

La estrategia también tiene algunos riesgos potenciales:

  1. Las señales cruzadas pueden dar señales falsas, con precios que solo tienen correcciones a corto plazo en lugar de inversiones de tendencia a largo plazo
  2. La selección inadecuada de las longitudes de media móvil corta y larga puede conducir a una negociación demasiado frecuente o perder buenas oportunidades
  3. Las señales cruzadas pueden no ser significativas durante las violentas fluctuaciones de precios
  4. Los altos costes de negociación pueden afectar a las ganancias si las señales cruzadas desencadenan operaciones demasiado frecuentes
  5. La extensibilidad fuerte también presenta riesgos de sobre-optimización

Para controlar y mitigar estos riesgos, pueden adoptarse los siguientes métodos:

  1. Utilizar otros indicadores para filtrar las señales y evitar señales falsas, por ejemplo, indicadores de divergencia precio-volumen
  2. Ajustar los parámetros de la media móvil para encontrar combinaciones óptimas y reducir las operaciones erróneas
  3. Detener temporalmente la estrategia durante las violentas oscilaciones del mercado
  4. Relajar el rango de pérdida de parada de manera adecuada para reducir las pérdidas innecesarias
  5. Realizar pruebas de robustez en múltiples productos para evaluar los riesgos y evitar la sobreoptimización

Direcciones de optimización

Las principales direcciones para optimizar la estrategia incluyen:

  1. Selección de los períodos para las medias móviles rápidas y lentas: los parámetros predeterminados pueden no ser óptimos, se pueden probar diferentes períodos para encontrar la mejor configuración

  2. Selección de tipos de medias móviles: se proporcionan varios tipos y se puede probar cuál funciona mejor para productos específicos

  3. Combinación con otros indicadores o estrategias: puede intentar combinarse con indicadores de volatilidad, indicadores de volumen-precio o estrategias de seguimiento de tendencias para mejorar el rendimiento

  4. Optimización adaptativa de parámetros: permite que los períodos de medias móviles se ajusten automáticamente en función de la volatilidad y la liquidez del mercado para mejorar la estabilidad

  5. Asistencia del modelo de IA: utilizar algoritmos de aprendizaje automático para analizar grandes cantidades de datos y buscar automáticamente las reglas de negociación óptimas

A través de estos métodos de optimización, se puede esperar una mayor mejora de la rentabilidad y estabilidad de la estrategia.

Resumen de las actividades

En resumen, la estrategia de cruce de promedios móviles rápidos y lentos es una estrategia muy práctica de seguimiento de tendencias. Captura los patrones de cambio de precios en diferentes marcos de tiempo, utilizando el cruce de promedios móviles rápidos de la media móvil lenta para determinar la tendencia y dirección probables de los precios futuros. La idea de estrategia es simple y clara, fácil de entender e implementar, ofrece parámetros personalizables flexibles, y también tiene alta confiabilidad, grado de automatización, amplia aplicabilidad y fuerte extensibilidad. Por supuesto, existen riesgos de señales falsas, que necesitan combinación con otros indicadores para lograr el máximo efecto. Con pruebas y optimización continuas, la estrategia tiene el potencial de lograr ganancias estables decentes en el comercio en vivo.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Fast v Slow Moving Averages Strategy', shorttitle = 'Fast v Slow', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

fastBars = input.int(25, "Fast moving average length", minval=1)
slowBars = input.int(62, "Slow moving average length", minval=1)
strategy = input.string("EMA", "MA type", options = ["EMA", "VWMA", "SMA", "RMA", "WMA"])

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, fastBars) >= ta.ema(close, slowBars)) ? 1 : -1
    "SMA" => (ta.sma(close, fastBars) >= ta.sma(close, slowBars)) ? 1 : -1
    "RMA" => (ta.rma(close, fastBars) >= ta.rma(close, slowBars)) ? 1 : -1
    "WMA" => (ta.wma(close, fastBars) >= ta.wma(close, slowBars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, fastBars) >= ta.vwma(close, slowBars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

fastMA = switch strategy
    "EMA" => ta.ema(close, fastBars)
    "SMA" => ta.sma(close, fastBars)
    "RMA" => ta.rma(close, fastBars)
    "WMA" => ta.wma(close, fastBars)
    "VWMA" => ta.vwma(close, fastBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
slowMA = switch strategy
    "EMA" => ta.ema(close, slowBars)
    "SMA" => ta.sma(close, slowBars)
    "RMA" => ta.rma(close, slowBars)
    "WMA" => ta.wma(close, slowBars)
    "VWMA" => ta.vwma(close, slowBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? fastMA : na, title = "Fast Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
plot(series = maOn == "On" ? slowMA : na, title = "Slow Moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

Más.