Strategi ini didasarkan pada Indeks Saluran Komoditas (CCI) dan menggunakan tingkat masuk adaptif dinamis untuk menentukan waktu pembalikan tren, sambil menggunakan stop loss trailing untuk mengunci keuntungan.
Indikator inti adalah CCI, yang digunakan untuk melihat zona oversold sehingga mengisyaratkan peluang pembalikan tren. Juga, tingkat zona oversold CCI bervariasi di berbagai instrumen dan lingkungan pasar. Oleh karena itu, strategi ini mengambil pendekatan "berwawasan jauh", memeriksa tingkat CCI terendah selama periode mundur tertentu, untuk secara dinamis menetapkan tingkat masuk pembelian CCI. Jika CCI terendah selama 40 hari terakhir berada di atas -90, maka -90 menjadi ambang zona oversold baru, dan sebagainya. Desain adaptif ini memungkinkan tingkat masuk untuk menyesuaikan secara dinamis dengan kondisi pasar yang berbeda, mengejar entri yang lebih konservatif selama tren penurunan yang kuat sementara entri yang lebih agresif selama pasar yang terikat rentang.
Secara khusus, tingkat sinyal beli CCI default adalah -145. Strategi kemudian memeriksa pembacaan CCI terendah selama 40 hari terakhir, 50 hari dll hari-hari tampilan yang berbeda. Jika CCI terendah berada di atas level berikutnya seperti -90, maka -90 menjadi level entri baru. Dan seterusnya, level entri dapat beralih antara -145 / -90 / -70 / -50 / -4 / 0 / +25 / +50 / +70 secara dinamis. Sinyal entri panjang dipicu ketika CCI turun di bawah level yang sesuai.
Selain itu, stop loss trailing digunakan untuk mengunci keuntungan, dengan level stop bergerak naik bersama dengan harga.
Dibandingkan dengan level masuk tetap, desain dinamis seperti ini memungkinkan waktu masuk yang dioptimalkan. mengejar entri yang lebih konservatif selama tren penurunan yang kuat mengurangi risiko, sementara entri yang lebih rendah selama pasar yang terikat rentang memungkinkan untuk menangkap lebih banyak peluang. Ini meningkatkan kemampuan beradaptasi strategi.
CCI sendiri adalah indikator yang jelas dan dapat diandalkan untuk mengidentifikasi tingkat overbought/oversold. Logika menilai pembalikan tren berdasarkan CCI terbukti. Dikombinasikan dengan desain entry yang dinamis, keuntungan keseluruhan dari strategi ini signifikan.
Logika menemukan titik pembalikan tren memiliki beberapa atribut yang tertinggal. Waktu masuk mungkin tidak akurat selama lonjakan harga mendadak atau jatuh. Juga, mekanisme adaptif mungkin tidak sesuai dengan lingkungan pasar saat ini, yang mengarah pada entri yang tidak optimal. Akhirnya, fluktuasi tinggi di pasar komoditas dapat menyebabkan kerugian besar jika parameter stop loss tidak ditetapkan dengan benar.
Pada dasarnya CCI itu sendiri, desain tingkat awal dan parameter stop loss dapat ditingkatkan.
Strategi ini menggabungkan logika menggunakan CCI untuk menemukan zona overbought/oversold dan desain tingkat masuk adaptif dinamis untuk menangkap pembalikan tren. Dibandingkan dengan parameter tetap, tingkat masuk dinamis secara signifikan meningkatkan kemampuan beradaptasi. Model pengambilan pembalikan masuk ini dengan stop loss trailing dapat merebut peluang dengan momentum yang kuat dan memotong kerugian dalam waktu. Dengan parameter yang dikonfigurasi dengan benar, strategi ini menunjukkan daya tahan dan ketahanan. Peningkatan lebih lanjut dapat dilakukan dengan terus mengoptimalkan parameter CCI dan aturan tingkat masuk untuk mencapai stabilitas dan profitabilitas yang lebih tinggi.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Extended Adaptive CCI Entry Strategy for Commodities", shorttitle="Ext_Adaptive_CCI_Entry_Com", overlay=true) // Inputs cciLength = input(20, title="CCI Period") defaultCCIEntryOversold = input(-145, title="Default CCI Entry Oversold Level") adaptiveCCIEntryLevel90 = input(-90, title="Adaptive CCI Entry Level for 40 Days") adaptiveCCIEntryLevel70_50Days = input(-70, title="Adaptive CCI Entry Level for 50 Days") adaptiveCCIEntryLevel50 = input(-50, title="Adaptive CCI Entry Level for 60 Days") adaptiveCCIEntryLevel4 = input(-4, title="Adaptive CCI Entry Level for 90 Days") adaptiveCCIEntryLevel0 = input(0, title="Adaptive CCI Entry Level for 120 Days") adaptiveCCIEntryLevel25 = input(25, title="Adaptive CCI Entry Level for 140 Days") adaptiveCCIEntryLevel50_160Days = input(50, title="Adaptive CCI Entry Level for 160 Days") adaptiveCCIEntryLevel70_180Days = input(70, title="Adaptive CCI Entry Level for 180 Days") lookback40 = input(40, title="Lookback Period for -90 Level") lookback50 = input(50, title="Lookback Period for -70 Level") lookback60 = input(60, title="Lookback Period for -50 Level") lookback90 = input(90, title="Lookback Period for -4 Level") lookback120 = input(120, title="Lookback Period for 0 Level") lookback140 = input(140, title="Lookback Period for +25 Level") lookback160 = input(160, title="Lookback Period for +50 Level") lookback180 = input(180, title="Lookback Period for +70 Level") // Indicator Calculation cci = ta.cci(close, cciLength) // Determine adaptive entry level based on lookback periods var float entryLevel = defaultCCIEntryOversold // Initialize with the default level if ta.lowest(cci, lookback40) > adaptiveCCIEntryLevel90 entryLevel := adaptiveCCIEntryLevel90 if ta.lowest(cci, lookback50) > adaptiveCCIEntryLevel70_50Days entryLevel := adaptiveCCIEntryLevel70_50Days if ta.lowest(cci, lookback60) > adaptiveCCIEntryLevel50 entryLevel := adaptiveCCIEntryLevel50 if ta.lowest(cci, lookback90) > adaptiveCCIEntryLevel4 entryLevel := adaptiveCCIEntryLevel4 if ta.lowest(cci, lookback120) > adaptiveCCIEntryLevel0 entryLevel := adaptiveCCIEntryLevel0 if ta.lowest(cci, lookback140) > adaptiveCCIEntryLevel25 entryLevel := adaptiveCCIEntryLevel25 if ta.lowest(cci, lookback160) > adaptiveCCIEntryLevel50_160Days entryLevel := adaptiveCCIEntryLevel50_160Days if ta.lowest(cci, lookback180) > adaptiveCCIEntryLevel70_180Days entryLevel := adaptiveCCIEntryLevel70_180Days // Entry Condition longCondition = cci < entryLevel // Entry and Exit if (longCondition) strategy.entry("Long", strategy.long, qty=1) alert("Long entry executed at " + str.tostring(close), alert.freq_once_per_bar) trailOffset = input(10.0, title="Trailing Stop Offset in USD") strategy.exit("Trailing Stop", "Long", trail_offset = trailOffset, trail_price = close) if (close < entryLevel - trailOffset) alert("Long position closed at " + str.tostring(close), alert.freq_once_per_bar) // Plotting plot(series=cci, color=color.purple, title="CCI") hline(price=defaultCCIEntryOversold, color=color.red, title="Default CCI Entry Oversold Level") hline(price=adaptiveCCIEntryLevel90, color=color.orange, title="CCI -90 Level (40 Days)") hline(price=adaptiveCCIEntryLevel70_50Days, color=color.yellow, title="CCI -70 Level (50 Days)") hline(price=adaptiveCCIEntryLevel50, color=color.green, title="CCI -50 Level (60 Days)") hline(price=adaptiveCCIEntryLevel4, color=color.blue, title="CCI -4 Level (90 Days)") hline(price=adaptiveCCIEntryLevel0, color=color.purple, title="CCI 0 Level (120 Days)") hline(price=adaptiveCCIEntryLevel25, color=color.aqua, title="CCI +25 Level (140 Days)") hline(price=adaptiveCCIEntryLevel50_160Days, color=color.black, title="CCI +50 Level (160 Days)") hline(price=adaptiveCCIEntryLevel70_180Days, color=color.gray, title="CCI +70 Level (180 Days)")