Estrategia de interconexión de la EMA doble

El autor:¿ Qué pasa?, Fecha: 2023-11-13 17:35:14
Las etiquetas:

img

Resumen general

Esta estrategia genera señales comerciales basadas en el cruce y el cruce de líneas de EMA rápidas y lentas, pertenecientes a estrategias de seguimiento de tendencias.

Estrategia lógica

La lógica central de esta estrategia incluye principalmente las siguientes partes:

  1. Calcular las EMA rápidas y lentas: utilizar ta.ema() para calcular la EMA rápida de la longitud fastInput y la EMA lenta de la longitud slowInput.

  2. Establezca el rango de tiempo de backtest: UseDateFilter para establecer si se filtrará el rango de tiempo de backtest, y use backtestStartDate y backtestEndDate para establecer las horas de inicio y final.

  3. Generar señales de negociación: Utilice ta.crossover() y ta.crossunder() para comparar EMAs rápidas y lentas, generando señales de compra cuando la EMA rápida cruza la EMA lenta, y señales de venta cuando la EMA rápida cruza la EMA lenta.

  4. Manejar pedidos fuera del rango de tiempo: cancelar pedidos no cumplidos fuera del rango de tiempo de backtest y aplanar todas las posiciones.

  5. Trazar líneas EMA: Trazar líneas EMA rápidas y lentas en el gráfico.

Análisis de ventajas

Se trata de una estrategia muy sencilla de tendencia, con las siguientes ventajas:

  1. Lógica sencilla, fácil de entender e implementar.

  2. La EMA suaviza los datos de precios y reduce el ruido del comercio.

  3. Periodos de EMA personalizables, adaptables a los diferentes entornos de mercado.

  4. Intervalo de tiempo de pruebas posteriores flexible para pruebas de períodos de tiempo específicos.

  5. Condiciones de entrada y salida optimizadas, pueden combinarse con otros indicadores.

Análisis de riesgos

Esta estrategia también tiene algunos riesgos:

  1. La estrategia de doble EMA es cruda, incapaz de adaptarse con flexibilidad a los cambios del mercado.

  2. Riesgo de operaciones frecuentes y repetidas.

  3. Los parámetros EMA incorrectos pueden causar señales de negociación erróneas.

  4. Un intervalo de tiempo de retroexamen irrazonable puede conducir a un sobreajuste.

  5. Riesgo de pérdidas y retiros inevitables.

Los riesgos se pueden gestionar mediante la optimización de parámetros, la filtración de fluctuaciones, el stop loss, etc.

Direcciones de optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Optimizar los períodos de EMA para encontrar la mejor combinación de parámetros.

  2. Añadir otros indicadores para filtrar las operaciones innecesarias.

  3. Añadir stop loss para controlar la pérdida de una sola operación.

  4. Incorpore tendencia, filtros de volatilidad para reducir la frecuencia de las operaciones.

  5. Prueba diferentes productos para encontrar el mejor ajuste.

  6. Utilice el deslizamiento, la comisión para una prueba de retroceso más realista.

Resumen de las actividades

En resumen, esta es una estrategia de cruce dual EMA muy simple con lógica clara al comparar EMAs rápidas y lentas. La ventaja es la implementación simple, pero también tiene problemas como el comercio frecuente, el sobreajuste.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")

// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)


// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " +  
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

// STEP 2. See if current bar falls inside the date range
inTradeWindow = true

// STEP 3. Include the date filter with the entry order conditions

// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
    strategy.entry("buy", strategy.long)

// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
    strategy.close_all(comment="sell")

// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
    strategy.cancel_all()
    strategy.close_all(comment="Date Range Exit")

// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)




Más.