La idea principal de esta estrategia es utilizar el promedio móvil suavizado para calcular el Heiken Ashi suavizado para identificar las tendencias de precios, y ir largo cuando el precio tiene una cruz de oro con el Heiken Ashi suavizado, y ir corto cuando hay una cruz de muerte.
La estrategia define primero una función smoothedMovingAvg para calcular la media móvil suavizada, que utiliza el valor de la media móvil del período anterior y el precio más reciente para calcular la media móvil suavizada del período actual sobre la base de ciertos pesos.
Luego define una función getHAClose para calcular el precio de cierre de Heiken Ashi basado en los precios de apertura, alto, bajo y cerrado.
En la lógica de la estrategia principal, primero obtiene los precios originales de diferentes períodos, luego utiliza la función smoothedMovingAvg para calcular el promedio móvil suavizado, y luego calcula el precio de cierre Heiken Ashi suavizado a través de la función getHAClose.
Por último, va largo cuando el precio cruza por encima del precio de cierre Heiken Ashi suavizado, y cierra la posición cuando el precio cruza por debajo de él.
La mayor ventaja de esta estrategia es que mediante el uso de la media móvil suavizada para calcular el Heiken Ashi suavizado, puede determinar con mayor precisión las tendencias de precios y filtrar algo de ruido para evitar generar señales incorrectas durante los períodos agitados.
Los principales riesgos a los que se enfrenta esta estrategia son:
Los parámetros óptimos deben encontrarse a través de pruebas y optimización repetidas.
Cuando los precios fluctúan bruscamente, la media móvil suavizada puede retrasarse en los cambios de precios, lo que resulta en el desencadenamiento de pérdidas de parada o oportunidades de reversión perdidas.
Para hacer frente a los riesgos mencionados anteriormente, se pueden utilizar métodos tales como el ajuste de los parámetros de suavización, la introducción de mecanismos de stop loss, la reducción del tamaño de las posiciones por operación para reducir los riesgos y mejorar la estabilidad de la estrategia.
La estrategia también puede optimizarse en los siguientes aspectos:
Introducir parámetros de suavizado adaptativos para ajustar automáticamente los parámetros cuando aumente la volatilidad del mercado.
Combinar con otros indicadores como filtros para evitar emitir señales erróneas durante las consolidaciones de precios.
Añadir mecanismos de stop loss para controlar la pérdida por operación.
Optimizar los productos comerciales, las sesiones comerciales, etc. para centrarse en los productos y las sesiones con más ventajas.
A través de las optimizaciones anteriores, los riesgos de ajuste de la curva de la estrategia pueden reducirse aún más y mejorar la adaptabilidad y la estabilidad de la estrategia.
La lógica general de esta estrategia es clara y fácil de entender. Al calcular el Heiken Ashi suavizado para determinar las tendencias de precios y hacer posiciones largas y cortas en consecuencia. Su mayor ventaja es poder filtrar algo de ruido y mejorar la precisión del juicio de la señal. Pero también hay ciertas dificultades en la optimización de parámetros y riesgos de perder inversiones rápidas.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Smoothed Heiken Ashi Strategy", overlay=true) // Inputs g_TimeframeSettings = 'Display & Timeframe Settings' time_frame = input.timeframe(title='Timeframe for HA candle calculation', defval='', group=g_TimeframeSettings) g_SmoothedHASettings = 'Smoothed HA Settings' smoothedHALength = input.int(title='HA Price Input Smoothing Length', minval=1, maxval=500, step=1, defval=10, group=g_SmoothedHASettings) // Define a function for calculating the smoothed moving average smoothedMovingAvg(src, len) => smma = 0.0 smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len smma // Function to get Heiken Ashi close getHAClose(o, h, l, c) => ((o + h + l + c) / 4) // Calculate smoothed HA candles smoothedHAOpen = request.security(syminfo.tickerid, time_frame, open) smoothedMA1close = smoothedMovingAvg(request.security(syminfo.tickerid, time_frame, close), smoothedHALength) smoothedHAClose = getHAClose(smoothedHAOpen, smoothedHAOpen, smoothedHAOpen, smoothedMA1close) // Plot Smoothed Heiken Ashi candles plotcandle(open=smoothedHAOpen, high=smoothedHAOpen, low=smoothedHAOpen, close=smoothedHAClose, color=color.new(color.blue, 0), wickcolor=color.new(color.blue, 0)) // Strategy logic longCondition = close > smoothedHAClose shortCondition = close < smoothedHAClose strategy.entry("Buy", strategy.long, when=longCondition) strategy.close("Buy", when=shortCondition) plotshape(series=longCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(series=shortCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar)