Strategi perdagangan pemasaan pintar silang penunjuk dwi adaptif

RSI CCI EMA TIMEFRAME THRESHOLD
Tarikh penciptaan: 2025-02-19 10:56:59 Akhirnya diubah suai: 2025-02-19 10:56:59
Salin: 2 Bilangan klik: 435
1
fokus pada
1617
Pengikut

Strategi perdagangan pemasaan pintar silang penunjuk dwi adaptif

Gambaran keseluruhan

Ini adalah strategi perdagangan penyesuaian diri berdasarkan RSI dan CCI. Strategi ini membina sistem perdagangan yang lengkap dengan memantau keadaan persilangan RSI dan CCI dalam tempoh masa yang berbeza, digabungkan dengan trend EMA rata-rata. Strategi ini mempunyai ciri-ciri penyesuaian diri yang kuat, kestabilan isyarat, dan lain-lain, yang dapat menangkap peluang overbought dan oversold pasaran dengan berkesan.

Prinsip Strategi

Logik utama strategi ini merangkumi:

  1. Tempoh masa menyesuaikan diri: menyesuaikan parameter RSI dan CCI secara dinamik mengikut tempoh masa yang berbeza (dari 1 minit hingga 4 jam).
  2. Pengesahan Dual Indicator: menggunakan gabungan RSI (indicator yang agak kuat) dan CCI (indicator yang bergerak ke hadapan) untuk menapis isyarat perdagangan. Isyarat perdagangan dihasilkan apabila RSI dan CCI memenuhi syarat tertentu pada masa yang sama.
  3. Pemeriksaan kesinambungan isyarat: memastikan kestabilan isyarat dengan menetapkan jangka masa minimum.
  4. Hentian Hentian Dinamis: titik hentian hentian yang ditetapkan secara dinamik berdasarkan tahap RSI dan CCI semasa masuk.
  5. Pengesahan trend: menggunakan EMA 200 kitaran sebagai rujukan trend.

Kelebihan Strategik

  1. Adaptif: Strategi dapat menyesuaikan parameter secara automatik mengikut kitaran masa yang berbeza.
  2. Kebolehpercayaan isyarat yang tinggi: Kebolehpercayaan isyarat yang meningkat dengan ketara melalui pengesahan silang indikator teknologi ganda.
  3. Pengendalian risiko yang sempurna: Menggunakan mekanisme hentian hentian dinamik, yang dapat mengawal risiko dengan berkesan.
  4. Peraturan operasi jelas: syarat kemasukan dan keluar jelas, memudahkan operasi praktikal.
  5. Skala yang baik: kerangka dasar fleksibel, syarat penapisan baru boleh ditambah mengikut keperluan.

Risiko Strategik

  1. Sensitiviti parameter: Parameter optimum mungkin berbeza dalam keadaan pasaran yang berbeza.
  2. Risiko bergolak: Isyarat palsu mungkin muncul semasa pasaran bergolak.
  3. Kesan Slip Point: Perdagangan frekuensi tinggi mungkin menghadapi kesan Slip Point.
  4. Penangguhan isyarat: mekanisme pengesahan berganda mungkin menyebabkan sedikit kelewatan masa masuk.
  5. Kepercayaan kepada keadaan pasaran: Performa dalam pasaran trend kuat mungkin lebih baik daripada pasaran goyah.

Arah pengoptimuman strategi

  1. Penyesuaian parameter: mekanisme pengoptimuman parameter penyesuaian boleh diperkenalkan, menyesuaikan parameter mengikut keadaan pasaran yang dinamik.
  2. Pengiktirafan persekitaran pasaran: Tambah modul pengiktirafan persekitaran pasaran untuk menggunakan strategi perdagangan yang berbeza dalam keadaan pasaran yang berbeza.
  3. Penyesuaian kadar lonjakan: memperkenalkan penunjuk kadar lonjakan, menyesuaikan parameter stop-loss mengikut saiz kadar lonjakan.
  4. Penapisan isyarat: Tambah lebih banyak petunjuk teknikal dan pengenalan bentuk untuk menapis isyarat palsu.
  5. Pengurusan risiko: Memperbaiki skim pengurusan wang, meningkatkan tempoh memegang dan kawalan kedudukan.

ringkaskan

Strategi ini membina sistem perdagangan yang mantap dengan menggabungkan kelebihan RSI dan CCI. Sifat penyesuaian diri strategi dan mekanisme kawalan risiko yang baik menjadikannya mempunyai kepraktisan yang baik. Dengan pengoptimuman dan penyempurnaan yang berterusan, strategi ini dijangka dapat mencapai prestasi yang lebih baik dalam perdagangan sebenar.

Kod 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")