
La estrategia de comercio de cruce de medias móviles es una estrategia de comercio cuantitativa más común. La estrategia se genera mediante el cálculo de medias móviles de diferentes períodos y la generación de señales de comercio en función de su cruce. En concreto, se calcula una media móvil de 4 ciclos, 8 ciclos y 20 ciclos.
La lógica central de esta estrategia es la siguiente:
Mediante este método, utilizamos el cruce entre las diferentes líneas medias periódicas para juzgar las señales del mercado, y al mismo tiempo utilizamos la dirección de las líneas medias periódicas más largas para filtrar las señales erróneas y construir una estrategia de negociación estable.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Las principales soluciones son:
La estrategia puede ser optimizada en los siguientes aspectos:
Optimización del ciclo: determinación de la combinación óptima de ciclo de MA según las diferentes variedades Optimización de stop loss: establece un punto de parada razonable y controla las pérdidas individuales
Fusión de modelos: integración con modelos de aprendizaje profundo como LSTM, RNN y otros para extraer más Alpha
Optimización de la combinación: combinación de estrategias con otros indicadores para construir una combinación de estrategias
La estrategia de cruce de medias móviles es una estrategia de comercio cuantitativa más clásica y comúnmente utilizada. La lógica de la estrategia es simple, fácil de entender y implementar, y tiene cierta estabilidad. Pero también hay algunos problemas, como la generación de falsas señales, la incapacidad de adaptarse a los cambios en el mercado, etc. Estos problemas pueden mejorarse mediante métodos como optimización de parámetros, optimización de stop loss y fusión de modelos. En general, la estrategia de medias móviles puede servir como un módulo básico en la caja de herramientas de la estrategia, combinada con otras estrategias más complejas, para construir una estrategia compleja y estable.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub", overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
//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=.0,default_qty_value=10000)
testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriod() => true
ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)
go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]
go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]
if testPeriod()
strategy.entry("simpleBuy", strategy.long, when=go_long)
strategy.exit("simpleBuy", "simpleSell",when=exit_long)
strategy.entry("simpleSell", strategy.short,when=go_short)
strategy.exit("simpleSell", "simpleSell",when=exit_short)