
La idea principal de esta estrategia es utilizar las medias móviles para calcular el promedio de apertura suave para descubrir la tendencia de los precios, y hacer más cuando el precio se bifurca con el promedio de apertura suave, y hacer un hueco cuando se bifurca.
La estrategia primero define una función para calcular el promedio móvil suave smoothedMovingAvg, que toma el promedio móvil del período anterior y el precio más reciente para calcular el promedio móvil suave del período actual por un peso determinado.
Luego se define una función getHAClose para calcular el precio de cierre de la línea media en función del precio de apertura, el precio máximo, el precio mínimo y el precio de cierre.
En la lógica de la estrategia principal, primero se obtiene el precio original de los diferentes períodos, luego se calcula el promedio móvil suave utilizando la función SmoothedMovingAvg, y luego se calcula el precio de cierre de inicio suave mediante la función getHAClose.
Finalmente, cuando el precio se desliza hacia arriba para iniciar el precio de cierre, se hace más y baja para cerrar; cuando el precio se desliza hacia abajo para iniciar el precio de cierre, se hace vacío y sube para cerrar.
La mayor ventaja de esta estrategia es que se utiliza una media móvil plana para calcular una media de iluminación suave, lo que permite determinar con mayor precisión la tendencia de los precios, filtrar parte del ruido y evitar la generación de señales erróneas en las oscilaciones. Además, la media de iluminación en sí misma tiene la ventaja de resaltar la tendencia, y su uso en combinación con los precios puede mejorar aún más la precisión de juicio.
La estrategia se enfrenta principalmente a los siguientes riesgos:
En respuesta a los riesgos mencionados, podemos reducir el riesgo y mejorar la estabilidad de la estrategia mediante la adaptación de los parámetros de suavización, la introducción de mecanismos de stop loss y la reducción de las posiciones de negociación individuales.
La estrategia también puede ser optimizada en los siguientes aspectos:
A través de la optimización de estos puntos, se puede reducir aún más el riesgo de ajuste curvo de la estrategia y mejorar la adaptabilidad y estabilidad de la estrategia.
La estrategia general es clara y fácil de entender, se puede determinar la tendencia del precio mediante el cálculo de la línea media de iluminación suave y, en consecuencia, se puede tomar medidas de corto o largo plazo. La mayor ventaja es que se puede filtrar parte del ruido y mejorar la precisión de la determinación de la señal. Pero también existe cierta dificultad para optimizar los parámetros y el riesgo de perder una rápida reversión.
/*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)