Estrategia de cruce de la media móvil

El autor:¿ Qué pasa?, Fecha: 2023-09-18 17:35:37
Las etiquetas:

Resumen general

La estrategia de cruce de promedios móviles es una estrategia de tendencia basada en cruces de promedios móviles como señales comerciales.

Principio de la estrategia

Los principios principales de esta estrategia son los siguientes:

  1. Calcular dos promedios móviles, uno rápido y uno lento, puede elegir SMA o EMA.

  2. Ir largo cuando la línea rápida cruza por encima de la línea lenta, posición cerrada cuando la línea rápida cruza por debajo de la línea lenta.

  3. Puede elegir la ruptura del precio o el cruce de la media móvil como señales comerciales.

  4. Puede establecer un período de tiempo para la ejecución de la estrategia.

  5. Sólo puede ir largo en el mercado alcista y sólo puede ir corto en el mercado bajista.

  6. Optimizar los parámetros de las medias móviles mediante backtesting para diferentes períodos.

La estrategia utiliza la tendencia después de la capacidad de los promedios móviles. Cuando el MA a corto plazo cruza por encima del MA a largo plazo, indica una tendencia al alza, debe ir largo. viceversa, tendencia a la baja, debe reducir la posición.

Análisis de ventajas

Las principales ventajas de esta estrategia:

  1. Principio simple, fácil de implementar, señales comerciales claras.

  2. Puede seguir de manera efectiva las tendencias y captar oportunamente las oportunidades comerciales.

  3. Pueden combinarse diferentes parámetros de la MA para diversos entornos de mercado.

  4. Puede elegir solo largo o sólo corto para evitar operaciones invertidas inciertas.

  5. Puede establecer la estrategia de tiempo de ejecución para evitar ciertos períodos.

  6. Puede mejorar continuamente la estrategia mediante la optimización de parámetros.

Análisis de riesgos

Los principales riesgos de esta estrategia:

  1. Es propenso a señales falsas, evita comerciar con demasiada frecuencia.

  2. El rendimiento depende de los parámetros de MA, una selección incorrecta puede provocar pérdidas.

  3. Existe cierto retraso, evita la entrada prematura y la salida tardía.

  4. No es adecuado para entornos de mercado de rango limitado.

  5. Los cruces MA tienen algo de aleatoriedad, no pueden evitar completamente las pérdidas.

Los riesgos pueden reducirse mediante la confirmación del volumen, la optimización de parámetros o el uso con otros indicadores.

Direcciones de optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Añadir filtro de pendiente como % ((Línea - ShortMa) /ShortMa) / ((Línea - LongMa) /LongMa).

  2. Optimizar los períodos de promedio móvil, probar diferentes combinaciones.

  3. Añadir indicadores como MACD o RSI para una confirmación múltiple.

  4. Establecer el stop loss para limitar las pérdidas de una sola operación.

  5. Distinguir entre mercados de tendencia y mercados variados para uso condicional.

  6. Prueba diferentes períodos de retención para encontrar el esquema óptimo.

Resumen de las actividades

La estrategia de cruce de promedios móviles es una estrategia simple y práctica de seguimiento de tendencias. Las ventajas son la implementación fácil y el seguimiento de tendencias efectivo. Las desventajas son la demora y propensas a señales falsas. La estrategia se puede mejorar a través de la optimización de parámetros y el filtrado de indicadores para lograr un mejor rendimiento en mercados con tendencias fuertes.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time = true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Más.