CCI+RSI+KC trend menapis strategi perdagangan dua hala panjang dan pendek

CCI RSI KC SMA EMA SMMA CMA TMA
Tarikh penciptaan: 2024-05-15 16:56:03 Akhirnya diubah suai: 2024-05-15 16:56:03
Salin: 1 Bilangan klik: 670
1
fokus pada
1617
Pengikut

CCI+RSI+KC trend menapis strategi perdagangan dua hala panjang dan pendek

Gambaran keseluruhan

Strategi ini menggunakan tiga petunjuk teknikal CCI, RSI dan KC, digabungkan dengan penapis trend, untuk mewujudkan perdagangan dua hala multi-terbang pada pasangan mata wang AUDNZD dan GBPNZD. Strategi ini menggunakan CCI dan RSI untuk menilai keadaan overbought dan oversold, KC sebagai asas rujukan untuk menghentikan kerugian, dan menggunakan purata bergerak sebagai penapis trend, untuk melakukan operasi bukaan kedudukan dalam keadaan yang baik. Strategi ini telah diuji semula pada data sejarah selama 5 tahun dan telah memperoleh keuntungan yang stabil.

Prinsip Strategi

  1. Hitung CCI, RSI, dan KC. KC pada garisan atas ditambah ATR pada garisan tengah, dan pada garisan bawah dikurangkan ATR pada garisan tengah.
  2. Pilih jenis purata bergerak (SMA, EMA, SMMA, CMA atau TMA) dan kaedah penapisan trend (PUT, POSITIVE atau INVERSE) berdasarkan parameter input.
  3. Syarat pembukaan kedudukan berbilang kepala: dibenarkan melakukan lebih, CCI < over sell, harga penutupan < KC down, RSI < over sell, jumlah transaksi > 50 purata kitaran*Berkali-kali, tiada lebih daripada satu kedudukan.
  4. Syarat untuk membuka kedudukan kosong: dibenarkan untuk melakukan kosong, CCI> overbuy line, harga penutupan> KC naik, RSI> overbuy line, jumlah transaksi> 50 kitaran purata*Nombor ganda, kedudukan kosong semasa.
  5. Syarat kedudukan kosong: CCI < 0
  6. Alerta dikeluarkan apabila membuka dan menutup kedudukan.

Kelebihan Strategik

  1. Menggabungkan pelbagai petunjuk untuk membuat penilaian komprehensif, meningkatkan ketepatan isyarat.
  2. Menggunakan kaedah penapisan trend, ia boleh disesuaikan secara fleksibel mengikut trend pasaran.
  3. Jenis purata bergerak boleh dipilih, sesuai dengan ciri-ciri pasaran yang berbeza.
  4. Data sejarah yang telah lama disahkan, kestabilan yang baik, sesuai untuk penggunaan jangka panjang.
  5. Perdagangan dua hala, menyesuaikan diri dengan pelbagai keadaan, peluang untuk mendapat keuntungan lebih banyak.
  6. Tingkat automasi yang tinggi, tidak memerlukan campur tangan manusia, menjimatkan masa dan tenaga.

Risiko Strategik

  1. Kurangnya penangguhan kerugian tradisional, yang boleh menyebabkan penarikan yang lebih besar dalam keadaan yang melampau.
  2. Dalam pasaran yang bergolak, ia boleh menyebabkan kedudukan rendah yang kerap berlaku dan kos dagangan meningkat.
  3. Dengan menggunakan kitaran CCI yang agak pendek, isyarat bising mungkin berlaku.
  4. Penapisan trend adalah terhad apabila trend tidak jelas atau turun naik pasaran meningkat.
  5. Posisi tetap, tidak dapat menyesuaikan diri dengan perubahan kadar turun naik pasaran.

Arah pengoptimuman strategi

  1. Anda boleh pertimbangkan untuk menambah hentian bergerak atau hentian titik tetap untuk mengawal risiko perdagangan tunggal.
  2. Parameter RSI dan CCI boleh dioptimumkan lebih jauh untuk mengurangkan isyarat bising.
  3. Anda boleh mempertimbangkan untuk memperkenalkan penunjuk kadar turun naik seperti ATR, menyesuaikan kedudukan dan hentikan kerugian mengikut turun naik pasaran.
  4. Menambah lebih banyak pasangan mata wang dan mengoptimumkan parameter secara berasingan mengikut ciri-ciri setiap jenis.
  5. Cuba untuk memperkenalkan teknologi kecerdasan buatan seperti pembelajaran mesin, menyesuaikan parameter pengoptimuman.

ringkaskan

Strategi ini menggunakan beberapa petunjuk klasik, menulis dan mengkaji semula pada pandangan perdagangan adalah lebih mudah. Kesan pengkajian semula adalah baik, tetapi anda juga perlu berhati-hati untuk mengawal risiko dan menyesuaikan parameter dalam perdagangan sebenar.

Kod sumber strategi
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('CCI Strategy with Trend Filter AUDNZD, GBPNZD', overlay=true, default_qty_type=strategy.cash, default_qty_value=50000, commission_value=0.0005, slippage=2, initial_capital=10000)

// State variables to ensure one entry per signal
var bool isLongOpen = false
var bool isShortOpen = false

// Input Parameters for allowing long and short trades
allowLong = input(true, title='Allow Long Trades')
allowShort = input(true, title='Allow Short Trades')

// Trend Filter Inputs
maType = input.string(title='MA Type', options=['OFF', 'SMA', 'EMA', 'SMMA', 'CMA', 'TMA'], defval='OFF')
trendFilterMethod = input.string(title='Trend Filter Method', options=['OFF', 'Normal', 'Reversed'], defval='OFF')
maLength = input(14, title='MA Length')

// Other Input Parameters
lengthKC = input(30, title='Keltner Channels Length')
multKC = input(0.7, title='Keltner Channels Multiplier')
lengthCCI = input(5, title='CCI Length')
overboughtCCI = input(75, title='CCI Overbought Level')
oversoldCCI = input(-75, title='CCI Oversold Level')
rsiPeriod = input(30, title='RSI Period')
rsiOverbought = input(60, title='RSI Overbought Level')
rsiOversold = input(60, title='RSI Oversold Level')
volumeMultiplier = input.float(0, title='Volume Multiplier', step=0.1, minval=0)

// Define Moving Averages
var float maValue = na
if maType == 'SMA'
    maValue := ta.sma(close, maLength)
else if maType == 'EMA'
    maValue := ta.ema(close, maLength)
else if maType == 'SMMA'
    float initialSMMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? initialSMMA : (maValue[1] * (maLength - 1) + close) / maLength
else if maType == 'CMA'
    float firstSMA = ta.sma(close, maLength)
    float secondSMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? firstSMA : (firstSMA + secondSMA - maValue[1]) / 2
else if maType == 'TMA'
    maValue := ta.sma(ta.sma(close, math.round(maLength / 2)), math.round(maLength / 2) + 1)

// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close > maValue or trendFilterMethod == 'Reversed' and close < maValue)
shortCondition = allowShort and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close < maValue or trendFilterMethod == 'Reversed' and close > maValue)

// Keltner Channels
typicalPrice = hlc3
middleLine = ta.sma(typicalPrice, lengthKC)
range_1 = multKC * ta.atr(lengthKC)
upperChannel = middleLine + range_1
lowerChannel = middleLine - range_1

// CCI
cci = ta.cci(close, lengthCCI)

// RSI
rsi = ta.rsi(close, rsiPeriod)

// Volume
volCondition = volume > ta.sma(volume, 50) * volumeMultiplier

// Combined Entry Conditions with Trend Filter and state check
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition and not isLongOpen
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition and not isShortOpen

// Execute orders at the open of the new bar after conditions are met
if longCondition
    strategy.entry('Long', strategy.long)
    alert('LicenseID,buy,AUDNZD,risk=1')
    isLongOpen := true
if shortCondition
    strategy.entry('Short', strategy.short)
    alert('LicenseID,sell,AUDNZD,risk=1')
    isShortOpen := true

// Exit Conditions and Alerts
longExitCondition = cci > 0
shortExitCondition = cci < 0
if (longExitCondition and isLongOpen)
    strategy.close('Long')
    alert('LiceneseID,closelong,AUDNZD')
    isLongOpen := false
if (shortExitCondition and isShortOpen)
    strategy.close('Short')
    alert('LicenseID,closeshort,AUDNZD')
    isShortOpen := false

// Plotting
plot(upperChannel, color=color.new(color.red, 0), linewidth=1)
plot(lowerChannel, color=color.new(color.green, 0), linewidth=1)
hline(overboughtCCI, 'Overbought', color=color.red)
hline(oversoldCCI, 'Oversold', color=color.green)