Trend reaktor dinamik regresi berbilang teras mengikuti strategi

ATR SMA RSI DR MKR TP SL TS
Tarikh penciptaan: 2025-02-24 09:22:48 Akhirnya diubah suai: 2025-07-21 13:03:01
Salin: 1 Bilangan klik: 313
2
fokus pada
319
Pengikut

Trend reaktor dinamik regresi berbilang teras mengikuti strategi Trend reaktor dinamik regresi berbilang teras mengikuti strategi

Gambaran keseluruhan

Strategi ini adalah sistem pengesanan trend yang menggabungkan Dynamic Reactor dan Multi-Kernel Regression. Ia menangkap trend pasaran dengan menggabungkan saluran ATR, rata-rata SMA, dan Gaussian Regression dengan Epanechnikov Nuclear Regression, dan memfilter isyarat menggunakan RSI. Strategi ini juga merangkumi sistem pengurusan kedudukan yang lengkap, termasuk stop loss dinamik, sasaran keuntungan ganda, dan fungsi pengesanan stop loss.

Prinsip Strategi

Strategi ini terdiri daripada dua bahagian utama. Bahagian pertama ialah Reaktor Dinamik (DR), yang membina saluran harga yang menyesuaikan diri berdasarkan ATR dan SMA. Lebar saluran ditentukan oleh kelipatan ATR, dan kedudukan saluran disesuaikan dengan pergerakan SMA.

Kelebihan Strategik

  1. Adaptif: Dengan menggabungkan reaktor dinamik dan regresi multi-pusat, strategi dapat menyesuaikan diri secara automatik dengan keadaan pasaran dan turun naik yang berbeza.
  2. Pengurusan risiko yang baik: mengandungi pelbagai mekanisme kawalan risiko seperti hentian dinamik, keuntungan bergilir-gilir dan hentian kehilangan.
  3. Kualiti isyarat yang tinggi: Dengan penapisan RSI dan pengesahan silang dua baris, isyarat palsu dapat dikurangkan dengan berkesan.
  4. Kecekapan tinggi: Walaupun menggunakan algoritma regresi teras yang rumit, prestasi strategi dalam masa nyata dijamin dengan mengoptimumkan kaedah pengiraan.

Risiko Strategik

  1. Sensitiviti parameter: Kesan strategi sangat bergantung kepada tetapan parameter seperti ATR, bandwidth fungsi teras, dan lain-lain. Parameter yang tidak betul boleh menyebabkan perdagangan berlebihan atau kehilangan peluang.
  2. Ketinggalan: Mungkin terdapat ketinggalan dalam pergerakan pantas kerana penggunaan purata bergerak dan algoritma regresi.
  3. Kebolehan beradaptasi pasaran: Strategi ini berfungsi dengan baik di pasaran trend, tetapi dalam pasaran bergolak, ia mungkin sering menghasilkan isyarat palsu.
  4. Kompleksiti pengiraan: Pengiraan bahagian pengembalian multi-inti lebih rumit dan perlu memberi perhatian kepada pengoptimuman prestasi dalam persekitaran perdagangan frekuensi tinggi.

Arah pengoptimuman strategi

  1. Parameter penyesuaian diri: mekanisme penyesuaian diri boleh diperkenalkan untuk menyesuaikan secara dinamik kelipatan ATR dan lebar lebar fungsi teras mengikut turun naik pasaran.
  2. Pengoptimuman isyarat: pertimbangkan untuk menambah petunjuk tambahan seperti jumlah jualan, bentuk harga, dan lain-lain untuk meningkatkan kebolehpercayaan isyarat.
  3. Kawalan risiko: nisbah sasaran stop loss dan profit boleh disesuaikan mengikut pergerakan turun naik pasaran.
  4. Penapisan pasaran: Tambah modul untuk mengenal pasti persekitaran pasaran, menggunakan strategi perdagangan yang berbeza dalam keadaan pasaran yang berbeza.

ringkaskan

Ini adalah sistem perdagangan yang lengkap yang menggabungkan kaedah statistik moden dan analisis teknikal tradisional. Strategi ini menunjukkan adaptasi dan kestabilan yang baik melalui kombinasi inovatif reaktor dinamik dan regresi multi-pusat, serta mekanisme pengurusan risiko yang baik. Walaupun terdapat beberapa tempat yang perlu dioptimumkan, dengan penambahbaikan berterusan dan pengoptimuman parameter, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran.

Kod sumber strategi
/*backtest
start: 2024-07-20 00:00:00
end: 2025-07-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":2000000}]
*/

//@version=5
strategy("DR+MKR Signals – Band SL, Multiple TP & Trailing Stop", overlay=true, default_qty_value=10)

// =====================================================================
// PART 1: Optimized Dynamic Reactor
// =====================================================================
atrLength  = input.int(10, "ATR Length", minval=1)         // Lower value for increased sensitivity
smaLength  = input.int(10, "SMA Length", minval=1)         // Lower value for a faster response
multiplier = input.float(1.2, "ATR Multiplier", minval=0.1, step=0.1) // Adjusted for tighter bands

atrValue  = ta.atr(atrLength)
smaValue  = ta.sma(close, smaLength)

basicUpper = smaValue + atrValue * multiplier
basicLower = smaValue - atrValue * multiplier

var float finalUpper = basicUpper
var float finalLower = basicLower
if bar_index > 0
    finalUpper := close[1] > finalUpper[1] ? math.max(basicUpper, finalUpper[1]) : basicUpper
if bar_index > 0
    finalLower := close[1] < finalLower[1] ? math.min(basicLower, finalLower[1]) : basicLower

var int trend = 1
if bar_index > 0
    trend := close > finalUpper[1] ? 1 : close < finalLower[1] ? -1 : nz(trend[1], 1)

drLine = trend == 1 ? finalLower : finalUpper
p_dr   = plot(drLine, color = trend == 1 ? color.green : color.red, title="Dynamic Reactor", linewidth=2)

// =====================================================================
// PART 2: Optimized Multi Kernel Regression
// =====================================================================
regLength = input.int(30, "Regression Period", minval=1)  // Lower value for increased sensitivity
h1        = input.float(5.0, "Gaussian Band (h1)", minval=0.1) // Adjusted for a better fit
h2        = input.float(5.0, "Epanechnikov Band (h2)", minval=0.1)
alpha     = input.float(0.5, "Gaussian Kernel Weight", minval=0, maxval=1)

f_gaussian_regression(bw) =>
    num = 0.0
    den = 0.0
    for i = 0 to regLength - 1
        weight = math.exp(-0.5 * math.pow(i / bw, 2))
        num += close[i] * weight
        den += weight
    num / (den == 0 ? 1 : den)

f_epanechnikov_regression(bw) =>
    num = 0.0
    den = 0.0
    for i = 0 to regLength - 1
        ratio = i / bw
        weight = math.abs(ratio) <= 1 ? (1 - math.pow(ratio, 2)) : 0
        num += close[i] * weight
        den += weight
    num / (den == 0 ? 1 : den)

regGauss = f_gaussian_regression(h1)
regEpan  = f_epanechnikov_regression(h2)
multiKernelRegression = alpha * regGauss + (1 - alpha) * regEpan
p_mkr = plot(multiKernelRegression, color = trend == 1 ? color.green : color.red, title="Multi Kernel Regression", linewidth=2)

fill(p_dr, p_mkr, color = trend == 1 ? color.new(color.green, 80) : color.new(color.red, 80), title="Trend Fill")

// =====================================================================
// PART 3: Buy and Sell Signals + RSI Filter
// =====================================================================
rsi = ta.rsi(close, 14)
buySignal  = ta.crossover(multiKernelRegression, drLine) and rsi < 70
sellSignal = ta.crossunder(multiKernelRegression, drLine) and rsi > 30

plotshape(buySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal")
plotshape(sellSignal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal")

alertcondition(buySignal, title="Buy Alert", message="Buy Signal generated")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal generated")

// =====================================================================
// PART 4: Trade Management – Dynamic Stop Loss & Adaptive Take Profit
// =====================================================================
var float riskValue = na
if strategy.position_size == 0
    riskValue := na

enterLong() =>
    strategy.entry("Long", strategy.long,comment='开多仓')
    close - finalLower

enterShort() =>
    strategy.entry("Short", strategy.short,comment='开空仓')
    finalUpper - close

if (buySignal)
    riskValue := enterLong()

if (sellSignal)
    riskValue := enterShort()

exitLongOrders() =>
    entryPrice = strategy.position_avg_price
    TP1 = entryPrice + riskValue
    strategy.exit("Long_TP1", from_entry="Long", limit=TP1, qty_percent=50, comment="平多仓TP 1:1")
    strategy.exit("Long_TS", from_entry="Long", trail_offset=riskValue * 0.8, trail_points=riskValue * 0.8, comment="平多仓Trailing Stop")

if (strategy.position_size > 0)
    exitLongOrders()

exitShortOrders() =>
    entryPrice = strategy.position_avg_price
    TP1 = entryPrice - riskValue
    strategy.exit("Short_TP1", from_entry="Short", limit=TP1, qty_percent=50, comment="平空仓TP 1:1")
    strategy.exit("Short_TS", from_entry="Short", trail_offset=riskValue * 0.8, trail_points=riskValue * 0.8, comment="平空仓Trailing Stop")

if (strategy.position_size < 0)
    exitShortOrders()