Esta estratégia é construída com base no indicador DMI, monitorando o cruzamento de +DI e -DI para determinar a direção da tendência dos preços das ações e usando o indicador ADX para identificar a força da tendência, a fim de alcançar o rastreamento da tendência.
Esta estratégia usa dois componentes do indicador DMI: +DI e -DI. +DI mede o ímpeto ascendente. O cruzamento ascendente de +DI sobre -DI indica o fortalecimento do ímpeto ascendente. -DI mede o ímpeto descendente. O cruzamento descendente de -DI abaixo de +DI indica o fortalecimento do ímpeto descendente.
Quando o +DI cruza acima do -DI, uma tendência de alta está emergindo e a estratégia vai longo. Após entrar na posição, um stop loss linear traseiro rastreia uma certa porcentagem do preço mais alto. À medida que o preço recuar, o preço do stop loss diminuirá em conformidade, bloqueando alguns dos lucros anteriores até certo ponto.
Quando -DI cruza abaixo de +DI, uma tendência de baixa assume e a estratégia fecha sua posição. O indicador ADX pode ser usado para identificar a força da tendência. Quanto maior o ADX, mais pronunciada a tendência. Como tal, a estratégia emprega o ADX como um indicador auxiliar para entrada, apenas entrando em uma posição quando o ADX está dentro de um certo intervalo.
Em resumo, esta estratégia capta pontos de inflexão nas tendências de preços para realizar o acompanhamento da tendência da média móvel.
As principais vantagens desta estratégia refletem-se em três aspectos:
O uso do indicador DMI para determinar a direção das tendências de preços é preciso e confiável.
A aplicação do indicador ADX para identificar a força das tendências evita frequentes negociações em mercados agitados, tornando a estratégia mais robusta.
O mecanismo linear de stop trailing pode ajustar dinamicamente as posições de stop loss e sair mais cedo quando as tendências se revertem, bloqueando lucros parciais para controlar efetivamente os riscos.
As regras da estratégia são simples e claras, fáceis de compreender e implementar, adequadas para a negociação algorítmica.
Os principais riscos desta estratégia são:
A possibilidade de o indicador DMI falhar em determinados mercados especiais. O DMI não se aplica a todos os mercados. Pode gerar sinais falsos quando a tendência não é pronunciada.
O risco de a diferença de preço abaixo do nível de stop loss antes de reverter para baixo.
O risco de configurações incorretas de parâmetros ADX. Os parâmetros ADX afetam diretamente os resultados do cronograma da estratégia. O desempenho será afetado se for definido muito alto ou muito baixo.
A facilidade de ser interrompido em uma tendência de alta que avança rapidamente devido ao método de parada de trail linear. Os parâmetros de parada de trail podem ser ajustados com base em situações específicas.
Os riscos podem ser reduzidos ainda mais através do ajuste de parâmetros, perdas de parada rígidas, otimização da arquitetura do programa, etc.
Esta estratégia pode ser otimizada em vários aspectos:
Usar outros indicadores como MACD, KDJ para julgamento auxiliar para melhorar a estabilidade da estratégia.
Teste diferentes métodos de stop loss, tais como curvas de trailing stops, time-based trailing stops, etc.
Adicionar mecanismos de dimensionamento de posições para construir gradualmente posições após a confirmação da direção da tendência, melhorando a rentabilidade.
Incorporar fatores de alta frequência, aprendizado de máquina, etc. para otimizar dinamicamente os parâmetros DMI e ADX para uma maior inteligência.
Adicionar módulos programáticos de controlo de riscos utilizando orçamento de riscos, etc., para gerir rigorosamente o aproveitamento máximo.
Podem ser combinados vários meios para melhorar eficazmente a eficiência, estabilidade e segurança da estratégia.
A lógica geral desta estratégia é clara e fácil de entender, usando o indicador DMI para determinar a direção da tendência de preços e o indicador ADX como um indicador auxiliar da força da tendência, com paradas lineares que controlam efetivamente o risco. A estratégia é relativamente estável, mas ainda exige cautela contra certos riscos. Através de otimização e teste contínuos, melhorias incrementais podem ser feitas na robustez e eficiência da estratégia.
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ //@version=5 //1.0 - 240202 @caddjax strategy(title = "+DI Crossover", overlay=false) //DMI + ADX Chart w/ overlay // © jrregencia lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) len = input.int(6, minval=1, title="DI Length") up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / trur) minus = fixnan(100 * ta.rma(minusDM, len) / trur) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) adxmax = input.int(50, title="ADX Max Buying Area", minval=1, maxval=100) adxmin = input.int(0, title="ADX Min Buying Area", minval=0, maxval=99) //DI cross alert DIPcross = ta.crossover(plus, minus) ? plus : na plotshape(DIPcross, style = shape.cross , color=color.white, location=location.absolute) plot(adx, color=color.rgb(255, 238, 0, 23), title="ADX", linewidth=2) p1 = plot(plus, color=color.rgb(16, 137, 0, 31), title="+DI", linewidth=1) p2 = plot(minus, color=color.rgb(143, 82, 255, 25), title="-DI", linewidth=1) adxmaxl = hline(adxmax, title="ADX MaxLine", color=color.silver, linestyle=hline.style_solid) adxminl = hline(adxmin, title="ADX MinLine", color=color.silver, linestyle=hline.style_solid) fill(p1, p2, title="Cloud Fill", color = plus > minus ? color.teal : color.red, transp=50) fill(adxmaxl, adxminl, title="ADX Fill", color=color.silver, transp=90) // Configure trail stop level with input options (optional) longTrailPerc = input.float(3, title="Trail Long Loss (%)", minval=0.0, step=0.1) * 0.01 // Determine trail stop loss prices longStopPrice = 0.0 // Determine entry condition enterLong = ta.crossover(plus, minus) ? plus : na longStopPrice := if strategy.position_size > 0 stopValue = high[1] * (1 - longTrailPerc) math.max(stopValue, longStopPrice[1]) else 0 // Submit entry orders if enterLong strategy.entry("EL", strategy.long) // Submit exit orders for trail stop loss price if strategy.position_size > 0 strategy.exit("XL TRL STP", stop=longStopPrice)