Strategi ini menggabungkan saluran Keltner, indikator CCI dan indikator RSI dengan kondisi volume perdagangan untuk menciptakan strategi perdagangan kuantitatif yang cukup lengkap yang menyaring tren. Ini menghasilkan sinyal beli dan jual ketika harga menembus area kunci, indikator memberikan sinyal perdagangan, dan volume perdagangan yang besar muncul. Pada saat yang sama, rata-rata bergerak digunakan untuk penilaian tren untuk menghindari perdagangan tanpa tren yang jelas.
Strategi membuat keputusan perdagangan terutama berdasarkan indikator dan kondisi berikut:
Saluran Keltner: Menghitung band atas dan bawah berdasarkan harga khas dan ATR selama periode untuk menentukan apakah harga berada dalam saluran.
Indikator CCI: Digunakan untuk menentukan apakah harga terlalu banyak dibeli atau terlalu banyak dijual.
Indikator RSI: Membantu menilai tingkat overbought/oversold.
Volume perdagangan: Membutuhkan penembusan dari nilai rata-rata bergerak tertentu.
Trend Filter dengan SMA: Gunakan SMA, EMA dll untuk menentukan arah tren secara keseluruhan.
Dengan kondisi arah tren terpenuhi, sinyal beli dan jual dihasilkan ketika harga melanggar pita Keltner Channel, CCI dan RSI memberikan sinyal, dan lonjakan volume perdagangan.
Strategi ini menggabungkan beberapa indikator dan kondisi untuk menyaring sinyal yang tidak pasti dan membuat keputusan lebih dapat diandalkan:
Filter tren menghindari pasar volatile yang tidak jelas.
Saluran Keltner mengidentifikasi tingkat key breakout.
Sinyal CCI dan RSI relatif akurat.
Volume yang meningkat membantu mencegah beberapa kebocoran palsu.
Risiko utama:
Penghakiman tren yang salah dapat melewatkan tren yang lebih kuat.
Parameter indikator yang salah dapat menyebabkan sinyal yang hilang atau salah.
Peningkatan volume yang tidak efektif meninggalkan beberapa risiko kebocoran palsu.
Arah optimasi potensial:
Uji jenis dan panjang MA yang berbeda untuk filter tren yang lebih baik.
Mengoptimalkan parameter saluran Keltner, CCI, RSI untuk sinyal yang lebih akurat.
Uji perkalian volume yang berbeda untuk menemukan tingkat yang optimal.
Pertimbangkan untuk menambahkan stop loss untuk membatasi kerugian maksimum per perdagangan.
Secara keseluruhan, strategi ini menggabungkan saluran Keltner, CCI, indikator RSI dan kondisi volume perdagangan untuk menciptakan strategi perdagangan kuantitatif penyaringan tren yang relatif lengkap. Ini memiliki keuntungan seperti menghindari pasar yang tidak jelas, mengidentifikasi bursa utama, mendapatkan sinyal overbought / oversold yang relatif akurat, dan mencegah beberapa bursa palsu. Risiko ada dalam aspek seperti pengaturan parameter yang tidak tepat dan pembesaran volume yang tidak efektif. Optimasi lebih lanjut dapat dilakukan pada metode penyaringan tren, parameter indikator, pengganda volume, dan menambahkan mekanisme stop loss.
/*backtest start: 2024-01-27 00:00:00 end: 2024-02-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Custom Keltner CCI Strategy with Trend Filter", overlay=true ) // 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(title="MA Type", options=["OFF", "SMA", "EMA", "SMMA", "CMA", "TMA"], defval="OFF") trendFilterMethod = input(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(0, title="Volume Multiplier", type=input.float, step=0.1, minval=0) // Define Moving Averages var float maValue = na if (maType == "SMA") maValue := sma(close, maLength) else if (maType == "EMA") maValue := ema(close, maLength) else if (maType == "SMMA") maValue := na(maValue[1]) ? sma(close, maLength) : (maValue[1] * (maLength - 1) + close) / maLength else if (maType == "CMA") maValue := na(maValue[1]) ? sma(close, maLength) : (sma(close, maLength) + (sma(close, maLength) - maValue[1])) / 2 else if (maType == "TMA") maValue := sma(sma(close, round(maLength/2)), 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 = sma(typicalPrice, lengthKC) range = multKC * atr(lengthKC) upperChannel = middleLine + range lowerChannel = middleLine - range // CCI cci = cci(close, lengthCCI) // RSI rsi = rsi(close, rsiPeriod) // Volume volCondition = volume > sma(volume, 50) * volumeMultiplier // Combined Entry Conditions with Trend Filter longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition // Execute orders at the open of the new bar after conditions are met if (longCondition) strategy.entry("Long", strategy.long) if (shortCondition) strategy.entry("Short", strategy.short) // Exit Conditions strategy.close("Long", when = cci > 0) strategy.close("Short", when = cci < 0) // Plotting plot(upperChannel, color=color.red, linewidth=1) plot(lowerChannel, color=color.green, linewidth=1) hline(overboughtCCI, "Overbought", color=color.red) hline(oversoldCCI, "Oversold", color=color.green)