Sistema de cruce de medias móviles


Fecha de creación: 2024-01-03 16:22:18 Última modificación: 2024-01-03 16:22:18
Copiar: 1 Número de Visitas: 574
1
Seguir
1621
Seguidores

Sistema de cruce de medias móviles

Descripción general

La estrategia es una estrategia de negociación de avance múltiple que forma señales de negociación basadas en las medias móviles. Se genera una señal de compra cuando las medias móviles rápidas atraviesan las medias móviles lentas desde abajo; se genera una señal de venta cuando las medias móviles rápidas atraviesan las medias móviles lentas desde arriba.

Principio de estrategia

La estrategia utiliza dos promedios móviles, el promedio móvil simple de 20 días y el promedio móvil simple de 30 días. Cuando el promedio móvil de 20 días atraviesa el promedio móvil de 30 días desde abajo, genera una señal de compra; cuando el promedio móvil de 20 días atraviesa el promedio móvil de 30 días desde arriba, genera una señal de venta.

El promedio móvil en sí mismo es un indicador de tendencia que puede describir eficazmente la dirección de la tendencia del mercado. El principio de cruce permite a la estrategia capturar los puntos de cambio de tendencia a tiempo para formar una señal de negociación. La configuración adecuada de las dos longitudes de ciclo de los días 20 y 30 refleja la tendencia del mercado y no es demasiado sensible para generar una señal errónea.

Análisis de las ventajas

Las ventajas de esta estrategia se reflejan principalmente en los siguientes aspectos:

  1. La lógica de la estrategia es simple, clara, fácil de entender y de implementar, adecuada para el aprendizaje de los principiantes.
  2. El comercio a la baja, evitando la contracción, puede reducir las pérdidas innecesarias;
  3. La media móvil tiene un efecto de filtración que elimina el ruido de la situación y evita la generación de señales falsas.
  4. La configuración de los parámetros de ciclo es razonable y no es demasiado sensible para afectar la estabilidad de la estrategia.

Análisis de riesgos

El principal riesgo de esta estrategia es:

  1. Los movimientos de las medias móviles se cruzan con frecuencia en momentos de crisis, lo que puede generar más órdenes de suspensión.
  2. En el caso de las tendencias, las medias móviles se quedan atrás y pueden perder parte de sus ganancias.
  3. Si los parámetros no se establecen a tiempo, la estabilidad de la estrategia se verá afectada.

Respuesta:

  1. Ajustar el ciclo de las medias móviles, empleando técnicas como las medias móviles triangulares para suavizar la curva y reducir la frecuencia de cruce;
  2. Para ayudar a los demás indicadores a determinar tendencias y evitar el comercio en situaciones de crisis;
  3. Optimización de los parámetros, búsqueda de la combinación óptima de parámetros.

Dirección de optimización

La estrategia se puede optimizar principalmente en los siguientes aspectos:

  1. Experimentar con diferentes tipos de promedios móviles, como promedios móviles ponderados, promedios móviles triangulares, etc.
  2. El aumento de otros indicadores técnicos para evitar la generación de señales de negociación en mercados convulsionados;
  3. Para determinar las tendencias de los mercados, se utilizan métodos de análisis técnico, como la teoría de las ondas y la teoría de los canales.
  4. Parámetros de optimización en tiempo real de modelos como el aprendizaje automático.
  5. La combinación de herramientas cuantitativas y la adopción de estrategias de stop-loss para optimizar la gestión de fondos.

Resumir

El sistema de cruce de medias móviles es una estrategia de seguimiento de tendencias simple y eficaz, con principios claros y fáciles de entender, muy adecuada para los principiantes. La estrategia se basa principalmente en la media móvil para formar señales de negociación y obtener ganancias a través de la negociación progresiva. Se puede optimizar en muchos aspectos para que la estrategia sea más estable y eficiente.

Código Fuente de la Estrategia
/*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)