A estratégia de cruzamento de média móvel combina dois poderosos indicadores técnicos, média móvel (MA) e índice direcional médio (ADX), para fornecer aos traders maior precisão técnica.
A estratégia usa o cruzamento dos indicadores MA e ADX como base para as decisões de negociação. Quando o ADX está acima do limiar e o DIdiff (DI+ - DI-) é maior que 0, ele vai longo. Quando o ADX está acima do limiar e o DIdiff é menor que 0, ele sai das posições.
Combinando as vantagens da média móvel e do índice ADX, esta estratégia pode identificar efetivamente a existência e a direção das tendências e reduzir os sinais falsos.
Além disso, esta estratégia é uma estratégia totalmente quantitativa baseada em cálculos de parâmetros com bons resultados de backtesting e desempenho vivo estável, tornando-a adequada para negociação algorítmica.
Esta estratégia é propensa a riscos de negociação durante flutuações significativas do mercado. Quando os preços se movem violentamente e os indicadores não reagem, pode trazer perdas para a conta. Além disso, configurações de parâmetros inadequadas também podem afetar o desempenho da estratégia.
Os parâmetros podem ser otimizados e combinados com outros indicadores de filtragem para reduzir os sinais falsos.
Os seguintes aspectos desta estratégia podem ser otimizados:
Combinar com outros indicadores de filtragem, tais como Bandas de Bollinger, RSI, etc., para melhorar a qualidade do sinal
Otimizar os parâmetros de comprimento da média móvel e ADX para encontrar a combinação de parâmetros ideal
Adicionar mecanismos de stop loss para controlar perdas individuais
Teste diferentes períodos de espera para encontrar o ciclo de espera ideal
/*backtest start: 2024-01-29 00:00:00 end: 2024-02-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Julien_Eche //@version=5 strategy("MA ADX Strategy", overlay=true, default_qty_type=strategy.percent_of_equity) start_date = input(timestamp("1975-01-01T00:00:00"), title="Start Date") end_date = input(timestamp("2099-01-01T00:00:00"), title="End Date") // Indicator Inputs group1 = "MA Parameters" lengthMA = input.int(50, title="MA Length", minval=1, group=group1) sourceMA = input(close, title="MA Source", group=group1) group2 = "ADX Parameters" diLength = input.int(14, title="DI Length", minval=1, group=group2) adxSmoothing = input.int(14, title="ADX Smoothing", minval=1, maxval=50, group=group2) adxMAActive = input.int(15, title="ADX MA Active", minval=1, group=group2) // Directional Movement calculations upwardMovement = ta.change(high) downwardMovement = -ta.change(low) trueRangeSmoothed = ta.rma(ta.atr(diLength), diLength) positiveDM = fixnan(100 * ta.rma(upwardMovement > downwardMovement and upwardMovement > 0 ? upwardMovement : 0, diLength) / trueRangeSmoothed) negativeDM = fixnan(100 * ta.rma(downwardMovement > upwardMovement and downwardMovement > 0 ? downwardMovement : 0, diLength) / trueRangeSmoothed) dmSum = positiveDM + negativeDM // Average Directional Index (ADX) calculation averageDX = 100 * ta.rma(math.abs(positiveDM - negativeDM) / math.max(dmSum, 1), adxSmoothing) // Line color determination lineColor = averageDX > adxMAActive and positiveDM > negativeDM ? color.teal : averageDX > adxMAActive and positiveDM < negativeDM ? color.red : color.gray // Moving Average (MA) calculation maResult = ta.wma(sourceMA, lengthMA) // Plotting the Moving Average with color plot(maResult, color=lineColor, title="MA", linewidth=3) // Strategy logic if (averageDX > adxMAActive and positiveDM > negativeDM) strategy.entry("Buy", strategy.long) if (averageDX > adxMAActive and positiveDM < negativeDM) strategy.close("Buy")