
Descripción: Esta estrategia es una estrategia de negociación clásica basada en el cruce de líneas medias, y el indicador utiliza dos líneas medias, incluidas las medias móviles simples (SMA), las medias móviles indexadas (EMA), las medias móviles ponderadas linealmente (VWMA) y las medias móviles ponderadas por oscilación (HMA).
Principio: La lógica central de la estrategia es el cruce de dos medias. Al calcular las medias de dos parámetros diferentes, se produce una señal de compra cuando la media rápida cruza la media lenta por encima de la media rápida y una señal de venta cuando la media rápida cruza la media lenta por debajo de la media rápida.
Análisis de ventajas: Las ventajas de la estrategia de cruce de líneas de pares son la facilidad de operación, la determinación de tendencias básicas a través de una señal, la selección y ajuste de parámetros sin exceso, muy adecuado para los comerciantes novatos. Además, los diferentes tipos de líneas de pares tienen pruebas, se pueden elegir diferentes combinaciones para optimizar.
Análisis de riesgos: El principal riesgo de esta estrategia es que las estrategias comunes de cruce de medias tienen una gran cantidad de señales falsas, lo que lleva al problema de las pequeñas ganancias en varias posiciones cerradas, lo que afecta a la ganancia general. Además, la configuración de la longitud de la línea media fija rápida y lenta también se desactivará en ciertos períodos.
Dirección de optimización: 1) Prueba diferentes ciclos para determinar la combinación óptima de ciclos de cruce de medias. 2) Considera la introducción de los parámetros del segundo conjunto de medias y el juicio auxiliar del indicador RSI para reducir las señales falsas. 3) Introduce la determinación condicional basada en la variación del incremento del indicador MA en lugar de una simple cruce para obtener un juicio de cruce más confiable.
Resumen: Esta estrategia adopta el marco de la estrategia tradicional de cruce de líneas medias, realiza pruebas de doble línea medias para encontrar la combinación de ciclos medias óptima, y agrega la determinación de los parámetros de pérdida basados en el ROC y el precio medias. En general, es una estrategia de doble línea medias simple y fácil de usar que cumple con la lógica de comercio cuantitativo. Además, una gran cantidad de ideas de optimización también brinda espacio para el desarrollo posterior de esta estrategia.
/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
f_hma(_src, _length)=>
_return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
sma(price, ma1)
else
if (type1 == "EMA")
ema(price, ma1)
else
if (type1 == "VWMA")
vwma(price, ma1)
else
f_hma(price, ma1)
price2 = if (type2 == "SMA")
sma(price, ma2)
else
if (type2 == "EMA")
ema(price, ma2)
else
if (type2 == "VWMA")
vwma(price, ma2)
else
f_hma(price, ma2)
//plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)
longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
strategy.entry("Short", strategy.short)
lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)
ma1up = false
ma1down = false
ma2up = false
ma2down = false
ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])
trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01
if crossover(roc1, trendStrength1)
ma1up := true
ma1down := false
if crossunder(roc1, -trendStrength1)
ma1up := false
ma1down := true
shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
strategy.close("Short")
longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
strategy.close("Long")