
Strategi ini adalah sistem perdagangan beradaptasi sendiri yang menggabungkan trend-following dan perdagangan selang. Sistem ini mengenal pasti keadaan pasaran secara dinamik melalui indikator ADX, menggunakan strategi perdagangan yang berbeza di pasaran yang sedang tren dan di pasaran yang bergolak. Dalam pasaran yang sedang tren, strategi menggunakan isyarat silang purata bergerak yang digabungkan dengan pengesahan RSI dan MACD; dalam pasaran yang bergolak, strategi menggunakan Brinks Breakthrough yang digabungkan dengan isyarat RSI untuk melakukan perdagangan. Sistem ini juga mengintegrasikan mekanisme stop loss dinamik berasaskan ATR untuk mengawal risiko dengan berkesan.
Pusat strategi adalah mekanisme pengenalan keadaan pasaran. Strategi mengikuti trend diaktifkan apabila ADX lebih besar daripada 25 yang dianggap sebagai pasaran yang sedang tren:
Apabila ADX lebih kecil daripada sama dengan 25 yang dinilai sebagai pasaran goyah, aktifkan strategi perdagangan selang:
Penetapan stop loss menggunakan kaedah kelipatan dinamik ATR, dengan stop loss 1.5 kali ATR, dan stop loss 3 kali ATR.
Strategi ini dapat disesuaikan dengan keadaan pasaran yang berbeza melalui pengenalan dinamik keadaan pasaran dan pertukaran strategi yang sesuai. Strategi ini mempunyai kepraktisan yang baik melalui kombinasi pelbagai petunjuk teknikal dan mekanisme kawalan risiko dinamik. Namun, risiko seperti keterlambatan isyarat dan penembusan palsu harus diperhatikan.
/*backtest
start: 2024-09-01 00:00:00
end: 2025-02-19 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Trend vs Range Trading - Fully Fixed for v6", overlay=true)
// 🔹 Moving Averages (SMA 50 & 200)
sma50 = ta.sma(close, 50)
sma200 = ta.sma(close, 200)
// 🔹 Proper ADX Calculation (With Corrected ta.dmi() Parameters)
dmiLength = 14
adxSmoothing = 14
[dmiPlus, dmiMinus, adx] = ta.dmi(dmiLength, adxSmoothing)
// 🔹 Bollinger Bands Calculation (Fixed for v6)
bb_length = 20
bb_mult = 2.0
bb_basis = ta.sma(close, bb_length)
bb_dev = ta.stdev(close, bb_length)
bb_upper = bb_basis + (bb_mult * bb_dev)
bb_lower = bb_basis - (bb_mult * bb_dev)
// 🔹 Additional Indicators (RSI & MACD)
rsi = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
// 🔹 ATR for Stop Loss & Take Profit
atr = ta.atr(14)
stop_loss_mult = 1.5 // Stop Loss Multiplier
take_profit_mult = 3.0 // Take Profit Multiplier
// 🔹 Trend vs Range Market Detection
is_trending = adx > 25
// 🔹 Trend Following Strategy (SMA Cross & Confirmation)
long_condition_trend = is_trending and ta.crossover(sma50, sma200) and rsi > 50 and macdLine > signalLine
short_condition_trend = is_trending and ta.crossunder(sma50, sma200) and rsi < 50 and macdLine < signalLine
// 🔹 Range Trading Strategy (Bollinger Bands & RSI Confirmation)
long_condition_range = not is_trending and ta.crossover(close, bb_lower) and rsi < 40
short_condition_range = not is_trending and ta.crossunder(close, bb_upper) and rsi > 60
// 🔹 Stop Loss & Take Profit Calculations
long_stop_loss = close - (atr * stop_loss_mult)
long_take_profit = close + (atr * take_profit_mult)
short_stop_loss = close + (atr * stop_loss_mult)
short_take_profit = close - (atr * take_profit_mult)
// 🔹 Execute Trades (With Stop Loss & Take Profit)
if long_condition_trend
strategy.entry("Long_Trend", strategy.long)
strategy.exit("Exit_Long_Trend", from_entry="Long_Trend", stop=long_stop_loss, limit=long_take_profit)
if short_condition_trend
strategy.entry("Short_Trend", strategy.short)
strategy.exit("Exit_Short_Trend", from_entry="Short_Trend", stop=short_stop_loss, limit=short_take_profit)
if long_condition_range
strategy.entry("Long_Range", strategy.long)
strategy.exit("Exit_Long_Range", from_entry="Long_Range", stop=long_stop_loss, limit=long_take_profit)
if short_condition_range
strategy.entry("Short_Range", strategy.short)
strategy.exit("Exit_Short_Range", from_entry="Short_Range", stop=short_stop_loss, limit=short_take_profit)
// 🔹 Visual Indicators & Background Color (Trend vs Range)
bgcolor(is_trending ? color.green : color.blue)
// 🔹 Plot Moving Averages & Bollinger Bands
plot(sma50, color=color.blue, title="SMA 50")
plot(sma200, color=color.red, title="SMA 200")
plot(bb_upper, color=color.green, title="BB Upper")
plot(bb_lower, color=color.orange, title="BB Lower")