Esta estratégia usa o indicador CCI e o indicador de momentum combinados com o indicador RSI para identificar tendências de mercado e entrar quando a lacuna aparece na zona de sobrecompra / sobrevenda.
Em primeiro lugar, a estratégia determina os sinais longos e curtos pelo indicador CCI ou pelo indicador de dinâmica que atravessa a linha 0/abaixo.
Além disso, a estratégia pode optar por determinar as divergências RSI de alta/baixa para garantir sinais mais confiáveis.
Quando o CCI ou impulso desencadeia o sinal longo e o RSI está na zona de sobrevenda, a estratégia verificará se o alto e o baixo anteriores estão acima da linha média da Banda de Bollinger.
Assim, a estratégia utiliza indicadores de tendência e oscilação, para entrar em uma tendência cedo e evitar uma falha de ruptura com a faixa de reversão média.
A combinação de indicadores de tendência e oscilação pode entrar na tendência mais cedo e evitar posições desnecessárias no mercado de intervalo.
Usando a média da banda de Bollinger com as diferenças de preço filtra falhas efetivamente.
A verificação do RSI histórico evita gerar sinais comerciais errados.
Negociação totalmente automatizada sem interferência manual, adequada para negociação por algoritmos.
O ajustamento flexível dos parâmetros adapta-se aos diferentes produtos comerciais.
Parar perdas e tomar riscos de controle de lucro de forma eficaz.
Os parâmetros incorretos da faixa de Bollinger podem causar uma identificação inválida da reversão da média.
Os parâmetros errados do indicador podem gerar muitos sinais falsos.
A ruptura fracassada precisa de uma parada de perda oportuna quando o preço recuar para a média.
A falta de liquidez pode causar uma negociação de breakout ineficaz.
Assegurar dados históricos suficientes para evitar uma má adaptação da curva.
Preste atenção às sessões de negociação para evitar falhas.
Otimizar os parâmetros das bandas de Bollinger para um intervalo de reversão média mais estável.
Testar parâmetros em diferentes produtos para melhor otimização.
Adicionar dimensionamento de posição para evitar posições individuais de grande porte.
Adicionar filtro de sessão de negociação para negociar principalmente em horas ativas.
Incorporar modelos de aprendizagem de máquina para gerar sinais mais inteligentes.
Integrar mais fontes de dados para determinar a tendência geral do mercado.
Adicionar mais indicadores para formar um conjunto robusto de indicadores.
Esta estratégia integra indicadores de tendência e oscilação para capturar tendências cedo. Com a média da banda de Bollinger e as lacunas de preço, evita falhas de ruptura efetivamente. Parâmetros flexíveis se adaptam a diferentes produtos com ótimos resultados de backtest. Os próximos passos são otimizar os parâmetros e o conjunto do modelo para mais robustez e alcançar retornos excessivos consistentes a longo prazo.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='BroTheJo Strategy', shorttitle='BTJ', overlay=true) // Input settings ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum']) ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length') useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence') rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level') rsiOversold = input.int(35, minval=1, title='RSI Oversold Level') rsiLength = input.int(14, minval=1, title='RSI Length') plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart') emaPeriod = input(200, title='Lookback Period (EMA)') bandMultiplier = input.float(1.6, title='Outer Bands Multiplier') // CCI and Momentum calculation momLength = ccimomCross == 'Momentum' ? ccimomLength : 10 mom = close - close[momLength] cci = ta.cci(close, ccimomLength) ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0) ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci) // RSI calculation src = close up = ta.rma(math.max(ta.change(src), 0), rsiLength) down = ta.rma(-math.min(ta.change(src), 0), rsiLength) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought // Regular Divergence Conditions bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2] bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2] // Mean Reversion Indicator meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na // Entry Conditions prevHigh = ta.highest(high, 1) prevLow = ta.lowest(low, 1) longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion) shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion) // Plotting oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) // Strategy logic if (longEntryCondition) strategy.entry("Buy", strategy.long) if (shortEntryCondition) strategy.entry("Sell", strategy.short) // Close all open positions when outside of bands closeAll = (high >= upperBand) or (low <= lowerBand) if (closeAll) strategy.close_all("Take Profit/Cut Loss") // Plotting plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1) plot(meanReversion, title='Mean', color=color.gray, linewidth=1) plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)