Tendencia siguiendo una estrategia basada en la media móvil y el MACD

El autor:¿ Qué pasa?, Fecha: 2023-11-15 15:58:19
Las etiquetas:

img

Resumen general

Esta estrategia combina los promedios móviles y el indicador MACD para determinar tendencias y generar señales comerciales. Pertenece a una estrategia típica de seguimiento de tendencias. Utiliza dos promedios móviles ZLSMA de diferentes marcos de tiempo para determinar la dirección de la tendencia y un cruce MACD para generar señales específicas de compra y venta. Esto le permite capturar de manera efectiva las tendencias a medio y largo plazo, evitando ser engañado por el ruido del mercado a corto plazo.

Estrategia lógica

La estrategia consta de los siguientes componentes principales:

  1. ZLSMA rápido y ZLSMA lento: La comparación de los promedios móviles de ZLSMA de diferentes marcos de tiempo determina la dirección general de la tendencia. La línea rápida se compone de ZLSMA de 32 períodos, y la línea lenta se compone de ZLSMA de 400 períodos. Cuando la línea rápida cruza por encima de la línea lenta, es una señal alcista, y viceversa.

  2. Indicador MACD: se calcula restando la línea lenta (EMA de 26 períodos) de la línea rápida (EMA de 12 períodos). La línea de señal es una EMA de 9 períodos del MACD. Cuando el MACD cruza por encima de la línea de señal, es una señal de compra, y cuando el MACD cruza por debajo de la línea de señal, es una señal de venta.

  3. Las señales de compra y venta se generan solo cuando la dirección de la tendencia ZLSMA se alinea con las señales de cruce del MACD.

  4. Stop loss y take profit: la estrategia actualmente no incluye la lógica de stop loss y take profit, que necesita una mayor optimización.

La combinación de utilizar medias móviles para determinar la tendencia principal y MACD para cronometrar la entrada puede filtrar eficazmente las fallas y evitar ser engañado por el ruido del mercado a corto plazo.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. Captura de tendencias: el uso de promedios móviles de diferentes marcos de tiempo para determinar la dirección de la tendencia permite operar con la tendencia y capturar las tendencias a medio y largo plazo de manera efectiva.

  2. Filtración del ruido: la aplicación del indicador MACD ayuda a filtrar el ruido del mercado a corto plazo y evitar ser engañado por mercados de pequeños rangos.

  3. Parámetros personalizables: los períodos de media móvil y los parámetros MACD son personalizables y pueden optimizarse para diferentes mercados.

  4. Fácil de aplicar: todos los indicadores utilizados son indicadores técnicos comunes.

  5. Riesgo controlable: con un stop loss y take profit claros, el riesgo y la recompensa de cada operación se pueden controlar.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. Determinación errónea de la tendencia: Si la tendencia principal se determina incorrectamente, todas las operaciones pueden resultar en pérdidas.

  2. Optimización inadecuada de los parámetros: Los parámetros de la media móvil y el MACD deben probarse y optimizarse a fondo, de lo contrario los resultados pueden ser insatisfactorios.

  3. No hay un stop loss: actualmente no existe un stop loss, lo que plantea el riesgo de pérdidas de gran tamaño.

  4. Potencial de ganancias limitado: como una tendencia que sigue la estrategia, el potencial de ganancias de cada comercio es limitado, lo que requiere un gran volumen para aumentar la rentabilidad.

  5. Frecuencia de negociación alta: la ajuste inadecuado de los parámetros puede dar lugar a una frecuencia de negociación excesiva, aumentando los costes de transacción y el deslizamiento.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Agregue un mecanismo de stop loss: Establezca los puntos de stop loss adecuados para controlar estrictamente la pérdida máxima por operación.

  2. Optimizar parámetros: hacer pruebas de retroceso y optimizar para encontrar la combinación óptima de promedio móvil y parámetros MACD.

  3. Menor frecuencia de negociación: ajustar los parámetros para garantizar que las señales de negociación solo se generen cuando la tendencia es pronunciada.

  4. Incorporar otros factores: Se pueden añadir factores como cambios de volumen para confirmar la tendencia y las señales.

  5. Mejorar el tiempo de entrada: Mejorar aún más el uso del MACD para aumentar la precisión de entrada.

  6. Hacer que sea universalmente aplicable: optimizar los parámetros para hacer que la estrategia sea ampliamente aplicable en diferentes productos, ampliando la aplicabilidad.

Conclusión

En conclusión, esta estrategia captura efectivamente las tendencias a medio y largo plazo a través de una combinación simple pero efectiva de promedios móviles y MACD, lo que la convierte en una sólida base de estrategia comercial cuantitativa.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-10 05: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/
// © veryfid

//@version=5
strategy("Stratégie ZLSMA Bruno", shorttitle="Stratégie ZLSMA Bruno", overlay=false)

source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

//res = useCurrentRes ? period : resCustom

fastLength = input(12), 
slowLength=input(26)
signalLength=input(9)

fastMA = ta.ema(source, fastLength)
slowMA = ta.ema(source, slowLength)

macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
hist = macd - signal

outMacD =  macd
outSignal = signal
outHist =  hist

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

//plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? color.lime : color.red : color.red
//signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
//plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
//plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
//plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and ta.cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=plot.style_circles, linewidth=4, color=macd_color)
hline(0, '0 Line', linestyle=hline.style_solid, linewidth=2, color=color.white)

// Paramètres de la ZLSMA
length = input(32, title="Longueur")
offset = input(0, title="Décalage")
src = input(close, title="Source")
lsma = ta.linreg(src, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq = lsma - lsma2
zlsma = lsma + eq

length_slow = input(400, title="Longueur")
offset_slow = input(0, title="Décalage")
lsma_slow = ta.linreg(src, length_slow, offset_slow)
lsma2_slow = ta.linreg(lsma_slow, length_slow, offset_slow)
eq_slow = lsma_slow - lsma2_slow
zlsma_slow = lsma_slow + eq_slow

// Paramètres de la sensibilité
sensitivity = input(0.5, title="Sensibilité")

// Règles de trading
longCondition = zlsma < zlsma_slow and  zlsma_slow < zlsma_slow[1] and zlsma > zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime//ta.crossover(zlsma, close) and ta.crossover(zlsma, zlsma[1]) // Croisement vers le haut
shortCondition = zlsma > zlsma_slow and  zlsma_slow > zlsma_slow[1] and zlsma < zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime   //ta.crossunder(zlsma, close) and ta.crossunder(zlsma, zlsma[1]) // Croisement vers le bas

// Entrée en position
strategy.entry("Achat", strategy.long, when=longCondition)
strategy.entry("Vente", strategy.short, when=shortCondition)
botifySignalZLSMA = longCondition ? 1 : shortCondition ? -1 : 0
plot(botifySignalZLSMA, title='Botify_signal', display=display.none)
// Sortie de position
strategy.close("Achat", when=ta.crossunder(zlsma, close)) // Close the "Achat" position
strategy.close("Vente", when=ta.crossover(zlsma, close)) // Close the "Vente" position


// Tracé de la courbe ZLSMA
plot(zlsma, color=color.yellow, linewidth=3)
plot(zlsma_slow, color=color.red, linewidth=3)



Más.