Strategi mengikuti tren reaktor dinamis regresi multi-inti

ATR SMA RSI DR MKR TP SL TS
Tanggal Pembuatan: 2025-02-24 09:22:48 Akhirnya memodifikasi: 2025-07-21 13:03:01
menyalin: 1 Jumlah klik: 313
2
fokus pada
319
Pengikut

Strategi mengikuti tren reaktor dinamis regresi multi-inti Strategi mengikuti tren reaktor dinamis regresi multi-inti

Ringkasan

Strategi ini adalah sistem pelacakan tren yang menggabungkan Dynamic Reactor dan Multi-Kernel Regression. Strategi ini menangkap tren pasar dengan menggabungkan saluran ATR, rata-rata SMA, dan Gaussian Regression dengan Epanechnikov Nuclear Regression, dan memfilter sinyal menggunakan indikator RSI. Strategi ini juga mencakup sistem manajemen posisi yang lengkap, termasuk stop loss dinamis, target profit ganda, dan fitur pelacakan stop loss.

Prinsip Strategi

Inti dari strategi ini terdiri dari dua bagian utama. Bagian pertama adalah Reaktor Dinamis (DR), yang membangun saluran harga adaptif berdasarkan ATR dan SMA. Lebar saluran ditentukan oleh ATR, dan posisi saluran disesuaikan dengan pergerakan SMA.

Keunggulan Strategis

  1. Adaptif: Strategi dapat secara otomatis beradaptasi dengan lingkungan pasar yang berbeda dan kondisi yang berfluktuasi melalui kombinasi reaktor dinamis dan regresi multi-inti.
  2. Manajemen risiko yang baik: mencakup mekanisme kontrol risiko ganda seperti stop loss dinamis, profit batch, dan stop loss tracking.
  3. Kualitas sinyal yang tinggi: Dengan filter RSI dan konfirmasi silang dua baris, sinyal palsu dapat dikurangi secara efektif.
  4. Efisiensi komputasi tinggi: Meskipun menggunakan algoritma regresi inti yang kompleks, tetapi dengan mengoptimalkan metode komputasi, kinerja real-time dari strategi dijamin.

Risiko Strategis

  1. Sensitivitas parameter: Efek strategi sangat bergantung pada pengaturan parameter seperti ATR, bandwidth fungsi inti, dan lain-lain. Parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang.
  2. Keterlambatan: Karena menggunakan algoritma moving average dan regression, beberapa keterlambatan mungkin terjadi dalam tren cepat.
  3. Adaptasi pasar: Strategi ini bekerja dengan baik di pasar tren, tetapi dapat sering menghasilkan sinyal palsu di pasar bergolak.
  4. Kompleksitas perhitungan: Perhitungan bagian regresi multi-core lebih rumit, dan perlu memperhatikan pengoptimalan kinerja dalam lingkungan perdagangan frekuensi tinggi.

Arah optimasi strategi

  1. Parameter beradaptasi: mekanisme beradaptasi dapat diperkenalkan untuk secara dinamis menyesuaikan ATR dan bandwidth fungsi inti sesuai dengan fluktuasi pasar.
  2. Optimasi sinyal: Pertimbangkan untuk menambahkan indikator tambahan seperti volume transaksi, bentuk harga, dan sebagainya untuk meningkatkan keandalan sinyal.
  3. Pengendalian risiko: rasio antara stop loss dan profit target dapat disesuaikan secara dinamis dengan fluktuasi pasar.
  4. Market Filter: Menambahkan modul identifikasi lingkungan pasar, menggunakan strategi perdagangan yang berbeda dalam kondisi pasar yang berbeda.

Meringkaskan

Ini adalah sistem perdagangan yang lengkap yang menggabungkan metode statistik modern dan analisis teknis tradisional. Strategi ini menunjukkan adaptasi dan stabilitas yang baik melalui kombinasi inovatif dari Reaktor Dinamis dan Regresi Multi-Core, serta mekanisme manajemen risiko yang baik. Meskipun ada beberapa tempat yang perlu dioptimalkan, dengan perbaikan terus menerus dan pengoptimalan parameter, strategi ini diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar.

Kode 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()