
La estrategia utiliza un promedio ponderado lineal indexado (EHMA) más rápido y un canal de adaptación para construir una estrategia de seguimiento de tendencias. Debido a que la velocidad de cálculo de EHMA es más rápida, se puede identificar de manera efectiva la tendencia de los cambios en los precios y evitar que las falsas rupturas generen señales de negociación innecesarias. Al mismo tiempo, el canal de adaptación puede filtrar parte de las oscilaciones de los precios y emitir señales de negociación solo cuando el precio rompe el canal, lo que reduce la probabilidad de operaciones ineficaces y aumenta la probabilidad de obtener ganancias.
El EHMA es un promedio ponderado lineal del índice calculado con el parámetro Period. El EHMA es rápido y eficaz en el seguimiento de las tendencias de los cambios en los precios.
De acuerdo con el parámetro RangeWidth, se extiende un canal de adaptación por encima y por debajo de la EHMA. Se considera que la tendencia cambia y se emite una señal de negociación solo cuando el precio está por encima de la línea de canal superior o por debajo de la línea de canal inferior.
Determina la relación entre el precio y el canal. El precio aumenta cuando se usa en la línea de canal y se vacía cuando se usa en la línea de canal. El precio disminuye cuando se usa en la línea de canal y se vacía cuando se usa en la línea de canal.
La estrategia tiene las siguientes ventajas en comparación con la estrategia de promedio móvil común:
El algoritmo EHMA calcula el promedio. La respuesta de EHMA a las tendencias de cambio de precios es más sensible y permite identificar con eficacia los cambios de tendencia y evitar falsas rupturas que causan transacciones innecesarias.
Los canales de adaptación pueden filtrar eficazmente las fluctuaciones de precios. La señal de negociación solo se genera cuando el precio determina un cambio de tendencia. Se pueden filtrar algunas transacciones no efectivas y aumentar la probabilidad de ganar.
El ancho de canal se puede ajustar con flexibilidad para adaptarse a diferentes entornos de mercado. El ancho de canal puede filtrar más oscilaciones y reducir la frecuencia de las transacciones; el estrecho de canal puede identificar los cambios de tendencia antes y aumentar la frecuencia de las transacciones.
La estrategia también tiene los siguientes riesgos:
Aún no es posible evitar completamente los false breaks. Los precios pueden ser discontinuos, directamente por encima o por debajo de la banda de conducción. Se necesitan ajustes adecuados de los parámetros para controlar el riesgo.
Si el canal es demasiado amplio, se pueden perder algunas oportunidades de transacción. El canal se puede estrechar adecuadamente para aumentar la sensibilidad.
Si el canal es demasiado estrecho, aumenta el número de transacciones no válidas. Se puede ampliar adecuadamente el ancho del canal para mejorar la estabilidad.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimización del parámetro Period. Ajuste el ciclo de cálculo de la media para adaptarse a las características de las diferentes variedades y gráficos periódicos.
Parámetro de optimización RangeWidth. Ajuste el rango de los canales según la volatilidad del mercado y las preferencias de riesgo personales.
Aumentar las estrategias de stop loss. Establecer un punto de stop loss razonable durante el proceso de mantenimiento de la posición y controlar eficazmente la pérdida máxima de una sola operación.
En combinación con otros indicadores para filtrar las entradas. Por ejemplo, aumentar el volumen de transacciones y reducir la ineficacia de las entradas.
Aplicación de variedades múltiples y optimización de parámetros. Prueba en más variedades y períodos, optimiza los parámetros generales.
La estrategia integra el indicador EHMA y el indicador de la vía de adaptación, formando una estrategia de seguimiento de tendencias. Puede identificar eficazmente las tendencias del mercado, al tiempo que filtra las fluctuaciones de los precios y evita las transacciones innecesarias. Después de una serie de optimizaciones de parámetros y control de riesgos, puede obtener ganancias estables en varias variedades y ciclos.
/*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)