Estrategia de negociación cruzada de media móvil optimizada de Golden Cross

El autor:¿ Qué pasa?, Fecha: 2023-12-19 13:37:33
Las etiquetas:

img

Resumen general

Esta estrategia optimiza la estrategia de cruce de media móvil convencional estableciendo tres medias móviles con períodos diferentes, construyendo un patrón de cruz dorada con medias móviles de 9 períodos, 50 períodos y 100 períodos.

Estrategia lógica

La estrategia utiliza tres promedios móviles con períodos de 9, 50 y 100. El MA de 9 períodos es el MA a corto plazo, el MA de 50 períodos es el MA a mediano plazo y el MA de 100 períodos es el MA a largo plazo. Las señales de negociación se generan por el cruce entre el MA a corto plazo y el MA a mediano plazo.

Análisis de ventajas

En comparación con la estrategia de cruce de media móvil doble convencional, esta estrategia agrega la condición de juzgar las tendencias a medio y largo plazo antes de generar señales comerciales, lo que puede filtrar efectivamente algunas señales inválidas. Cuando las tendencias a largo plazo no son claras, la estrategia no generará señales, evitando quedar atrapada en la consolidación. Al mismo tiempo, esta estrategia es adecuada para capturar los movimientos de tendencia a corto y mediano plazo, reduciendo la posibilidad de entrada agresiva.

Análisis de riesgos

Cuando se establecen parámetros para esta estrategia, la combinación de períodos de promedio móvil debe ajustarse. Las diferentes combinaciones de períodos tendrán un impacto en la efectividad de la estrategia. Si los parámetros del período no se establecen correctamente, existe el riesgo de generar demasiadas señales falsas. Además, los operadores deben ser conscientes de los riesgos sistémicos potenciales y detener las pérdidas a tiempo para mitigar los riesgos.

Direcciones de optimización

Considerar la incorporación de otros indicadores para ayudar a juzgar las tendencias del mercado, como el MACD, el BOLL, etc., y establecer condiciones de entrada más estrictas, o incorporar indicadores de volatilidad para construir medias móviles adaptativas para que los parámetros puedan ajustarse automáticamente en función de las condiciones del mercado para optimizar aún más la estrategia.

Conclusión

Basada en el cruce de media móvil doble convencional, esta estrategia agrega el juicio y las condiciones de filtro de MA a largo plazo, que pueden filtrar eficazmente las señales falsas y es adecuada para capturar los movimientos de tendencia a corto y mediano plazo. Es una estrategia simple y práctica de seguimiento de tendencias. Sin embargo, los operadores aún necesitan prestar atención a la optimización de parámetros y riesgos sistémicos, y formular estrategias científicas de gestión de riesgos.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Input
switch1=input(true, title="Enable Bar Color?")
switch2=input(false, title="Show Fast Moving Average")
switch3=input(true, title="Show Slow Moving Average")

//Calculate Moving Averages
movingaverage_fast = sma(close, input(9))
movingaverage_slow = sma(close, input(100))
movingaverage_normal= sma(close, input(50))

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// Calculation
bullish_cross = crossover(movingaverage_fast, movingaverage_normal)
bearish_cross = crossunder(movingaverage_fast, movingaverage_normal)

//Entry and Exit
if bullish_cross and window() and movingaverage_slow > movingaverage_normal
    strategy.entry("long", strategy.long)

strategy.close("long", when = bearish_cross and window())

// Colors
bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue
barcolor(switch1?bartrendcolor:na)

// Output
plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)

Más.