Strategi perdagangan waktu cerdas crossover indikator ganda adaptif

RSI CCI EMA TIMEFRAME THRESHOLD
Tanggal Pembuatan: 2025-02-19 10:56:59 Akhirnya memodifikasi: 2025-02-19 10:56:59
menyalin: 2 Jumlah klik: 435
1
fokus pada
1617
Pengikut

Strategi perdagangan waktu cerdas crossover indikator ganda adaptif

Ringkasan

Ini adalah strategi perdagangan yang beradaptasi berdasarkan RSI dan CCI indikator dual-teknik. Strategi ini membangun sistem perdagangan yang lengkap dengan memantau cross-status dari RSI dan CCI indikator dalam periode waktu yang berbeda, yang dikombinasikan dengan tren rata-rata EMA. Strategi ini memiliki karakteristik seperti kemampuan beradaptasi yang kuat, stabilitas sinyal, dan dapat secara efektif menangkap pasar overbought dan oversold kesempatan.

Prinsip Strategi

Logika inti dari strategi ini meliputi:

  1. Periode waktu beradaptasi: pengaturan parameter RSI dan CCI secara dinamis sesuai dengan periode waktu yang berbeda (dari 1 menit hingga 4 jam).
  2. Konfirmasi indikator ganda: menggunakan kombinasi RSI (indikator relatif kuat) dan CCI (indikator progresif) untuk menyaring sinyal perdagangan. Sinyal perdagangan dihasilkan ketika RSI dan CCI memenuhi kondisi tertentu secara bersamaan.
  3. Verifikasi kontinuitas sinyal: memastikan stabilitas sinyal dengan mengatur durasi minimal (stayTimeFrames).
  4. Stop loss dinamis: Stop loss yang diatur secara dinamis berdasarkan level RSI dan CCI pada saat masuk.
  5. Pengakuan tren: menggunakan 200 siklus EMA sebagai referensi tren.

Keunggulan Strategis

  1. Adaptif: Strategi dapat menyesuaikan parameter secara otomatis sesuai dengan periode waktu yang berbeda, sehingga lebih adaptif.
  2. Keandalan sinyal yang tinggi: dengan pengesahan silang dari indikator teknologi ganda, keandalan sinyal meningkat secara signifikan.
  3. Pengendalian risiko yang sempurna: Menggunakan mekanisme stop loss yang dinamis, dapat mengontrol risiko secara efektif.
  4. Aturan operasi jelas: masuk dan keluar kondisi jelas, mudah untuk operasi praktis.
  5. Skalabilitas yang baik: Kerangka kebijakan fleksibel, dapat menambahkan kondisi penyaringan baru sesuai kebutuhan.

Risiko Strategis

  1. Sensitivitas Parameter: Parameter optimal mungkin berbeda dalam lingkungan pasar yang berbeda.
  2. Risiko pergerakan horizontal: sinyal palsu dapat dihasilkan selama pergerakan pasar.
  3. Efek slippage: Transaksi frekuensi tinggi dapat mengalami efek slippage.
  4. Penundaan sinyal: mekanisme konfirmasi ganda dapat menyebabkan sedikit penundaan waktu masuk.
  5. Ketergantungan pada kondisi pasar: Performa di pasar tren yang kuat mungkin lebih baik daripada di pasar goyah.

Arah optimasi strategi

  1. Adaptasi parameter: Anda dapat memperkenalkan mekanisme optimasi parameter adaptasi, menyesuaikan parameter sesuai dengan kondisi pasar yang dinamis.
  2. Identifikasi lingkungan pasar: Tambahkan modul identifikasi lingkungan pasar untuk menerapkan strategi perdagangan yang berbeda dalam kondisi pasar yang berbeda.
  3. Adaptasi fluktuasi: memperkenalkan indikator fluktuasi, menyesuaikan parameter stop loss sesuai dengan ukuran fluktuasi.
  4. Filter Sinyal: Tambahkan indikator teknis dan pengenalan bentuk untuk memfilter sinyal palsu.
  5. Manajemen risiko: Memperbaiki program manajemen dana, meningkatkan waktu kepemilikan dan kontrol posisi

Meringkaskan

Strategi ini membangun sistem perdagangan yang solid dengan menggabungkan keunggulan RSI dan CCI. Karakteristik strategi yang beradaptasi sendiri dan mekanisme pengendalian risiko yang baik membuatnya memiliki kepraktisan yang baik. Dengan terus-menerus dioptimalkan dan disempurnakan, strategi ini diharapkan untuk mendapatkan kinerja yang lebih baik dalam perdagangan nyata.

Kode Sumber Strategi
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("RSI & CCI Strategy with Alerts", overlay=true)

// Detect current chart timeframe
tf = timeframe.period

// Define settings for different timeframes
rsiLength = tf == "1" ? 30 : tf == "5" ? 30 : tf == "15" ? 30 : tf == "30" ? 30 : 30  // Default
cciLength = tf == "1" ? 15 : tf == "5" ? 20 : tf == "15" ? 20 : tf == "30" ? 20 : 20  // Default
cciBuyThreshold = tf == "1" ? -100 : tf == "5" ? -100 : tf == "15" ? -100 : tf == "30" ? -100 : -100
cciSellThreshold = tf == "1" ? 100 : tf == "5" ? 100 : tf == "15" ? 100 : tf == "30" ? 100 : 100  // Default
stayTimeFrames = tf == "1" ? 1 : tf == "5" ? 1 : tf == "15" ? 1 : tf == "30" ? 1 : tf == "240" ? 1 : 2  // Default
stayTimeFramesOver =tf == "1" ? 1 : tf == "5" ? 2 : tf == "15" ? 2 : tf == "30" ? 3 : 2 // Default

// Calculate RSI & CCI
rsi = ta.rsi(close, rsiLength)
rsiOver = ta.rsi(close, 14)
cci = ta.cci(close, cciLength)

// EMA 50
ema200 = ta.ema(close, 200)
plot(ema200, color=color.rgb(255, 255, 255), linewidth=2, title="EMA 200")

// CCI candle threshold tracking
var int cciEntryTimeLong = na
var int cciEntryTimeShort = na

// Store entry time when CCI enters the zone
if (cci < cciBuyThreshold)
    if na(cciEntryTimeLong)
        cciEntryTimeLong := bar_index
else
    cciEntryTimeLong := na

if (cci > cciSellThreshold)
    if na(cciEntryTimeShort)
        cciEntryTimeShort := bar_index
else
    cciEntryTimeShort := na

// Confirming CCI has stayed in the threshold for required bars
cciStayedBelowNeg100 = not na(cciEntryTimeLong) and (bar_index - cciEntryTimeLong >= stayTimeFrames) and rsi >= 53
cciStayedAbove100 = not na(cciEntryTimeShort) and (bar_index - cciEntryTimeShort >= stayTimeFrames) and rsi <= 47


// CCI & RSI candle threshold tracking for Buy Over and Sell Over signals
var int buyOverEntryTime = na
var int sellOverEntryTime = na

// Track entry time when RSI and CCI conditions are met
if (rsiOver <= 31 and cci <= -120)
    if na(buyOverEntryTime)
        buyOverEntryTime := bar_index
else
    buyOverEntryTime := na

if (rsiOver >= 69 and cci >= 120)
    if na(sellOverEntryTime)
        sellOverEntryTime := bar_index
else
    sellOverEntryTime := na

// Confirm that conditions are met for the required stayTimeFrames
buyOverCondition = not na(buyOverEntryTime) and (bar_index - buyOverEntryTime >= stayTimeFramesOver)
sellOverCondition = not na(sellOverEntryTime) and (bar_index - sellOverEntryTime <= stayTimeFramesOver)

//Buy and sell for over bought or sell 
conditionOverBuy = buyOverCondition
conditionOverSell = sellOverCondition

// Buy and sell conditions
buyCondition = cciStayedBelowNeg100
sellCondition = cciStayedAbove100

// // Track open positions
var bool isLongOpen = false
var bool isShortOpen = false

// // Strategy logic for backtesting
// if (buyCondition and not isLongOpen)
//     strategy.entry("Long", strategy.long)
//     isLongOpen := true
//     isShortOpen := false

// if (sellCondition and not isShortOpen)
//     strategy.entry("Short", strategy.short)
//     isShortOpen := true
//     isLongOpen := false

// // Close positions based on EMA 50
// if (isLongOpen and exitLongCondition)
//     strategy.close("Long")
//     isLongOpen := false

// if (isShortOpen and exitShortCondition)
//     strategy.close("Short")
//     isShortOpen := false



// Track RSI at position entry
var float entryRSILong = na
var float entryRSIShort = na

// Track CCI at position entry
var float entryCCILong = na
var float entryCCIShort = na

if (buyOverCondition and not isLongOpen)
    strategy.entry("Long", strategy.long)
    entryRSILong := rsi  // Store RSI at entry
    entryCCILong := cci
    isLongOpen := true
    isShortOpen := false

if (sellOverCondition and not isShortOpen)
    strategy.entry("Short", strategy.short)
    entryRSIShort := rsi  // Store RSI at entry
    entryCCIShort := cci  // Stpre CCI at entry
    isShortOpen := true
    isLongOpen := false

exitLongRSICondition = isLongOpen and not na(entryRSILong) and rsi >= (entryRSILong + 12)  or rsi <= (entryRSILong -8)
exitShortRSICondition = isShortOpen and not na(entryRSIShort) and rsi <= (entryRSIShort - 12)  or rsi >= (entryRSIShort +8)

exitLongCCICondition = isLongOpen and not na(entryCCILong) and cci <= (entryCCILong -100)
exitShortCCICondition = isShortOpen and not na(entryCCIShort) and cci >= (entryCCIShort +100)

// Close positions based on EMA 50 or RSI change
if (isLongOpen and (exitLongRSICondition) or (exitLongCCICondition))
    strategy.close("Long")
    isLongOpen := false
    entryRSILong := na
    entryCCILong := na
    isLongOpen := false

if (isShortOpen and (exitShortRSICondition) or (exitShortCCICondition))
    strategy.close("Short")
    isShortOpen := false
    entryRSIShort := na
    entryCCIShort := na
    isShortOpen := false



// Plot buy and sell signals
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.large, title="Buy Signal", text="BUY")
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.large, title="Sell Signal", text="SELL")

//Plot buy and sell OverBought
plotshape(conditionOverBuy, style=shape.labelup, location=location.belowbar, color=color.rgb(255, 238, 0), size=size.large, title="OverBuy Signal", text="Over Sell")
plotshape(conditionOverSell, style=shape.labeldown, location=location.abovebar, color=color.rgb(186, 40, 223), size=size.large, title="OverSell Signal", text="Over Buy")

// Alerts
alertcondition(buyCondition, title="Buy Alert", message="Buy Signal Triggered")
alertcondition(sellCondition, title="Sell Alert", message="Sell Signal Triggered")