Sumber dimuat naik... memuat...

Adaptive Multi-Strategy Dynamic Switching System: Strategi Dagangan Kuantitatif yang menggabungkan trend berikut dan rentang osilasi

Penulis:ChaoZhang, Tarikh: 2025-01-17 16:02:23
Tag:SMABBRSIMA

 Adaptive Multi-Strategy Dynamic Switching System: A Quantitative Trading Strategy Combining Trend Following and Range Oscillation

Ringkasan

Strategi ini adalah sistem dagangan adaptif yang menggabungkan beberapa penunjuk analisis teknikal dan beralih antara strategi dagangan yang berbeza dengan mengenal pasti keadaan pasaran secara dinamik. Sistem ini terutamanya berdasarkan Moving Average (MA), Bollinger Bands (BB), dan Indeks Kekuatan Relatif (RSI), secara automatik memilih kaedah dagangan yang paling sesuai mengikut trend pasaran dan ciri-ciri osilasi julat. Strategi ini melaksanakan penyelesaian pengurusan risiko yang berlainan untuk pasaran trend dan julat dengan menetapkan parameter mengambil keuntungan dan stop-loss yang berbeza.

Prinsip Strategi

Strategi ini menggunakan purata bergerak 50-period dan 20-period untuk menentukan trend pasaran, digabungkan dengan Bollinger Bands dan RSI untuk mengenal pasti kawasan overbought dan oversold. Di pasaran trend, sistem ini terutamanya berdagang berdasarkan hubungan harga dengan purata bergerak perlahan dan persilangan antara garis cepat dan perlahan; di pasaran berkisar, ia terutamanya berdagang pada breakout Bollinger Bands dan isyarat RSI overbought / oversold. Sistem secara automatik menyesuaikan tahap mengambil keuntungan mengikut keadaan pasaran, menggunakan 6% untuk pasaran trend dan 4% untuk pasaran berkisar, dengan stop-loss seragam 2% untuk kawalan risiko.

Kelebihan Strategi

  1. Keupayaan pasaran yang kuat: Mengubah secara automatik strategi dagangan berdasarkan persekitaran pasaran yang berbeza, meningkatkan kestabilan sistem
  2. Pengurusan risiko yang komprehensif: Menggunakan nisbah mengambil keuntungan yang berbeza untuk pasaran trend dan pelbagai, lebih sesuai dengan ciri pasaran
  3. Pengesahan isyarat berbilang dimensi: Meningkatkan kebolehpercayaan isyarat dagangan melalui pengesahan silang pelbagai penunjuk teknikal
  4. Tahap automatik yang tinggi: Pengoperasian automatik sepenuhnya tanpa campur tangan manual, mengurangkan kesilapan daripada pertimbangan subjektif

Risiko Strategi

  1. Sensitiviti parameter: Prestasi strategi dipengaruhi oleh pemilihan pelbagai parameter penunjuk teknikal, yang memerlukan pengoptimuman parameter yang menyeluruh
  2. Kelewatan peralihan pasaran: Pengenalan keadaan pasaran mungkin mempunyai latensi, mempengaruhi prestasi strategi
  3. Risiko isyarat palsu: Boleh menghasilkan isyarat perdagangan palsu di pasaran yang tidak menentu
  4. Pertimbangan kos urus niaga: Perubahan strategi yang kerap boleh mengakibatkan kos dagangan yang tinggi

Arahan Pengoptimuman Strategi

  1. Memasukkan penunjuk jumlah: Tambah analisis jumlah kepada penunjuk teknikal yang sedia ada untuk meningkatkan kebolehpercayaan isyarat
  2. Mengoptimumkan pengenalan keadaan pasaran: Pertimbangkan untuk memperkenalkan penunjuk kekuatan trend seperti ATR dan ADX untuk meningkatkan ketepatan penilaian keadaan pasaran
  3. Penyesuaian parameter dinamik: Sesuaikan parameter mengambil keuntungan dan hentian kerugian secara automatik berdasarkan turun naik pasaran untuk meningkatkan kesesuaian strategi
  4. Tambah mekanisme penapisan: Rancang syarat perdagangan yang lebih ketat untuk mengurangkan isyarat palsu

Ringkasan

Strategi ini membina sistem perdagangan adaptif yang mampu menyesuaikan diri dengan persekitaran pasaran yang berbeza dengan menggabungkan beberapa penunjuk teknikal klasik. Walaupun mengekalkan kesederhanaan operasi, sistem ini mencapai pengenalan keadaan pasaran yang dinamik dan menukar strategi perdagangan automatik, menunjukkan kepraktisan yang kuat. Melalui tetapan mengambil keuntungan dan berhenti rugi yang berbeza, strategi ini mengekalkan keuntungan yang baik sambil mengawal risiko. Kestabilan dan kebolehpercayaan strategi dapat ditingkatkan lagi dengan memperkenalkan lebih banyak penunjuk teknikal dan mengoptimumkan mekanisme penyesuaian 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)


Berkaitan

Lebih lanjut