Chiến lược này là một hệ thống giao dịch theo xu hướng kết hợp nhiều chỉ số kỹ thuật. Nó chủ yếu sử dụng Parabolic SAR, Simple Moving Average (SMA) và Directional Movement Index (DMI) để xác định xu hướng thị trường và điểm nhập cảnh, trong khi tối ưu hóa lối ra thông qua các mục tiêu lợi nhuận dựa trên tỷ lệ phần trăm và chênh lệch MACD. Khái niệm cốt lõi là nhập vị trí sau khi xác nhận xu hướng mạnh và thoát khi đạt được mục tiêu lợi nhuận đã đặt trước hoặc khi các tín hiệu đảo ngược xu hướng xuất hiện.
Chiến lược sử dụng một cơ chế lọc nhiều lớp:
Chiến lược này xây dựng một hệ thống giao dịch theo xu hướng tương đối hoàn chỉnh thông qua sự phối hợp của nhiều chỉ số kỹ thuật. Sức mạnh của nó nằm ở độ tin cậy xác nhận tín hiệu và tính linh hoạt kiểm soát rủi ro. Mặc dù có rủi ro chậm trễ vốn có, chiến lược duy trì giá trị thực tế tốt thông qua tối ưu hóa tham số và cơ chế quản lý năng động. Thông qua tối ưu hóa và cải tiến liên tục, chiến lược này có thể phục vụ như một công cụ giao dịch mạnh mẽ.
/*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")