Strategi ini didasarkan pada indikator Commodity Channel Index (CCI) yang menggunakan standar entries adaptif dinamis untuk menilai waktu reversal tren, sementara menggunakan tracking stop loss untuk mengunci keuntungan. Nama strategi berupa prospek yang sesuai dengan dasar CCI. Strategi perdagangan komoditas yang mencakup inti dari strategi ini: menggunakan indikator CCI untuk menilai area oversold untuk menangkap peluang reversal, dan menggunakan entries adaptif dinamis untuk mengoptimalkan entries secara horizontal.
Indikator inti adalah indikator CCI, yang digunakan untuk menentukan daerah oversold sehingga memberi tahu peluang untuk membalikkan tren. Selain itu, luasnya area oversold CCI juga akan bervariasi tergantung pada indikator yang berbeda dan kondisi pasar. Oleh karena itu, strategi ini menggunakan cara prospektif untuk menentukan lokasi titik terendah CCI di masa lalu dan secara dinamis menetapkan tingkat pembelian CCI. Jika titik terendah CCI lebih besar dari -90 dalam 40 hari terakhir, maka -90 sebagai tingkat zona oversold baru; Jika titik terendah CCI lebih besar dari -70 dalam 50 hari terakhir, maka -70 sebagai tingkat zona oversold baru, dan sebagainya.
Secara khusus, tingkat CCI untuk sinyal pembelian default adalah -145. Kemudian, menentukan posisi titik terendah CCI selama 40 hari terakhir, 50 hari terakhir, dan lain-lain. Jika titik terendah lebih tinggi dari tingkat default berikutnya, misalnya -90, maka -90 sebagai level entri baru. Jika titik terendah lebih tinggi dari -90, maka -70 sebagai level entri baru, dan seterusnya.
Selain itu, strategi ini juga menggunakan tracking stop loss untuk mengunci keuntungan, dengan stop loss level yang bergerak ke atas seiring pergerakan harga.
Dengan desain yang dinamis ini, waktu entries dapat dioptimalkan. Mencari standar entries yang lebih tinggi dapat mengurangi risiko di pasar yang lebih rendah, dan mengurangi standar entries dapat menangkap lebih banyak peluang di pasar yang disusun di antara zona getaran.
CCI sendiri sebagai indikator untuk menilai overbought dan oversold juga lebih jelas dan lebih dapat diandalkan, berdasarkan CCI untuk menilai perubahan tren. Dengan desain entri dinamis, keunggulan keseluruhan dari strategi ini sangat jelas.
Ada beberapa keterlambatan dalam pemikiran tentang titik balik tren berdasarkan CCI. Entries mungkin tidak tepat waktu ketika harga naik atau turun dengan cepat. Selain itu, mekanisme adaptasi dinamis entries yang horizontal juga sulit untuk cocok dengan lingkungan pasar saat ini, yang menyebabkan entries tidak selalu menjadi waktu yang optimal.
Hal ini dapat dioptimalkan dari beberapa aspek, mulai dari parameter CCI itu sendiri, pengaturan tingkat entri, dan parameter stop loss. Parameter yang lebih baik untuk menentukan posisi yang tepat untuk standar tertentu dapat meningkatkan efektivitas strategi.
Strategi ini menggabungkan penggunaan indikator CCI untuk menilai overbought dan oversold dengan desain tingkat Entries adaptif dinamis untuk menangkap tren yang pecah. Dibandingkan dengan parameter tetap, tingkat Entries dinamis secara signifikan meningkatkan kemampuan strategi untuk beradaptasi.
/*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)")