Estrategia de rango de media móvil exponencial adaptativa

El autor:¿ Qué pasa?, fecha: 2024-02-26 14:58:32
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el promedio móvil de casco exponencial (EHMA) más rápido y un canal adaptativo para construir una tendencia después de la estrategia. Dado que EHMA calcula más rápido, puede identificar eficazmente los cambios de tendencia de precios y evitar operaciones innecesarias causadas por fallas de ruptura. Al mismo tiempo, el canal adaptativo puede filtrar algunas fluctuaciones de precios. Las operaciones solo se activan cuando el precio rompe el canal, reduciendo la probabilidad de operaciones ineficaces y aumentando la rentabilidad.

Principio de la estrategia

  1. Calcular la media móvil ponderada exponencial EHMA basado en el parámetro Período.

  2. Construir un canal adaptativo por encima y por debajo de la EHMA basado en el parámetro RangeWidth. Sólo cuando el precio sube por encima de la línea superior del canal o cae por debajo de la línea inferior del canal, se considera que la tendencia ha cambiado y se activan las señales comerciales.

  3. Determine la relación del precio con el canal. Largo cuando el precio rompe la línea superior, corto cuando rompe la línea inferior. Cierre la posición larga cuando el precio cruza por debajo de la línea superior, cierre la posición corta cuando el precio cruza por encima de la línea inferior.

Análisis de ventajas

En comparación con las estrategias de promedios móviles ordinarios, esta estrategia tiene las siguientes ventajas:

  1. Utilice el algoritmo EHMA para calcular el promedio móvil. EHMA responde de manera más sensible a los cambios de precios y puede identificar los cambios de tendencia de manera efectiva para evitar operaciones innecesarias causadas por falsos breakouts.

  2. El canal adaptativo puede filtrar las fluctuaciones de precios de manera efectiva. Las señales de negociación solo se activan cuando la tendencia del precio ha cambiado firmemente. Esto podría filtrar algunas operaciones ineficaces y mejorar la rentabilidad.

  3. El ancho del canal se puede ajustar de forma flexible para adaptarse a las diferentes condiciones del mercado. Los canales más anchos pueden filtrar más fluctuaciones y reducir la frecuencia de negociación. Los canales más estrechos pueden identificar los cambios de tendencia antes y aumentar la frecuencia de negociación.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Las falsas rupturas aún no se pueden evitar por completo. Los precios pueden romper el canal. Los parámetros deben ajustarse adecuadamente para controlar los riesgos.

  2. Algunas oportunidades comerciales pueden perderse si el canal es demasiado ancho.

  3. Los canales demasiado estrechos pueden aumentar los intercambios ineficaces.

Direcciones de optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Optimizar el parámetro Periodo. Ajustar el ciclo de cálculo de la media móvil para adaptarse a diferentes productos y marcos de tiempo.

  2. Optimice el parámetro de amplitud de rango, ajuste el alcance del canal basado en la volatilidad del mercado y la preferencia personal de riesgo.

  3. Añadir una estrategia de stop loss. Establecer puntos de stop loss razonables durante las posiciones de mantenimiento para controlar eficazmente la pérdida máxima por operación.

  4. Combinar con otros indicadores para filtrar entradas, por ejemplo, añadir volumen para reducir las entradas falsas.

  5. Diversificar las aplicaciones de estrategia y optimizar los parámetros.

Resumen de las actividades

Esta estrategia combina el indicador EHMA y el indicador de canal adaptativo para formar una estrategia de tendencia. Puede identificar las tendencias del mercado de manera efectiva y filtrar las fluctuaciones de precios para evitar operaciones innecesarias. Después de una serie de optimización de parámetros y control de riesgos, se pueden lograr ganancias estables en varios productos y plazos.


/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

Más.