Esta estrategia genera señales de entrada largas o cortas cuando el promedio móvil simple rápido de 30 días y el promedio móvil simple lento de 33 días del precio de la acción se cruzan.
El núcleo de esta estrategia es calcular el MA rápido de 30 días y el MA lento de 33 días. La línea rápida puede responder a los cambios de precio más rápido, mientras que la línea lenta tiene un mejor efecto de filtrado. Cuando la línea rápida rompe la línea lenta hacia arriba, se genera una señal de compra. Esto indica que el precio comienza a subir y la línea rápida ha respondido mientras que la línea lenta todavía está rezagada. Cuando la línea rápida rompe la línea lenta hacia abajo, se genera una señal de venta. Esto indica que el precio comienza a disminuir mientras que la línea rápida ha respondido pero la línea lenta todavía está rezagada.
A través de un diseño de cruce MA rápido y lento, puede generar señales comerciales cuando comienza una nueva tendencia y sale en señales opuestas, capturando efectivamente las tendencias de precios a medio y largo plazo.
La estrategia tiene las siguientes ventajas:
También existen algunos riesgos para esta estrategia:
Los métodos como la optimización de parámetros, el establecimiento del nivel de stop loss, la negociación solo cuando la tendencia es clara, etc. se pueden utilizar para controlar y reducir esos riesgos.
La estrategia se puede optimizar en los siguientes aspectos:
A través de pruebas y optimización, las reglas de estrategia pueden mejorarse continuamente para obtener señales comerciales más confiables en diferentes entornos de mercado.
En resumen, esta estrategia de ruptura de cruce de doble MA es bastante simple y práctica. Al combinar MA rápido y MA lento, puede identificar eficazmente el comienzo de tendencias a medio y largo plazo y generar señales comerciales relativamente confiables. Además, su regla de stop loss es fácil de implementar. Con una optimización adicional, esta estrategia puede convertirse en un valioso sistema cuantitativo a largo plazo.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //future strategy //strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0) //strategy.risk.max_position_size(2) //stock strategy strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000) //strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long. testStartYear = 2010 testStartMonth = 1 testStartDay = 1 testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = 2039 testEndMonth = 1 testEndDay = 1 testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => //true time >= testPeriodStart and time <= testPeriodEnd ? true : false fast_length = 30 slow_length = 33 ema1 = 0.0 ema2 = 0.0 volumeSum1 = sum(volume, fast_length) volumeSum2 = sum(volume, slow_length) //ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1) ema1 := ema(close,fast_length) //ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2) ema2 := ema(close,slow_length) plot(ema1,color=#00ff00, linewidth=3) plot(ema2, color=#ffff00, linewidth=3) go_long = crossover(ema1,ema2) go_short = crossunder(ema1,ema2) if testPeriod() strategy.entry("long_ride", strategy.long, when=go_long) strategy.entry("short_ride", strategy.short,when=go_short) strategy.close("long_ride",when=go_short) strategy.close("short_ride",when=go_long)