Strategi ini adalah sistem perdagangan trend-mengikuti yang menggabungkan beberapa penunjuk teknikal. Ia terutamanya menggunakan Parabolic SAR, Purata Bergerak Sederhana (SMA), dan Indeks Pergerakan Arah (DMI) untuk menentukan trend pasaran dan titik kemasukan, sambil mengoptimumkan keluar melalui sasaran keuntungan berasaskan peratusan dan perbezaan MACD. Konsep terasnya adalah untuk memasuki kedudukan selepas mengesahkan trend yang kuat dan keluar apabila mencapai sasaran keuntungan yang ditetapkan sebelumnya atau apabila isyarat pembalikan trend muncul.
Strategi ini menggunakan mekanisme penapisan pelbagai lapisan:
Strategi ini membina sistem perdagangan trend yang agak lengkap melalui penyelarasan pelbagai penunjuk teknikal. Kekuatannya terletak pada kebolehpercayaan pengesahan isyarat dan fleksibiliti kawalan risiko. Walaupun terdapat risiko kelewatan yang melekat, strategi ini mengekalkan nilai praktikal yang baik melalui pengoptimuman parameter dan mekanisme pengurusan dinamik. Melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dapat berfungsi sebagai alat perdagangan yang mantap.
/*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")