Estrategia de la gama de EHMA

El autor:¿ Qué pasa?, Fecha: 2022-05-09 23:31:59
Las etiquetas:EHMA

Este guión es una versión modificada del guión de @borserman para el promedio móvil exponencial de Hull Todo el crédito por la EHMA le va a él :)

Además de la EHMA, este script funciona con un rango alrededor de la EHMA (que se puede modificar), en un intento de ser robusto contra señales falsas. Muchas veces una barra se cerrará por debajo de un promedio móvil, solo para revertir nuevamente la siguiente barra, lo que consume sus ganancias.

Con el rango alrededor de la EHMA, la estrategia solo entra en una posición larga / salida corta si una barra cruza por encima del rango superior. Por el contrario, solo entra en una posición corta / salida larga si una barra cruza por debajo del rango inferior. Esto evita posiciones si las barras se comportan agitadas dentro del rango EHMA y solo entra en una posición si el mercado está seguro de su dirección. Dicho esto, los fakeouts todavía son posibles, pero mucho menos frecuentes. Después de haber probado esta estrategia frente a la estrategia EHMA regular (y haber experimentado con varios ajustes), esta versión parece ser mucho más robusta y rentable!

Descargo de responsabilidad Recuerde que el desempeño pasado puede no ser indicativo de resultados futuros. Debido a diversos factores, incluidas las condiciones cambiantes del mercado, la estrategia puede no funcionar tan bien como en las pruebas de retroceso históricas. Este post y el guión no proporcionan ningún consejo financiero.

Prueba posterior

img


/*backtest
start: 2021-05-08 00:00:00
end: 2022-05-07 23:59:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// 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 = "Both", 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)
    

Relacionados

Más.