
Strategi ini adalah sistem perdagangan komprehensif pelbagai indikator yang menggabungkan indikator teknikal seperti purata bergerak indeks (EMA), indikator kekuatan relatif (RSI) dan purata gelombang sebenar (ATR), dan memperkenalkan indeks trend purata (ADX) untuk meningkatkan ketepatan penilaian trend. Sistem ini mengesahkan masa untuk meletakkan kedudukan melalui pelbagai isyarat, dan menggunakan ATR untuk menguruskan hentian dan hentian secara dinamik, untuk mengawal risiko dengan berkesan.
Pusat strategi adalah untuk menangkap trend pasaran dan berdagang melalui gabungan pelbagai petunjuk teknikal.
Strategi ini membina satu sistem perdagangan trend-tracking yang lengkap melalui gabungan organik pelbagai petunjuk teknikal. Strategi ini memastikan keselamatan perdagangan melalui kawalan risiko yang ketat, sambil memastikan ketepatan perdagangan. Walaupun terdapat ruang untuk pengoptimuman, kerangka keseluruhan mempunyai nilai dan skalabiliti yang baik.
/*backtest
start: 2025-01-20 00:00:00
end: 2025-01-31 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("Enhanced GBP/USD Strategy with ADX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
// === Input Parameters ===
emaFastLength = input.int(20, title="Fast EMA Length")
emaSlowLength = input.int(50, title="Slow EMA Length")
rsiLength = input.int(14, title="RSI Length")
rsiOverbought = input.int(70, title="RSI Overbought")
rsiOversold = input.int(30, title="RSI Oversold")
atrLength = input.int(14, title="ATR Length")
adxLength = input.int(14, title="ADX Length")
riskToReward = input.float(2.0, title="Risk-Reward Ratio (R:R)")
slMultiplier = input.float(1.5, title="SL Multiplier (ATR)")
// === Indicator Calculations ===
emaFast = ta.ema(close, emaFastLength)
emaSlow = ta.ema(close, emaSlowLength)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrLength)
// === ADX Calculation ===
// Components of ADX
tr = ta.rma(ta.tr, adxLength) // True Range smoothed
plusDM = ta.rma(math.max(high - high[1], 0), adxLength) // +DM
minusDM = ta.rma(math.max(low[1] - low, 0), adxLength) // -DM
plusDI = (plusDM / tr) * 100
minusDI = (minusDM / tr) * 100
dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, adxLength) // Final ADX value
// === Entry Conditions ===
isUptrend = emaFast > emaSlow and adx > 20
isDowntrend = emaFast < emaSlow and adx > 20
buySignal = isUptrend and ta.crossover(rsi, rsiOversold)
sellSignal = isDowntrend and ta.crossunder(rsi, rsiOverbought)
// === Stop-Loss and Take-Profit ===
slDistance = atr * slMultiplier
tpDistance = slDistance * riskToReward
buySL = buySignal ? close - slDistance : na
buyTP = buySignal ? close + tpDistance : na
sellSL = sellSignal ? close + slDistance : na
sellTP = sellSignal ? close - tpDistance : na
// === Execute Trades ===
if buySignal
strategy.entry("Buy", strategy.long)
strategy.exit("Buy TP/SL", from_entry="Buy", stop=buySL, limit=buyTP)
if sellSignal
strategy.entry("Sell", strategy.short)
strategy.exit("Sell TP/SL", from_entry="Sell", stop=sellSL, limit=sellTP)
// === Plotting ===
plot(emaFast, title="Fast EMA", color=color.blue)
plot(emaSlow, title="Slow EMA", color=color.orange)
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
plot(buySL, title="Buy Stop Loss", color=color.red, linewidth=1)
plot(buyTP, title="Buy Take Profit", color=color.green, linewidth=1)
plot(sellSL, title="Sell Stop Loss", color=color.red, linewidth=1)
plot(sellTP, title="Sell Take Profit", color=color.green, linewidth=1)
// === Alerts ===
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected!")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected!")