Estrategia de negociación de la media móvil de Golden Cross

El autor:¿ Qué pasa?, fecha: 2023-12-11 11:37:36
Las etiquetas:

img

Resumen general

La estrategia de negociación de promedios móviles de la Cruz Dorada es una estrategia de negociación cuantitativa clásica. Esta estrategia utiliza promedios móviles de diferentes períodos para determinar las tendencias del mercado para posiciones largas y cortas. Cuando el promedio móvil a corto plazo cruza por encima del promedio móvil a largo plazo, se considera una señal de compra. Cuando el promedio móvil a corto plazo cruza por debajo del promedio móvil a largo plazo, se considera una señal de venta.

Estrategia lógica

Esta estrategia se basa en tres promedios móviles simples (SMA) de diferentes períodos: 50 días, 100 días y 200 días.

  1. Cuando el promedio móvil de 50 días se cruza por encima del promedio móvil de 100 días, se realiza una operación larga.

  2. Señal de salida: cuando la media móvil de 50 días se cruce por debajo de la media móvil de 100 días, cierre las posiciones; o cuando el precio de cierre esté por debajo de la media móvil de 100 días, salida; o cuando la media móvil de 100 días se cruce por debajo de la media móvil de 200 días, salida.

  3. Tome ganancias y stop loss: fije el retraso de tomar ganancias y stop loss fijo.

Esta estrategia utiliza la capacidad de los promedios móviles para determinar eficazmente las tendencias de precios promedio del mercado.

Ventajas

  1. Simple de implementar, sólo requiere tres medias móviles de diferentes períodos.

  2. Las medias móviles tienen capacidades de filtrado de ruido que reducen el impacto de la aleatoriedad del mercado en las operaciones y hacen que las señales sean más confiables.

  3. Las medias móviles reflejan eficazmente los cambios en la tendencia del precio medio del mercado, utilizando cruces entre líneas a corto y largo plazo para determinar los cambios de tendencia principales.

  4. Los períodos de media móvil pueden ajustarse para diferentes niveles de control de riesgos.

Los riesgos

  1. Puede generar muchas señales falsas. Los cruces frecuentes pueden ocurrir cuando los promedios a corto y largo plazo son demasiado cercanos, lo que resulta en señales excesivamente inválidas.

  2. Las medias móviles responden lentamente a los cambios de precios y no pueden reaccionar instantáneamente a las noticias del mercado y a los eventos importantes.

  3. El filtro de ruido también significa perder beneficios de las fluctuaciones menores del mercado.

  4. Selección de parámetros subjetivos: los períodos de media móvil adecuados son en gran medida subjetivos y dependen del mercado específico.

Oportunidades de mejora

  1. Añadir filtros para reducir las señales falsas, como los filtros de rango de precios para limitar las señales a movimientos por encima de una cierta magnitud.

  2. Incorporar otros indicadores para las estrategias combinadas, que pueden mejorar la precisión de la señal, por ejemplo, los indicadores de volatilidad o volumen.

  3. Añadir módulos de optimización adaptativa para optimizar dinámicamente los períodos de promedio móvil basados en algoritmos de aprendizaje automático, lo que permite la adaptación a las condiciones cambiantes del mercado.

  4. Incorporar modelos avanzados de aprendizaje profundo en lugar de promedios móviles para obtener capacidades superiores de extracción y modelado de características.

Conclusión

La estrategia de trading de media móvil de la Cruz Dorada es una estrategia típica de seguimiento de tendencias. Refleja las tendencias de precios promedio del mercado de manera simple y práctica, adecuada para principiantes. Sin embargo, también tiene algunos defectos que se pueden mejorar mediante la mejora de la calidad de la señal, la combinación con otros indicadores técnicos, la introducción de mecanismos adaptativos, etc. para adaptarse a mercados más complejos. En general, esta es una estrategia con alto valor de referencia y aprendizaje.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
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/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)


Más.