Estrategia combinada de corto plazo de doble media móvil y MACD


Fecha de creación: 2023-10-09 16:47:42 Última modificación: 2023-10-09 16:47:42
Copiar: 0 Número de Visitas: 749
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia combina el uso de doble línea media, indicadores aleatorios y indicadores MACD para identificar oportunidades de negociación en línea corta, y es una estrategia de negociación en línea corta más clásica.

El principio

La estrategia se basa principalmente en los siguientes principios:

  1. Utiliza la línea media de la EMA de 50 y 100 períodos para determinar la dirección de la tendencia. La línea media de la EMA tiene un período más corto y puede responder rápidamente a los cambios en los precios.

  2. Utilice el MACD para determinar el momento de compra y venta. Cuando el MACD se acerca a 0, el valor de la fuerza de la parte superior aumenta, y el MACD se acerca a la parte inferior, y la fuerza de la parte inferior aumenta.

  3. Combinando el indicador RSI estocástico para determinar si se está sobrecomprando o sobrevendido. El indicador combina las ventajas del indicador KDJ y el indicador RSI para mostrar la situación de sobrecompra y sobreventa en el mercado. Cuando el indicador está por debajo de 20, está sobrevendido, combinado con otros indicadores; Cuando el indicador está por encima de 80, está sobrecomprado, combinado con otros indicadores.

  4. Después de determinar la dirección de apertura de la posición, se puede abrir una posición si 4 de las 5 líneas K más recientes tocan la línea media, lo que indica que hay soporte o presión cerca de la línea media.

  5. El uso de stop-loss para administrar el riesgo.

Las ventajas

La estrategia tiene las siguientes ventajas:

  1. La combinación de múltiples indicadores, el uso integral de la línea media, el indicador de sobreventa y el indicador de sobreventa y el indicador de energía, mejoran la tasa de éxito de las operaciones.

  2. El ciclo de la línea media es más corto, lo que permite una rápida captación de la tendencia y la reversión. Optimización de los parámetros MACD para identificar el momento preciso de compra y venta.

  3. Los parámetros del indicador Stochastic RSI están optimizados para identificar mejor los fenómenos de sobreventa y sobrecompra.

  4. El uso de la presión de soporte cerca de la línea media para el control de ritmo, para evitar que se encuentre en una incursión no efectiva.

  5. El objetivo de la estrategia es reducir el riesgo de una sola operación.

El riesgo

La estrategia también tiene sus riesgos:

  1. La pérdida de la falsa brecha no se puede evitar.

  2. Las combinaciones de indicadores múltiples pueden desviarse, lo que puede causar inconsistencias en las señales de negociación.

  3. Los puntos de parada fijos pueden no adaptarse a los cambios en el mercado.

  4. La implementación del código es más compleja, con muchos parámetros, y no es fácil de optimizar.

Las soluciones para los riesgos son:

  1. Optimización de parámetros, mejora de la calidad de la señal, reducción de la probabilidad de falsa brecha.

  2. Establecer prioridades entre indicadores para evitar conflictos de señales.

  3. Permite el seguimiento de la dinámica de la pérdida de frenado y el establecimiento de un rango de frenado de frenado según indicadores como ATR.

  4. Simplificar la lógica del código, extraer los parámetros centrales para su prueba y optimización.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes direcciones:

  1. Prueba con el ciclo de la línea media y los parámetros MACD para encontrar la combinación óptima de parámetros.

  2. Prueba diferentes indicadores de sobreventa y sobrecompra en lugar del RSI estocástico.

  3. Prueba con métodos como el stop loss dinámico y el stop loss móvil para hacer que la gestión de pérdidas y ganancias sea más inteligente.

  4. Añadir condiciones de filtro, como el aumento del volumen de transacciones, para mejorar la calidad de la señal.

  5. Optimización de la lógica de apertura de posiciones para evitar brechas ineficaces. Se pueden introducir más indicadores para juzgar las tendencias.

  6. Establezca límites de stop loss para el tamaño de la cuenta, el número de transacciones diarias, etc., para controlar el riesgo general.

Resumir

Esta estrategia integra las ventajas de varios indicadores y tiene una gran utilidad en el comercio de línea corta. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la optimización continua de los parámetros, la lógica de apertura estricta y la mejora de la estrategia de gestión de pérdidas y ganancias.

Código Fuente de la Estrategia
/*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 )