Esta estratégia utiliza os indicadores de ímpeto ADX, RSI e Bollinger Bands para determinar as tendências do mercado e situações de sobrecompra/supervenda, a fim de implementar negociações automatizadas para comprar baixo e vender alto.
Quando o ADX é superior a 32, indica um mercado em tendência.
O indicador RSI determina os níveis de sobrecompra / sobrevenda. Quando o RSI cruza acima de 30, ele sinaliza um mercado sobrevendido. Quando o RSI cruza abaixo de 70, ele sinaliza um mercado sobrecomprado.
As bandas de Bollinger determinam a consolidação e a ruptura. Quando o preço de fechamento se rompe acima da faixa superior, ele sinaliza o fim da consolidação e a ruptura para cima. Quando o preço de fechamento se rompe abaixo da faixa inferior, ele sinaliza o fim da consolidação e a ruptura para baixo.
Com base nos indicadores acima referidos, a estratégia de negociação é definida do seguinte modo:
Condição de compra:
Condição de venda:
Esta estratégia utiliza múltiplos indicadores para determinar as condições do mercado, evitando a probabilidade de erro ao confiar em um único indicador.
Em comparação com o uso de indicadores de tendência sozinhos, esta estratégia pode capturar oportunidades de curto prazo de forma mais oportuna. Em comparação com o uso de osciladores exclusivos, esta estratégia pode entender melhor a direção da tendência. Portanto, mantém a vantagem de rastrear tendências, ao mesmo tempo em que tem a flexibilidade de negociação de reversão média. É uma estratégia quantitativa potencialmente eficiente.
Os principais riscos desta estratégia incluem:
Risco de sinais falsos dos indicadores Os indicadores podem falhar quando os mercados experimentam eventos extremos.
Risco de que as paradas sejam demasiado apertadas: as flutuações de curto prazo do mercado podem afectar a posição se as paradas forem demasiado apertadas.
Se os parâmetros dos indicadores se limitassem a ser adaptados a dados históricos, a estabilidade seria questionável e poderá não se adaptar à evolução da dinâmica do mercado.
Medidas de gestão de riscos:
Intervir manualmente em condições anormais de mercado para pausar a estratégia e evitar perdas por sinais falsos.
Estabelecer uma distância de parada razoável, combinando com médias móveis para determinar níveis de parada, evitando ser parado prematuramente.
Introdução do módulo de ajuste de parâmetros, otimização dinâmica de parâmetros usando a análise Walk Forward para garantir a robustez.
Os principais aspectos para melhorar esta estratégia incluem:
Otimizar os parâmetros dos indicadores, utilizando algoritmos de aprendizagem automática adaptados a cada mercado.
Engenharia de recursos, introduzindo mais indicadores técnicos e modelos de treinamento como SVM para melhorar a precisão do sinal.
Incorporar estratégias de ruptura baseadas nas características de cada mercado, utilizando canais de preços, suportes/resistências, etc., para reforçar a estabilidade.
Otimizar os mecanismos de captação de lucro e de stop loss através da introdução de trailing stops, moving stops, etc., para maximizar os lucros e controlar eficazmente os riscos.
Esta estratégia de negociação quantitativa de médio prazo utiliza múltiplos indicadores técnicos como ADX, RSI e Bollinger Bands para determinar as condições do mercado e realizar negociações quando mudanças estruturais significativas são identificadas. A lógica é clara e interpretável, reduzindo drasticamente a dependência de um único indicador.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("DAX Shooter 5M Strategy", overlay=true) //Creo ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") th = input(title="threshold", type=input.integer, defval=20) dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : up > down and up > 0 ? up : 0 minusDM = na(down) ? na : down > up and down > 0 ? down : 0 truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) adx [plus, minus] = dirmov(dilen) sig = adx(dilen, adxlen) //Creo RSI src = close len = input(7, minval=1, title="Periodo RSI") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) bandainf = input(30, title="Livello Ipervenduto") bandasup = input(70, title="Livello Ipercomprato") //Creo Bande di Bollinger source = close length = input(50, minval=1, title="Periodo BB") mult = input(2.0, minval=0.001, maxval=50, title="Dev BB") basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev plot(basis, color=color.white) p1 = plot(upper, color=color.aqua) p2 = plot(lower, color=color.aqua) fill(p1, p2) //Stabilisco regole di ingresso if crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower strategy.entry("COMPRA", strategy.long, limit=upper, oca_name="DaxShooter", comment="COMPRA") else //strategy.exit("exit", "COMPRA", loss = 90) strategy.cancel(id="COMPRA") if crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper strategy.entry("VENDI", strategy.short, limit=lower, oca_name="DaxShooter",comment="VENDI") else //strategy.exit("exit", "VENDI", loss = 90) strategy.cancel(id="VENDI") //Imposto gli alert buy= crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower sell= crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper alertcondition(buy, title='Segnale Acquisto', message='Compra DAX') alertcondition(sell, title='Segnale Vendita', message='Vendi DAX') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)