Estrategia de seguimiento de tendencias basada en el indicador MACD y la media móvil dual


Fecha de creación: 2023-11-02 16:09:08 Última modificación: 2023-11-02 16:09:08
Copiar: 2 Número de Visitas: 821
1
Seguir
1621
Seguidores

Estrategia de seguimiento de tendencias basada en el indicador MACD y la media móvil dual

Descripción general

La idea central de esta estrategia es combinar la línea de paridad y el indicador MACD para determinar la dirección de la tendencia y realizar operaciones de seguimiento de la tendencia. Cuando la línea de paridad corta atraviesa la línea de paridad larga, se considera una oportunidad de bearish; cuando la línea de paridad corta atraviesa la línea de paridad larga, se considera una oportunidad de bearish.

Principio de estrategia

  1. Cálculo de las líneas rápida (EMA) (línea 12), lenta (EMA) (línea 26) y de señal (EMA) (línea 9).

  2. Calcula la línea de columna MACD ((línea rápida-línea lenta) y la línea de señal MACD ((línea 9 de MACD))

  3. Calcular la línea de 50 días y la línea de 200 días como la línea media para juzgar las grandes tendencias.

  4. La línea MACD pasa por el eje 0 como señal de alza y el eje 0 como señal de baja.

  5. En la línea rápida se usa la línea lenta y en la línea media a corto plazo se usa la línea media a largo plazo como señal de avance.

  6. La línea rápida pasa por debajo de la línea lenta y la línea media a corto plazo pasa por debajo de la línea media a largo plazo como señal bajista.

  7. Cada vez que cambia la dirección de la línea media, se permiten varias operaciones de entrada, controladas por el parámetro Max trades after EMA cross.

  8. La entrada se realiza a través de la parada de pérdidas y la liquidación de la posición.

Ventajas estratégicas

  1. En la actualidad, el comercio de divisas está en pleno apogeo en el mundo.

  2. El MACD determina puntos de venta y venta para capturar la conversión de tendencias en el momento oportuno.

  3. La combinación de la línea de doble promedio y el indicador MACD permite capturar el mejor momento de entrada en la tendencia.

  4. La mayoría de las personas que se encuentran en el mercado de divisas tienen un mínimo de un año de experiencia en la negociación.

  5. Control de riesgos de los mecanismos de frenado de deterioro.

  6. Se puede obtener una mejor combinación de parámetros optimizando los parámetros.

Riesgo estratégico

  1. Los errores en el juicio de las grandes tendencias, que resultan en pérdidas en el comercio de la contrapartida. Se puede relajar adecuadamente el requisito de diferencia de línea media para asegurar la captura de las grandes tendencias.

  2. Si hay un retraso en las señales de compra y venta del MACD, esto puede causar entrada prematura o tardía. Los parámetros del MACD se pueden ajustar o combinar con señales de filtración de otros indicadores.

  3. El amortiguador está mal configurado, puede estar demasiado relajado o demasiado apretado, lo que puede causar demasiada pérdida o insuficiente amortiguador. Se requiere una prueba de optimización de parámetros para diferentes variedades.

  4. La optimización de los parámetros es difícil, ya que diferentes variedades y períodos de tiempo requieren diferentes combinaciones de parámetros, lo que requiere una gran cantidad de pruebas previas.

Dirección de optimización de la estrategia

  1. Prueba otros indicadores de línea media para determinar las grandes tendencias, como el indicador de KD.

  2. Intenta combinar con otros indicadores que ayuden a la filtración MACD, como la banda de Brin, el deterioro ATR.

  3. Optimización de los parámetros de parada de pérdida para encontrar la combinación óptima de parámetros para las diferentes pruebas de variedades.

  4. Utiliza la optimización progresiva y la optimización aleatoria para encontrar una combinación de parámetros más eficiente.

  5. Mecanismos adicionales para reducir la frecuencia de las transacciones, como el establecimiento de zonas de no-transacción cerca del eje cero del MACD.

  6. Optimización automática de parámetros y combinación para múltiples variedades.

Resumir

Esta estrategia combina el uso de dos líneas de equilibrio para determinar la tendencia general y las ventajas del MACD para determinar los puntos de venta y venta, formando una estrategia de seguimiento de tendencias más fuerte. La optimización de parámetros y la combinación de indicadores también pueden mejorar aún más el rendimiento de la estrategia. En general, la estrategia tiene una fuerte capacidad de resistencia al riesgo y un espacio de ganancias que vale la pena considerar en el mercado real.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="ComiCo - Joel on Crypto - MACD Scalping", shorttitle="ComiCo - Joel on Crypto - MACD Scalping")
// Getting inputs
slow_length1 = input(title="EMA Trend 1", defval=50)
slow_length2 = input(title="EMA Trend 2 ", defval=200)
fast_length = input(title="MACD Fast Length", defval=12)
slow_length = input(title="MACD Slow Length", defval=26)
signal_length = input.int(title="MACD Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
src = input(title="MACD Source", defval=close)

i_switch = input.string(title="Tick Highlight", defval="Moving average" ,options=["Moving average","Fixed value" ])
i_switch2 = input.string(title="Tick Source", defval="Highest bar" ,options=["Highest bar","Average","Last bar"])

signal_lengthup = input.int(title="Upticks Avg. Length",  minval = 1, maxval = 5000, defval = 72)
signal_lengthdown = input.int(title="Downticks Avg. Length",  minval = 1, maxval = 5000, defval = 72)

signal_lengthMA = input.float(title="Ticks Avg. Multiplier",  minval = 0, maxval = 5000, defval = 2, step = 0.1)

sma_source = "EMA"
sma_signal = "EMA"
// Plot colors

col_grow_above = #26A69A
col_fall_above =#B2DFDB
col_grow_below = #FFCDD2
col_fall_below = #FF5252
// Calculating

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)

time_macd=timeframe.period=="1"?"1": timeframe.period=="3"?"1": timeframe.period=="5"?"1": timeframe.period=="15"?"3":timeframe.period=="30"?"5":timeframe.period=="60"?"15":timeframe.period=="120"?"30":timeframe.period=="240"?"60":timeframe.period=="D"?"240":timeframe.period=="W"?"D":timeframe.period=="M"?"W":timeframe.period=="12M"?"M":timeframe.period



macd = fast_ma - slow_ma
macd1=request.security(syminfo.tickerid, time_macd, macd)
signal = sma_signal == "SMA" ? ta.sma(macd1, signal_length) : ta.ema(macd1, signal_length)

ema50=ta.ema(close,slow_length1)
ema200=ta.ema(close ,slow_length2)

var TradeCounter = 0
MaxCount = input.int(title = "Max trades after EMA cross", minval = 0, maxval = 1000, defval = 3)
bull = ema50>ema200
if bull != bull[1]
    TradeCounter := 0


hist = request.security(syminfo.tickerid, time_macd, macd1 - signal)


f() => [hist[4],hist[3],hist[2],hist[1], hist]
ss=request.security(syminfo.tickerid, time_macd, hist, barmerge.gaps_on,barmerge.lookahead_off)



[ss5,ss4,ss3,ss2,ss1]=request.security(syminfo.tickerid, time_macd, f(), barmerge.gaps_on,barmerge.lookahead_off)



a = array.from(ss5,ss4,ss3,ss2,ss1)

s3=i_switch2=="Highest bar"?(ss>0? array.max(a, 0) : array.min(a, 0)):i_switch2=="Average"?array.avg(a):i_switch2=="Last bar"?ss1:0

saa=timeframe.period == '1'? ss:s3

saa2=timeframe.period == '1'? ss:s3*signal_lengthMA


colorss=(s3>=0 ? (s3[1] < s3 ? col_grow_above : col_fall_above) : (s3[1] < s3 ? col_grow_below : col_fall_below))


saadown = saa2
saaup = saa2

saadown:=saa>=0? saa2:saadown[1]

saaup:=saa<0? saa2:saaup[1]



verr=ta.ema(saadown,signal_lengthup)
dowww=ta.ema(saaup,signal_lengthdown)

ss22=plot(verr, title="Avg. Cloud Upper 1", color=color.new(color.white, 100))
ss33=plot(dowww, title="Avg. Cloud Lower 1", color=color.new(color.white, 100))

fill(ss22, ss33, color.new(color.white, 93), title="Avg. Cloud Background")

fixeduptick = input(title="Fixed Uptick Value", defval=30)
fixeddowntick = input(title="Fixed Downtick Value", defval=-30)
minl = i_switch=="Fixed value"? fixeduptick  :  verr
maxl = i_switch=="Fixed value"? fixeddowntick : dowww 

plot(minl, title="Avg. Cloud Upper 2", color=color.new(color.white, 81))
plot(maxl, title="Avg. Cloud Lower 2", color=color.new(color.white, 81))


colors2= s3<=minl and s3>=maxl ? #2a2e39 : colorss

coro2=s3>0? ema50>ema200 ? #2a2e39 :  colors2 : ema50<ema200 ? #2a2e39: colors2
plot(saa, title="Histogram", style=plot.style_columns, color=coro2)

LimitDiff = input.float(title="Limit Price Difference",  minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
TP = input.float(title="Take Profit",  minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
SL = input.float(title="Stop Loss",  minval = 0, maxval = 0.1, defval = 0.004, step = 0.0005)

minEMAdiff = input.float(title = "Min EMA difference", defval = 100, step = 10)

if #2a2e39 != coro2
    a22 = 0
    if ema50<ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
        LimitPrice = close * (1 + LimitDiff)
        strategy.entry("enter short", strategy.short, limit = LimitPrice)
        strategy.exit("exit short", "enter short", limit = LimitPrice * (1 - TP), stop = LimitPrice * (1 + SL))
        TradeCounter := TradeCounter + 1
    if ema50>ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
        LimitPrice = close * (1 - LimitDiff)
        strategy.entry("enter long", strategy.long, limit = LimitPrice)
        strategy.exit("exit long", "enter long", limit = LimitPrice * (1 + TP), stop = LimitPrice * (1 - SL))
        TradeCounter := TradeCounter + 1

//alertcondition(#2a2e39 != coro2 , title='MACD Tick Alert', message='Joel on Crypto - MACD Tick Alert')