Strategi perdagangan dua arah panjang dan pendek dengan penyaringan tren CCI+RSI+KC

CCI RSI KC SMA EMA SMMA CMA TMA
Tanggal Pembuatan: 2024-05-15 16:56:03 Akhirnya memodifikasi: 2024-05-15 16:56:03
menyalin: 1 Jumlah klik: 670
1
fokus pada
1617
Pengikut

Strategi perdagangan dua arah panjang dan pendek dengan penyaringan tren CCI+RSI+KC

Ringkasan

Strategi ini menggunakan tiga indikator teknis CCI, RSI, dan KC, yang digabungkan dengan filter tren, untuk melakukan perdagangan dua arah multi-halus pada pasangan mata uang AUDNZD dan GBPNZD. Strategi ini menggunakan CCI dan RSI untuk menilai overbought dan oversold, dengan KC sebagai dasar referensi untuk stop loss, dan menggunakan moving average sebagai filter tren untuk melakukan operasi posisi terbuka dalam keadaan yang baik. Strategi ini telah diuji ulang pada data historis selama 5 tahun terakhir dan telah menghasilkan keuntungan yang stabil.

Prinsip Strategi

  1. Perhitungan indikator CCI, RSI dan KC. KC di atas rel adalah garis tengah ditambah ATR, di bawah rel adalah garis tengah dikurangi ATR.
  2. Pilih jenis moving average (SMA, EMA, SMMA, CMA, atau TMA) dan metode penyaringan tren (off, positive, atau reverse) berdasarkan parameter input.
  3. Kondisi untuk membuka posisi multihead: izin untuk melakukan lebih, CCI < oversold line, harga penutupan < KC down, RSI < oversold line, volume transaksi> 50 siklus rata-rata*Tidak ada posisi yang lebih dari satu.
  4. Kondisi untuk membuka posisi dengan posisi kosong: izinkan posisi kosong, CCI> overbuy line, harga close out> KC naik, RSI> overbuy line, volume transaksi> 50 siklus rata-rata*Jumlah kali lipat, posisi kosong saat ini.
  5. Kondisi penutupan multihead: CCI>0 ≠ kondisi penutupan kosong: CCI ≠
  6. Peringatan akan dipancarkan saat posisi dibuka dan saat posisi ditutup.

Keunggulan Strategis

  1. Ini akan meningkatkan keakuratan sinyal dengan menggabungkan beberapa indikator untuk penilaian komprehensif.
  2. Metode penyaringan tren dapat disesuaikan secara fleksibel dengan tren pasar.
  3. Jenis rata-rata bergerak dapat dipilih, sesuai dengan karakteristik pasar yang berbeda.
  4. Data historis yang telah lama terverifikasi, stabilitas yang baik, cocok untuk penggunaan jangka panjang.
  5. Ada banyak cara untuk bertransaksi, ada banyak cara untuk beradaptasi, dan ada banyak peluang untuk mendapatkan keuntungan.
  6. Tingkat otomatisasi yang tinggi, tidak memerlukan intervensi manusia, dan menghemat waktu dan tenaga.

Risiko Strategis

  1. Kurangnya stop loss tradisional, kemungkinan penarikan yang lebih besar dalam situasi ekstrem.
  2. Dalam situasi pasar yang bergejolak, kemungkinan terjadinya penarikan posisi yang sering terjadi dan peningkatan biaya transaksi.
  3. Dengan menggunakan siklus CCI yang relatif singkat, sinyal bising dapat terjadi.
  4. Filter tren hanya berfungsi pada saat tren tidak jelas atau ketika pasar bergejolak.
  5. Posisi tetap, tidak dapat beradaptasi dengan perubahan volatilitas pasar.

Arah optimasi strategi

  1. Anda dapat mempertimbangkan untuk meningkatkan stop loss mobile atau stop loss fixed point, untuk mengendalikan risiko transaksi tunggal.
  2. Parameter RSI dan CCI dapat dioptimalkan lebih lanjut untuk mengurangi sinyal noise.
  3. Anda dapat mempertimbangkan untuk memperkenalkan indikator volatilitas seperti ATR, untuk menyesuaikan posisi dan stop loss sesuai dengan fluktuasi pasar.
  4. Menambahkan lebih banyak pasangan mata uang, dan mengoptimalkan parameter secara individual sesuai dengan karakteristik masing-masing varietas.
  5. Mencoba untuk memperkenalkan teknologi kecerdasan buatan seperti pembelajaran mesin, dan mengadaptasi parameter optimasi.

Meringkaskan

Strategi ini mengadopsi beberapa indikator klasik, menulis dan mengevaluasi pada trading view relatif mudah. Efek pengevaluasi bagus, tetapi dalam perdagangan nyata juga perlu memperhatikan pengendalian risiko, penyesuaian parameter. Disarankan untuk menguji modal kecil terlebih dahulu, kemudian meningkatkan investasi secara bertahap setelah mengumpulkan pengalaman.

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