Este artigo analisa em profundidade uma estratégia de tendência que combina o indicador SuperTrend com um filtro RSI estocástico para melhorar a precisão.
Primeiro, a True Range (TR) e a Average True Range (ATR) são calculadas.
Banda superior = SMA ((fechado, período ATR) + Multipliante ATR * ATR Intervalo inferior = SMA ((fechado, período ATR) - Multipliante ATR * ATR
Uma tendência ascendente é identificada quando se fecha > faixa inferior. Uma tendência descendente é identificada quando se fecha < faixa superior.
Durante a tendência de alta, a SuperTendência é definida na faixa inferior.
Para reduzir os falsos sinais, a SuperTendência é suavizada usando uma média móvel para obter a SuperTendência filtrada.
O valor do RSI é calculado, em seguida, o indicador estocástico é aplicado a ele para gerar o RSI estocástico.
Entrada longa: fechamento de cruzes acima da SuperTrend filtrada na tendência de alta e do RSI estocástico < 80 Introdução curta: Fechar cruzamentos abaixo da SuperTrend filtrada na tendência de baixa e no RSI estocástico > 20
Saída longa: Fechar cruzes abaixo da SuperTendência filtrada na tendência de alta
Saída curta: fechar cruzes acima da SuperTrend filtrada em tendência de queda
Esta estratégia de tendência melhorada tem as seguintes vantagens face às médias móveis simples:
Esta estratégia combina os pontos fortes do SuperTrend e do RSI Estocástico para a identificação eficaz de tendências e sinais comerciais de qualidade, ao mesmo tempo em que torna a estratégia robusta para o ruído do mercado através de mecanismos de filtragem.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved SuperTrend Strategy with Stochastic RSI", shorttitle="IST+StochRSI", overlay=true) // Input parameters atr_length = input(14, title="ATR Length") atr_multiplier = input(1.5, title="ATR Multiplier") filter_length = input(5, title="Filter Length") stoch_length = input(14, title="Stochastic RSI Length") smooth_k = input(3, title="Stochastic RSI %K Smoothing") // Calculate True Range (TR) and Average True Range (ATR) tr = ta.rma(ta.tr, atr_length) atr = ta.rma(tr, atr_length) // Calculate SuperTrend upper_band = ta.sma(close, atr_length) + atr_multiplier * atr lower_band = ta.sma(close, atr_length) - atr_multiplier * atr is_uptrend = close > lower_band is_downtrend = close < upper_band super_trend = is_uptrend ? lower_band : na super_trend := is_downtrend ? upper_band : super_trend // Filter for reducing false signals filtered_super_trend = ta.sma(super_trend, filter_length) // Calculate Stochastic RSI rsi_value = ta.rsi(close, stoch_length) stoch_rsi = ta.sma(ta.stoch(rsi_value, rsi_value, rsi_value, stoch_length), smooth_k) // Entry conditions long_condition = ta.crossover(close, filtered_super_trend) and is_uptrend and stoch_rsi < 80 short_condition = ta.crossunder(close, filtered_super_trend) and is_downtrend and stoch_rsi > 20 // Exit conditions exit_long_condition = ta.crossunder(close, filtered_super_trend) and is_uptrend exit_short_condition = ta.crossover(close, filtered_super_trend) and is_downtrend // Plot SuperTrend and filtered SuperTrend plot(super_trend, color=color.orange, title="SuperTrend", linewidth=2) plot(filtered_super_trend, color=color.blue, title="Filtered SuperTrend", linewidth=2) // Plot Buy and Sell signals plotshape(series=long_condition, title="Buy Signal", color=color.green, style=shape.triangleup, location=location.belowbar) plotshape(series=short_condition, title="Sell Signal", color=color.red, style=shape.triangledown, location=location.abovebar) // Output signals to the console for analysis plotchar(long_condition, "Long Signal", "▲", location.belowbar, color=color.green, size=size.small) plotchar(short_condition, "Short Signal", "▼", location.abovebar, color=color.red, size=size.small) // Strategy entry and exit strategy.entry("Long", strategy.long, when=long_condition) strategy.entry("Short", strategy.short, when=short_condition) strategy.close("Long", when=exit_long_condition) strategy.close("Short", when=exit_short_condition)