Sumber dimuat naik... memuat...

Sistem Strategy Kuantitatif Tren Momentum Dual-Indikator Dinamis

Penulis:ChaoZhang, Tarikh: 2025-01-17 16:40:55
Tag:RSIMAATRTP/SL

 Dynamic Dual-Indicator Momentum Trend Quantitative Strategy System

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Indeks Kekuatan Relatif (RSI) dan Purata Bergerak (MA) untuk mengenal pasti trend pasaran dan peluang perdagangan. Sistem ini juga menggabungkan penapis jumlah dan turun naik untuk meningkatkan kebolehpercayaan isyarat perdagangan.

Prinsip Strategi

Strategi ini menggunakan mekanisme pengesahan isyarat dua: 1. Lapisan Pengesahan Trend: Menggunakan persilangan purata bergerak pantas (FastMA) dan purata bergerak perlahan (SlowMA) untuk menentukan trend pasaran. Apabila garis pantas melintasi di atas garis perlahan, trend menaik ditubuhkan; apabila garis pantas melintasi di bawah garis perlahan, trend menurun ditubuhkan. 2. Lapisan Pengesahan Momentum: Menggunakan RSI sebagai alat pengesahan momentum. Dalam trend menaik, RSI harus di bawah 50, menunjukkan potensi menaik; dalam trend menurun, RSI harus di atas 50, menunjukkan potensi menurun. 3. Penapis Dagangan: Tetapkan ambang minimum untuk jumlah dan turun naik ATR untuk menapis isyarat dengan kecairan atau turun naik yang tidak mencukupi.

Kelebihan Strategi

  1. Pengesahan Isyarat Berbilang Dimensi: Menggabungkan penunjuk trend dan momentum untuk mengurangkan kebarangkalian isyarat palsu.
  2. Pengurusan Risiko yang Komprehensif: Mengintegrasikan fungsi stop-loss dan mengambil keuntungan dengan titik kawalan risiko berasaskan peratusan.
  3. Mekanisme Penapisan Fleksibel: Penapisan jumlah dan volatiliti boleh diaktifkan atau dilumpuhkan berdasarkan keadaan pasaran.
  4. Penutupan Posisi Automatik: Menutup kedudukan secara automatik apabila isyarat pembalikan kelihatan untuk mengelakkan penutupan.

Risiko Strategi

  1. Risiko pasaran bergolak: Isyarat pecah palsu sering berlaku di pasaran yang terikat julat.
  2. Risiko tergelincir: Semasa keadaan pasaran yang tidak menentu, harga pelaksanaan sebenar boleh menyimpang dengan ketara dari harga pemicu isyarat.
  3. Sensitiviti Parameter: Prestasi strategi sangat bergantung kepada tetapan parameter, persekitaran pasaran yang berbeza mungkin memerlukan kombinasi parameter yang berbeza.

Arahan Pengoptimuman Strategi

  1. Penyesuaian Parameter Dinamik: Memperkenalkan mekanisme parameter adaptif untuk menyesuaikan tempoh purata bergerak dan ambang RSI secara dinamik berdasarkan turun naik pasaran.
  2. Sistem Berat Isyarat: Menubuhkan sistem penilaian kekuatan isyarat, menetapkan berat yang berbeza berdasarkan prestasi penunjuk.
  3. Klasifikasi persekitaran pasaran: Tambah modul pengenalan keadaan pasaran untuk menggunakan strategi perdagangan yang berbeza di bawah keadaan pasaran yang berbeza.
  4. Kawalan Risiko yang Ditingkatkan: Memperkenalkan mekanisme stop-loss dinamik untuk menyesuaikan kedudukan stop-loss secara automatik berdasarkan turun naik pasaran.

Ringkasan

Strategi ini menubuhkan sistem perdagangan yang komprehensif melalui penggunaan bersepadu penunjuk trend dan momentum. Kekuatan sistem terletak pada mekanisme pengesahan isyarat berlapis-lapis dan rangka kerja pengurusan risiko yang komprehensif. Walau bagaimanapun, penerapan praktikal memerlukan perhatian terhadap kesan keadaan pasaran terhadap prestasi strategi dan pengoptimuman parameter berdasarkan keadaan sebenar. Melalui peningkatan dan pengoptimuman yang berterusan, strategi ini mempunyai potensi untuk mengekalkan prestasi yang stabil di pelbagai persekitaran pasaran.


/*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}]
*/

// © Boba2601
//@version=5
strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100)

// === Налаштування індикаторів ===
length_rsi = input.int(14, title="RSI Period", group="Індикатори")
fastMALength = input.int(9, title="Fast MA Length", group="Індикатори")
slowMALength = input.int(21, title="Slow MA Length", group="Індикатори")

// === Налаштування стоп-лосу і тейк-профіту ===
useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт")
stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")
takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")

// === Налаштування об'єму та волатильності ===
useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність")
volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність")
useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність")
atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність")
volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність")


// === Розрахунок індикаторів ===
rsiValue = ta.rsi(close, length_rsi)
fastMA = ta.sma(close, fastMALength)
slowMA = ta.sma(close, slowMALength)

// === Розрахунок об'єму та волатильності ===
averageVolume = ta.sma(volume, 20)
atrValue = ta.atr(atrLength)

// === Умови входу в позицію ===
longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50
if useVolumeFilter
    longCondition := longCondition and volume > volumeThreshold
if useVolatilityFilter
    longCondition := longCondition and atrValue > volatilityThreshold

shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50
if useVolumeFilter
    shortCondition := shortCondition and volume > volumeThreshold
if useVolatilityFilter
    shortCondition := shortCondition and atrValue > volatilityThreshold

// === Логіка входу та виходу з позиції ===
if (longCondition)
    strategy.entry("Long", strategy.long)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 - stopLossPercent / 100)
        takeProfitPrice = close * (1 + takeProfitPercent / 100)
        strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

if (shortCondition)
    strategy.entry("Short", strategy.short)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 + stopLossPercent / 100)
        takeProfitPrice = close * (1 - takeProfitPercent / 100)
        strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// === Закриття позицій за зворотнім сигналом ===
if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50))
    strategy.close("Long", comment="Закрито по сигналу")

if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50))
    strategy.close("Short", comment="Закрито по сигналу")

Berkaitan

Lebih lanjut