
Strategi ini ialah sistem perdagangan adaptif yang mengintegrasikan pelbagai penunjuk analisis teknikal dan bertukar antara strategi dagangan yang berbeza dengan mengenal pasti keadaan pasaran secara dinamik. Sistem ini terutamanya berdasarkan tiga penunjuk teknikal: purata bergerak (MA), Bollinger Bands (BB) dan indeks kekuatan relatif (RSI), dan secara automatik memilih kaedah dagangan yang paling sesuai mengikut arah aliran pasaran dan turun naik julat. Strategi ini mengguna pakai penyelesaian pengurusan risiko yang berbeza untuk pasaran trend dan julat dengan menetapkan parameter ambil untung dan henti rugi yang berbeza.
Strategi ini menggunakan purata bergerak 50 tempoh dan 20 tempoh untuk menentukan arah aliran pasaran, dan menggabungkan Bollinger Bands dan penunjuk RSI untuk mengenal pasti kawasan terlebih beli dan terlebih jual. Dalam pasaran trend, sistem berdagang terutamanya berdasarkan perhubungan antara harga dan purata bergerak perlahan dan persilangan garis cepat dan perlahan dalam pasaran julat, ia berdagang terutamanya berdasarkan penembusan sempadan Bollinger Band dan isyarat terlebih beli dan terlebih jual RSI; . Sistem ini secara automatik melaraskan tahap ambil untung mengikut persekitaran pasaran A 6% ambil untung digunakan untuk pasaran trend dan 4% ambil untung digunakan untuk pasaran henti rugi 2% digunakan secara seragam untuk mengawal risiko.
Strategi ini menyepadukan berbilang penunjuk teknikal klasik untuk membina sistem perdagangan adaptif yang boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza. Sambil memastikan operasi mudah, sistem merealisasikan pengenalan dinamik status pasaran dan penukaran automatik strategi dagangan, dan sangat praktikal. Melalui tetapan ambil untung dan henti rugi yang berbeza, strategi mengekalkan keuntungan yang baik sambil mengawal risiko. Pada masa hadapan, kestabilan dan kebolehpercayaan strategi boleh dipertingkatkan lagi dengan memperkenalkan lebih banyak petunjuk teknikal dan mengoptimumkan mekanisme pelarasan parameter.
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=6
strategy("Supply & Demand Test 1 - Enhanced", overlay=true)
// Inputs
ma_length = input.int(50, title="50-period Moving Average Length", minval=1)
ma_length_fast = input.int(20, title="20-period Moving Average Length", minval=1)
bb_length = input.int(20, title="Bollinger Bands Length", minval=1)
bb_std_dev = input.float(2.0, title="Bollinger Bands Std Dev", step=0.1)
rsi_length = input.int(14, title="RSI Length", minval=1)
stop_loss_percent = input.float(0.02, title="Stop Loss Percent", step=0.001, minval=0.001)
take_profit_trend = input.float(0.06, title="Take Profit Percent (Trend)", step=0.001, minval=0.001)
take_profit_range = input.float(0.04, title="Take Profit Percent (Range)", step=0.001, minval=0.001)
// Moving Averages
ma_slow = ta.sma(close, ma_length)
ma_fast = ta.sma(close, ma_length_fast)
// Bollinger Bands
bb_basis = ta.sma(close, bb_length)
bb_dev = ta.stdev(close, bb_length)
bb_upper = bb_basis + bb_std_dev * bb_dev
bb_lower = bb_basis - bb_std_dev * bb_dev
// RSI
rsi = ta.rsi(close, rsi_length)
// Market Conditions
is_trending_up = close > ma_slow
is_trending_down = close < ma_slow
is_range_bound = not (is_trending_up or is_trending_down)
// Entry Conditions
long_trend_entry = is_trending_up and close >= ma_slow * 1.02
short_trend_entry = is_trending_down and close <= ma_slow * 0.98
long_ma_crossover = ta.crossover(ma_fast, ma_slow)
short_ma_crossover = ta.crossunder(ma_fast, ma_slow)
long_range_entry = is_range_bound and close <= bb_lower * 0.97
short_range_entry = is_range_bound and close >= bb_upper * 1.03
long_rsi_entry = is_range_bound and rsi < 30
short_rsi_entry = is_range_bound and rsi > 70
// Entry and Exit Logic
if long_trend_entry
strategy.entry("Long Trend", strategy.long)
strategy.exit("Exit Long Trend", from_entry="Long Trend", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_trend))
alert("Entered Long Trend", alert.freq_once_per_bar)
if short_trend_entry
strategy.entry("Short Trend", strategy.short)
strategy.exit("Exit Short Trend", from_entry="Short Trend", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_trend))
alert("Entered Short Trend", alert.freq_once_per_bar)
if long_ma_crossover
strategy.entry("Long MA Crossover", strategy.long)
strategy.exit("Exit Long MA Crossover", from_entry="Long MA Crossover", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_trend))
alert("Entered Long MA Crossover", alert.freq_once_per_bar)
if short_ma_crossover
strategy.entry("Short MA Crossover", strategy.short)
strategy.exit("Exit Short MA Crossover", from_entry="Short MA Crossover", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_trend))
alert("Entered Short MA Crossover", alert.freq_once_per_bar)
if long_range_entry
strategy.entry("Long Range", strategy.long)
strategy.exit("Exit Long Range", from_entry="Long Range", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_range))
alert("Entered Long Range", alert.freq_once_per_bar)
if short_range_entry
strategy.entry("Short Range", strategy.short)
strategy.exit("Exit Short Range", from_entry="Short Range", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_range))
alert("Entered Short Range", alert.freq_once_per_bar)
if long_rsi_entry
strategy.entry("Long RSI", strategy.long)
strategy.exit("Exit Long RSI", from_entry="Long RSI", stop=close * (1 - stop_loss_percent), limit=close * (1 + take_profit_range))
alert("Entered Long RSI", alert.freq_once_per_bar)
if short_rsi_entry
strategy.entry("Short RSI", strategy.short)
strategy.exit("Exit Short RSI", from_entry="Short RSI", stop=close * (1 + stop_loss_percent), limit=close * (1 - take_profit_range))
alert("Entered Short RSI", alert.freq_once_per_bar)
// Plotting
plot(ma_slow, color=color.blue, title="50-period MA")
plot(ma_fast, color=color.orange, title="20-period MA")
plot(bb_upper, color=color.red, title="Bollinger Upper")
plot(bb_lower, color=color.green, title="Bollinger Lower")
plot(bb_basis, color=color.gray, title="Bollinger Basis")
hline(70, "Overbought (RSI)", color=color.red, linestyle=hline.style_dotted)
hline(30, "Oversold (RSI)", color=color.green, linestyle=hline.style_dotted)