Estrategia de negociación a corto plazo de combinación de doble media móvil y MACD

El autor:¿ Qué pasa?, Fecha: 2023-10-09 16:47:42
Las etiquetas:

Resumen general

Esta estrategia combina dos promedios móviles, un indicador estocástico y el MACD para identificar oportunidades comerciales a corto plazo, que es una estrategia comercial a corto plazo relativamente clásica.

Principio

La estrategia se basa principalmente en los siguientes principios:

  1. Utilice la EMA de 50 y 100 períodos para determinar la dirección de la tendencia. La EMA con un período más corto puede responder rápidamente a los cambios de precios. El cruce de la EMA de 50 períodos por encima de la EMA de 100 períodos representa el establecimiento de una posición larga; el cruce hacia abajo representa el establecimiento de una posición corta.

  2. Utilice la diferencia entre el MACD para determinar los puntos de entrada y salida. Cuando la diferencia cruza por encima de 0, muestra un fortalecimiento del poder alcista y conduce a una entrada larga; cuando cruza por debajo de 0, muestra un fortalecimiento del poder bajista y conduce a una entrada corta.

  3. Combinar el indicador de RSI estocástico para juzgar la situación de sobrecompra y sobreventa. Este indicador combina las ventajas de KDJ y RSI, y puede mostrar bien las condiciones de sobrecompra y sobreventa. Cuando es inferior a 20, el mercado está sobrevendido, y se puede considerar una entrada larga combinando otros indicadores; cuando es superior a 80, el mercado está sobrecomprado y se puede considerar una entrada corta.

  4. Después de determinar la dirección de entrada, si 4 de los 5 candelabros más recientes tienen precios de cierre que tocan los promedios móviles, muestra que hay soporte / resistencia alrededor de los promedios móviles, y las posiciones se pueden abrir.

  5. Utilice stop loss y take profit para gestionar los riesgos.

Ventajas

Las ventajas de esta estrategia incluyen:

  1. La combinación de múltiples indicadores mejora la tasa de ganancia, utilizando promedios móviles, el indicador de sobrecompra / sobreventa y el indicador de impulso juntos.

  2. Los parámetros MACD están optimizados para generar señales de entrada precisas.

  3. Los parámetros estocásticos del RSI están optimizados para identificar bien las condiciones de sobrecompra/sobreventa.

  4. El uso de soporte/resistencia alrededor de las medias móviles para el control de tiempo evita quedar atrapado por falsos breakouts.

  5. Un stop loss y take profit razonables controlan eficazmente los riesgos para cada operación.

Los riesgos

También existen algunos riesgos de esta estrategia:

  1. No evitar completamente las pérdidas causadas por las fugas falsas.

  2. Puede ocurrir una divergencia entre los indicadores, causando señales comerciales inconsistentes.

  3. El stop loss fijo y el take profit pueden no adaptarse a los cambios del mercado.

  4. El código complejo con muchos parámetros es difícil de optimizar.

Las soluciones son:

  1. Optimizar los parámetros para mejorar la calidad de la señal y reducir las probabilidades de fuga falsa.

  2. Establecer prioridades entre los indicadores para evitar conflictos.

  3. Adoptar un stop loss dinámico y obtener ganancias basadas en los rangos ATR.

  4. Simplificar la lógica y extraer parámetros básicos para pruebas y optimización.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Prueba y encuentra las combinaciones óptimas de los períodos de media móvil y los parámetros MACD.

  2. Prueba diferentes indicadores de sobrecompra/sobreventa para reemplazar el RSI estocástico.

  3. Pruebe el stop loss dinámico y tome ganancias, el trailing stop para hacer más inteligente la gestión de riesgos.

  4. Añadir condiciones de filtrado como aumentar el volumen para mejorar la calidad de la señal.

  5. Optimizar la lógica de entrada para evitar rupturas ineficaces, utilizando más indicadores para determinar la tendencia.

  6. Establezca límites de stop loss de acuerdo con el tamaño de la cuenta, número de operaciones por día para controlar los riesgos generales.

Resumen de las actividades

Esta estrategia integra las ventajas de múltiples indicadores, y es muy práctica para el comercio a corto plazo. Al continuar la optimización de parámetros, la lógica de entrada estricta y la mejora de la gestión de riesgos, la estabilidad y la rentabilidad se pueden mejorar aún más.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )

Más.