Sistema de cruce de la media móvil

El autor:¿ Qué pasa?, Fecha: 2024-01-03 16:22:18
Las etiquetas:

img

Resumen general

Esta es una estrategia de seguimiento de tendencias basada en señales de cruce de promedios móviles. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento desde abajo, se genera una señal de compra. Cuando el promedio móvil rápido cruza por debajo del promedio móvil lento desde arriba, se genera una señal de venta.

Estrategia lógica

La estrategia utiliza dos promedios móviles, un promedio móvil simple de 20 períodos y un promedio móvil simple de 30 períodos. Cuando el MA de 20 períodos cruza por encima del MA de 30 períodos, se genera una señal de compra.

Los promedios móviles en sí mismos sirven como indicadores de tendencia, que representan la dirección de la tendencia del mercado de manera efectiva. El principio de cruce permite a la estrategia capturar los puntos de inversión de tendencia a tiempo y generar señales comerciales. Los períodos de 20 y 30 días se establecen adecuadamente para reflejar la tendencia del mercado sin ser demasiado sensibles al ruido.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. La lógica es simple y clara, fácil de entender e implementar, adecuada para principiantes;
  2. La negociación a lo largo de la tendencia evita posiciones contrarias a la tendencia y pérdidas innecesarias;
  3. Las medias móviles tienen un efecto filtrante para eliminar el ruido del mercado y evitar señales falsas;
  4. Los parámetros son razonables para no causar demasiada sensibilidad.

Análisis de riesgos

Los principales riesgos de esta estrategia incluyen:

  1. Las órdenes de suspensión de pérdidas frecuentes pueden activarse durante la consolidación del mercado cuando el cruce de la media móvil ocurre con frecuencia;
  2. Se perdieron algunas ganancias debido al retraso de los promedios móviles durante las tendencias fuertes;
  3. Los parámetros no adecuados pueden afectar a la estabilidad.

Soluciones:

  1. Ajustar los períodos de media móvil, utilizar medias móviles de triángulo, etc., para suavizar las curvas y reducir la frecuencia de cruce;
  2. Utilice otros indicadores para determinar la tendencia, evite negociar durante la consolidación;
  3. Optimice los parámetros para encontrar la mejor combinación.

Direcciones de optimización

Los principales aspectos para optimizar la estrategia:

  1. Prueba de diferentes tipos de medias móviles, como la media móvil ponderada, la media móvil triangular, etc.
  2. Añadir otros indicadores técnicos para evitar señales durante la consolidación;
  3. Incorporar otras técnicas de análisis como las ondas de Elliott, la teoría del canal para determinar la tendencia;
  4. Adoptar modelos de aprendizaje automático para optimizar dinámicamente los parámetros;
  5. Utilice herramientas cuantitativas y aplique técnicas de toma de pérdidas / ganancias para refinar la gestión del dinero.

Conclusión

El sistema de cruce de promedios móviles es una estrategia de seguimiento de tendencias simple y efectiva. La lógica es clara y fácil de entender, muy adecuada para que los principiantes aprendan. Genera señales comerciales basadas en cruces de promedios móviles y ganancias de la negociación a lo largo de la tendencia. La estrategia se puede optimizar de muchas maneras para ser más estable y eficiente.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
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.