
A ideia principal da estratégia é usar as médias móveis suaves para calcular a média de abertura suave para descobrir a tendência dos preços e fazer mais quando o preço forca com a média de abertura suave e fechar quando forca.
A estratégia começa por definir uma função para calcular a média móvel suave (smoothedMovingAvg), que usa a média móvel do período anterior e o valor mais recente para calcular a média móvel do período atual, com um certo peso.
A função getHAClose é então definida para calcular o preço de fechamento da linha de média em função do preço de abertura, do preço máximo, do preço mínimo e do preço de fechamento.
Na lógica da estratégia principal, primeiro obtemos o preço original dos diferentes períodos, depois calculamos a média móvel suave usando a função SmoothedMovingAvg, e depois calculamos o preço de encerramento de início suave usando a função getHAClose.
Por fim, quando o preço sobe e abre o preço de encerramento, faça mais e baixe a posição de equilíbrio; quando o preço desce e abre o preço de encerramento, faça vazio e suba a posição de equilíbrio
A maior vantagem desta estratégia é que a utilização de médias móveis suaves para calcular a linha de alerta suave permite uma determinação mais precisa da tendência dos preços, filtrando parte do ruído e evitando a produção de sinais errados durante a oscilação. Além disso, a linha de alerta em si tem a vantagem de destacar a tendência e, em combinação com o preço, pode aumentar ainda mais a precisão de julgamento.
A estratégia enfrenta os principais riscos:
Para os riscos acima, podemos reduzir o risco e aumentar a estabilidade da estratégia por meio de métodos como ajustar os parâmetros de suavização, introduzir mecanismos de stop loss e reduzir a posição de negociação individual.
A estratégia também pode ser melhorada nos seguintes aspectos:
Otimizando os pontos acima, pode-se reduzir ainda mais o risco de curva de ajuste da estratégia e aumentar a adaptabilidade e a estabilidade da estratégia.
A estratégia geral é clara e fácil de entender, através do cálculo de uma linha de medição de iluminação suave para julgar a tendência de preços, e, portanto, para fazer a curta e curta. A maior vantagem é que pode filtrar parte do ruído, melhorar a precisão do julgamento do sinal. Mas também existe uma certa dificuldade de otimização de parâmetros e o risco de perder uma rápida reversão.
/*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)