Esta estratégia é um sistema de negociação de tendência que combina vários indicadores técnicos. Ele usa principalmente o SAR parabólico, a média móvel simples (SMA) e o índice de movimento direcional (DMI) para determinar as tendências e os pontos de entrada do mercado, ao mesmo tempo em que otimiza as saídas por meio de metas de lucro baseadas em porcentagem e divergência MACD. O conceito central é entrar em posições após confirmar tendências fortes e sair ao atingir metas de lucro pré-definidas ou quando aparecem sinais de reversão da tendência.
A estratégia utiliza um mecanismo de filtragem em várias camadas: 1. Os sinais comerciais iniciais são capturados através de cruzamento SAR 2. A direcção geral da tendência é determinada utilizando uma SMA de 50 períodos 3. O indicador DMI confirma a força e a direcção da tendência 4. As condições de entrada exigem: cruzamento do preço acima do SAR, preço acima do SMA e DMI de alta Mecanismo de saída dupla: lucro-alvo de 3% ou cruzamento de baixa do MACD Indicador ATR para referência de volatilidade de mercado
Esta estratégia constrói um sistema de negociação de tendência relativamente completo através da coordenação de múltiplos indicadores técnicos. Sua força reside na confiabilidade da confirmação do sinal e na flexibilidade do controle de riscos. Embora existam riscos de atraso inerentes, a estratégia mantém um bom valor prático através da otimização de parâmetros e mecanismos de gerenciamento dinâmicos. Através da otimização e melhoria contínua, esta estratégia pode servir como uma ferramenta de negociação robusta.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-09 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Swing Trading Strategy with DMI", overlay=true) // Define parameters sarStart = input.float(0.02, title="SAR Start") sarIncrement = input.float(0.02, title="SAR Increment") sarMax = input.float(0.2, title="SAR Max") atrLength = input.int(10, title="ATR Length") macdShort = input.int(12, title="MACD Short Length") macdLong = input.int(26, title="MACD Long Length") macdSignal = input.int(9, title="MACD Signal Length") smaLength = input.int(50, title="SMA Length") dmiLength = input.int(14, title="DMI Length") adxSmoothing = input.int(14, title="ADX Smoothing") // Smoothing period for ADX targetProfitPercentage = input.float(3.0, title="Target Profit Percentage") // Calculate SAR sar = ta.sar(sarStart, sarIncrement, sarMax) // Calculate ATR atr = ta.atr(atrLength) // Calculate MACD [macdLine, macdSignalLine, _] = ta.macd(close, macdShort, macdLong, macdSignal) // Calculate SMA sma = ta.sma(close, smaLength) bullishTrend = close > sma // Calculate DMI [plusDI, minusDI, adx] = ta.dmi(dmiLength, adxSmoothing) // Specify ADX smoothing period // Determine if DMI is bullish dmiBullish = plusDI > minusDI // Define buy signal buySignal = ta.crossover(close, sar) and bullishTrend and dmiBullish // Track buy price and position state var float buyPrice = na var bool inPosition = false // Enter position if (buySignal and not inPosition) buyPrice := close inPosition := true strategy.entry("Buy", strategy.long) // Define target price (3% above the buy price) targetPrice = na(buyPrice) ? na : buyPrice * (1 + targetProfitPercentage / 100) // Define MACD sell signal macdSellSignal = ta.crossunder(macdLine, macdSignalLine) // Define sell signal sellSignal = inPosition and (close >= targetPrice or macdSellSignal) // Exit position if (sellSignal) inPosition := false strategy.exit("Sell", "Buy", limit=targetPrice) // Plot SAR on the chart plot(sar, color=color.red, style=plot.style_cross, linewidth=2) // Plot SMA (optional, for visualizing the trend) plot(sma, color=color.blue, title="SMA") // Plot DMI +DI and -DI plot(plusDI, color=color.green, title="+DI") plot(minusDI, color=color.red, title="-DI") // Plot buy signal on the chart //plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") // Plot sell signal on the chart //plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Optional: Plot background color for buy and sell signals bgcolor(buySignal ? color.new(color.green, 90) : na, title="Buy Signal Background") bgcolor(sellSignal ? color.new(color.red, 90) : na, title="Sell Signal Background")