A ideia principal desta estratégia é usar a média móvel suavizada para calcular o Heiken Ashi suavizado para identificar tendências de preços, e ir longo quando o preço tem uma cruz de ouro com o Heiken Ashi suavizado, e ir curto quando há uma cruz de morte.
A estratégia define primeiro uma função smoothedMovingAvg para calcular a média móvel suavizada, que utiliza o valor da média móvel do período anterior e o preço mais recente para calcular a média móvel suavizada do período em curso com base em determinados ponderadores.
Em seguida, define uma função getHAClose para calcular o preço de fechamento Heiken Ashi com base nos preços de abertura, alta, baixa e fechamento.
Na lógica da estratégia principal, primeiro obtém os preços originais de diferentes períodos, em seguida, usa a função smoothedMovingAvg para calcular a média móvel suavizada e, em seguida, calcula o preço de fechamento Heiken Ashi suavizado através da função getHAClose.
Por fim, vai longo quando o preço cruza acima do preço de fechamento Heiken Ashi suavizado e fecha a posição quando o preço cruza abaixo dele.
A maior vantagem desta estratégia é que, usando a média móvel suavizada para calcular o Heiken Ashi suavizado, pode determinar com mais precisão as tendências de preços e filtrar algum ruído para evitar gerar sinais errados durante períodos agitados.
Os principais riscos que esta estratégia enfrenta são:
As configurações incorretas de parâmetros da suavização podem fazer com que a estratégia perca oportunidades de reversão de preço ou gere sinais errados.
Quando os preços flutuam acentuadamente, a média móvel suavizada pode ficar para trás das mudanças de preço, resultando no desencadeamento de stop loss ou perdendo oportunidades de reversão.
Para enfrentar os riscos acima referidos, podem ser utilizados métodos como o ajustamento dos parâmetros de suavização, a introdução de mecanismos de stop loss, a redução do tamanho das posições por transação, para reduzir os riscos e melhorar a estabilidade da estratégia.
A estratégia pode também ser otimizada nos seguintes aspectos:
Introduzir parâmetros de suavização adaptativos para ajustar automaticamente os parâmetros quando a volatilidade do mercado aumenta.
Combinar com outros indicadores como filtros para evitar a emissão de sinais errados durante a consolidação de preços.
Adicione mecanismos de stop loss para controlar a perda por negociação.
Otimizar produtos de negociação, sessões de negociação, etc. para se concentrar em produtos e sessões com as maiores vantagens.
Através das otimizações acima referidas, os riscos de ajustamento da curva da estratégia podem ser ainda mais reduzidos e a sua adaptabilidade e estabilidade podem ser melhoradas.
A lógica geral desta estratégia é clara e fácil de entender. Ao calcular o Heiken Ashi suavizado para determinar as tendências de preços e fazer posições longas e curtas de acordo. Sua maior vantagem é ser capaz de filtrar algum ruído e melhorar a precisão do julgamento do sinal. Mas também há certas dificuldades na otimização de parâmetros e riscos de perda de inversões rápidas. Outras otimizações podem ser feitas através da introdução de mecanismos adaptativos, expansão de combinações de indicadores etc. para que valha a pena uma pesquisa aprofundada.
/*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)