
Стратегия является системой торговли, которая отслеживает тенденции, объединяя в себе несколько технических показателей. Она использует главным образом параллельные линии (SAR), скользящие средние (SMA) и динамические индикаторы (DMI) для определения рыночных тенденций и времени входа в рынок, а также оптимизирует выход из рынка с помощью процентных стопов и MACD отклонений. Основная идея разработки стратегии заключается в том, чтобы войти в рынок после сильной тенденции и вовремя выйти из рынка, когда достигаются намеченные цели по прибыли или появляются сигналы об обратном тренде.
Стратегия использует многоуровневый механизм фильтрации, чтобы подтвердить торговые сигналы:
Стратегия, используя многочисленные технические показатели, создает относительно полную систему отслеживания тенденций. Ее преимущества заключаются в надежности подтверждения сигналов и гибкости управления рисками. Несмотря на то, что существует определенный риск отставания, общая эффективность стратегии имеет хорошую практическую ценность благодаря оптимизации параметров и включению динамического механизма управления.
/*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")