Esta estratégia é baseada no indicador de média móvel dinâmica, combinado com bandas de Bollinger e RSI para filtragem de sinais de comércio. Implementa uma tendência seguindo uma estratégia de longo prazo. A estratégia julga a tendência calculando a mudança do preço de fechamento da média móvel dinâmica de Heiken Ashi e a compara com bandas de Bollinger para gerar sinais de comércio. Com o filtro RSI, pode identificar efetivamente pontos explosivos de tendência para rastreamento de tendência.
O núcleo desta estratégia é calcular a mudança do preço de fechamento de Heiken Ashi. Especificamente, ele calcula a diferença entre o MA da barra atual e o MA de duas barras anteriores, em seguida, multiplica por um coeficiente de sensibilidade para obter o valor preciso de mudança do MA.
Em seguida, esse valor de mudança é comparado com a diferença entre a banda superior e a banda inferior das Bandas de Bollinger. Se a mudança de MA for maior do que a diferença BB, ela é considerada uma explosão de tendência. Quando a explosão é positiva, ou seja, a mudança de MA é positiva, ela gera um sinal longo e uma barra verde. Quando a explosão é negativa, ou seja, a mudança de MA é negativa, ela gera um sinal de fechamento e uma barra vermelha.
Além disso, esta estratégia possui um filtro RSI que só permite sinais longos quando o RSI é superior a um limiar, evitando o risco de reversão da tendência.
Os métodos de controlo do risco incluem: ajustamento adequado dos parâmetros de robustez, combinação de outros indicadores para avaliar a inversão da tendência, utilização apenas em tendências claras a longo prazo, etc.
Há algum espaço para a otimização adicional:
Tente diferentes fontes de preços como fechamento, médias móveis, etc para melhor suavização
Ajustar os parâmetros dos períodos MA e BB para otimização em diferentes produtos
Tente relação de relação em vez de coeficiente de sensibilidade para um valor de indicador mais intuitivo
Adicionar outros filtros como linhas de tendência, volume, etc para melhorar a qualidade do sinal
Desenvolver uma estratégia curta baseada em padrões de indicadores
Incorporar mecanismos de stop loss para um melhor controlo dos riscos
No geral, esta é uma tendência relativamente estável após a estratégia. Ele usa média móvel dinâmica para determinar a direção da tendência, BB para identificar pontos explosivos, RSI para filtrar sinais falsos, realizando um sistema de tendência longo. Mas também tem alguns riscos, exigindo ajuste de parâmetros para diferentes produtos e prazos e incapacidade de lucrar com tendências de queda. Há espaço para melhorias adicionais como melhorar a qualidade do sinal, desenvolver uma estratégia curta, adicionar stop loss etc. para alcançar um melhor desempenho.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 ///////////Original Script Courtesy of Lazy_Bear.... Absolute Legend\\\\\\\\\\\\\\\ strategy('SmoothedWaddah', overlay=false, initial_capital=1) sensitivity = input(150, title='Sensitivity') fastLength = input(20, title='MacD FastEMA Length') slowLength = input(40, title='MacD SlowEMA Length') channelLength = input(20, title='BB Channel Length') mult = input(1.5, title='BB Stdev Multiplier') RSI14filter = input(40, title='RSI Value trade filter') ////////////MacD Calculation of price////////////////////////////// calc_macd(source, fastLength, slowLength) => fastMA = ta.ema(source, fastLength) slowMA = ta.ema(source, slowLength) fastMA - slowMA /////////BolingerBand Calculation of Price/////////////////////// calc_BBUpper(source, length, mult) => basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) basis + dev calc_BBLower(source, length, mult) => basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) basis - dev //////heinkenashi chart call for closing price "smoothing mechanism"\\\\\\\\\\\\\\\\\\\\\\\\\\\ point = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) ////////////////////T1 is change in MacD current candle from previous candle Sensitivy amplifies calculation///////////////////// t1 = (calc_macd(point, fastLength, slowLength) - calc_macd(point[1], fastLength, slowLength)) * sensitivity //////////////////////T2 is T1 from two candles prior\\\\\\\\\\\\\\\\\\\\\\\\\\\ t2 = (calc_macd(point[2], fastLength, slowLength) - calc_macd(point[3], fastLength, slowLength)) * sensitivity ////////////////E1 is difference in bolinger band upper and lower...E2 is E1 from one candle prior not needed////////////// e1 = calc_BBUpper(ohlc4, channelLength, mult) - calc_BBLower(ohlc4, channelLength, mult) //e2 = (calc_BBUpper(close[1], channelLength, mult) - calc_BBLower(close[1], channelLength, mult)) //////signal bar printing.. Up if MacD positive .. Down if MacD negative////////// trendUp = t1 >= 0 ? t1 : 0 trendDown = t1 < 0 ? -1 * t1 : 0 ///////plots difference in macD*Sensitivity, color change if increasing or decreasing. //////color is green/lime if explosion is up \ color is red/orange if explosion is down///////// plot(trendUp, style=plot.style_columns, linewidth=1, color=trendUp < trendUp[1] ? color.new(color.lime,45) : color.new(color.green,45), title='UpTrend') plot(trendDown, style=plot.style_columns, linewidth=1, color=trendDown < trendDown[1] ? color.new(color.orange,45) : color.new(color.red,45), title='DownTrend') plot(e1, style=plot.style_line, linewidth=2, color=color.new(#A0522D, 0), title='ExplosionLine') ////////////Entry conditions and Concept///////////////////// ////////////Long Only System. T1 is measuring the distance between MACD EMA's. This is Multiplied ////////////by the sensitivity so that it can be compared to the difference between BollingerBand. /////////////{this could have been a ratio maybe i will work with that in a different script.} /////////////I found that 135-175 sensitivy allows for values to be compared on most charts..... ////////////If the (difference between the EMA)*(Sensitivity) is greater than (BB upper line- BB lower line) ////////////it is considered an explosion in either the downside or the upside.The indicator will print ///////////a bar higher than the trigger line either green or red (up or down respectively)////////////////// longCondition = trendUp > e1 and ta.rsi(close, 14) > RSI14filter if longCondition strategy.entry('up', strategy.long) strategy.close('up', trendDown > e1)