
Strategi ini didesain berdasarkan indikator CCI untuk sistem perdagangan otomatis yang fleksibel untuk melacak tren. Strategi ini dapat mengirim sinyal perdagangan berdasarkan sumbu 0 dari indikator CCI, atau dapat mengirim sinyal melalui jalur saluran atas dan bawah yang disesuaikan. Strategi ini dapat mengatur rasio stop loss dan stop loss tetap, serta memiliki beberapa fitur seperti perdagangan periode waktu dan perdagangan periode waktu tetap setiap hari.
CCI menggunakan 0-axis crossover untuk menentukan tren pasar, CCI di atas 0-axis adalah sinyal bullish, CCI di bawah 0-axis adalah sinyal bearish.
Dengan mengkonfigurasi CCI atas dan bawah, ketika CCI atas memakai jalur atas untuk sinyal bullish, CCI bawah memakai jalur bawah untuk sinyal bearish.
Anda dapat mengatur perdagangan hanya pada periode waktu tertentu, dan tidak ada perdagangan pada periode waktu kosong. Anda dapat mengatur perdagangan pada periode waktu tetap setiap hari.
Rasio stop loss dan stop loss dapat diatur.
Pesan Alert untuk membuka posisi trading yang dapat disesuaikan.
Strategi sepenuhnya dapat disesuaikan dan fleksibel, dapat menyesuaikan parameter CCI, parameter jalur, parameter stop-loss dan strategi pengoptimalan lainnya.
Dengan menggunakan indikator CCI untuk menilai tren pasar, CCI sensitif terhadap perubahan harga dan dapat dengan cepat menangkap titik-titik perubahan pasar.
Custom channel band dapat disesuaikan dengan parameter pasar yang berbeda, dan cross-stop channel band dapat mengontrol risiko secara efektif.
Mendukung berbagai pengaturan waktu perdagangan, parameter strategi dapat disesuaikan sesuai dengan periode waktu yang berbeda, memanfaatkan karakteristik periode waktu yang berbeda untuk mendapatkan keuntungan ekstra.
Mendukung pengaturan Stop Loss Fixed Stop Loss, yang dapat mengatur rasio untung rugi, dan secara efektif mengontrol risiko perdagangan individu.
Parameter yang sepenuhnya dapat disesuaikan, dapat dioptimalkan untuk berbagai varietas dan situasi pasar, untuk mendapatkan hasil yang lebih baik.
Indikator CCI sensitif terhadap perubahan harga dan dapat menghasilkan beberapa sinyal palsu, yang harus diverifikasi dalam kombinasi dengan indikator siklus yang lebih panjang.
Rasio stop loss tetap tidak dapat disesuaikan dengan perubahan pasar dan harus disesuaikan dengan rasio yang disetel.
Waktu perdagangan tetap dapat melewatkan kesempatan untuk menyesuaikan garis pendek pasar, dan periode waktu yang bernilai perdagangan harus dipilih dengan tepat.
Parameter yang perlu sering dioptimalkan, jika tidak dioptimalkan dengan benar dapat menyebabkan overtrading atau kehilangan peluang perdagangan.
Ada banyak faktor yang harus dikombinasikan dengan kondisi industri, lingkungan makro, dan lain-lain, dan tidak dapat sepenuhnya menghindari risiko dengan mengandalkan pengoptimalan parameter saja.
Verifikasi dengan indikator siklus panjang dan pendek untuk menghindari sinyal palsu dari CCI.
Menggunakan indikator seperti ATR untuk mengatur stop loss.
Uji efek parameter pada periode waktu yang berbeda dan pilih periode yang paling efektif.
Optimalkan parameter CCI, parameter jalur, dan adaptasi terhadap perubahan pasar.
Ada beberapa faktor yang harus diperhitungkan, antara lain tren, volatilitas, dan volume transaksi.
Pilih periode perdagangan yang sesuai sesuai dengan karakteristik varietas perdagangan.
Pertimbangkan untuk menggunakan algoritma pembelajaran mesin untuk mengoptimalkan strategi secara otomatis.
Strategi ini secara keseluruhan adalah sistem perdagangan pelacakan tren yang sangat fleksibel dan dapat disesuaikan. Strategi ini memiliki beberapa keuntungan seperti menggunakan CCI untuk menilai tren, mengontrol risiko jalur khusus, mengatur stop loss tetap, memilih periode perdagangan, dan lain-lain. Juga perlu diperhatikan bahwa CCI mudah menghasilkan sinyal palsu, rasio stop loss tetap tidak dapat disesuaikan secara dinamis, dan lain-lain.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © REV0LUTI0N
//@version=4
strategy(title="CCI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
//CCI Code
length = input(20, minval=1, title="CCI Length")
src = input(close, title="Source")
ma = sma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))
// Strategy Backtesting
startDate = input(timestamp("2099-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')
time_cond = true
//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true
//Strategy Settings
//Strategy Settings - Enable Check Boxes
enableentry = input(true, title="Enter First Trade ASAP")
enableconfirmation = input(false, title="Wait For Cross To Enter First Trade")
enablezero =input(true, title="Use CCI Simple Cross Line For Entries & Exits")
enablebands = input(false, title="Use Upper & Lower Bands For Entries & Exits")
//Strategy Settings - Band Sources
ccisource = input(0, title="CCI Simple Cross")
upperbandsource =input(100, title="CCI Enter Long Band")
upperbandexitsource =input(100, title="CCI Exit Long Band")
lowerbandsource =input(-100, title="CCI Enter Short Band")
lowerbandexitsource =input(-100, title="CCI Exit Short Band")
//Strategy Settings - Crosses
simplecrossup = crossover(cci, ccisource)
simplecrossdown = crossunder(cci, ccisource)
uppercrossup = crossover(cci, upperbandsource)
lowercrossdown = crossunder(cci, lowerbandsource)
uppercrossdown = crossunder(cci, upperbandexitsource)
lowercrossup = crossover(cci, lowerbandexitsource)
upperstop = crossunder(cci, upperbandsource)
lowerstop = crossover(cci, lowerbandsource)
// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100
longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)
plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")
// Alert messages
message_enterlong = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
//Strategy Execution
//Strategy Execution - Simple Line Cross
if (cci > ccisource and enablezero and enableentry and time_cond and timetobuy)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (cci < ccisource and enablezero and enableentry and time_cond and timetobuy)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
if (simplecrossup and enablezero and enableconfirmation and time_cond and timetobuy)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (simplecrossdown and enablezero and enableconfirmation and time_cond and timetobuy)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
//Strategy Execution - Upper and Lower Band Entry
if (uppercrossup and enablebands and time_cond and timetobuy)
strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (lowercrossdown and enablebands and time_cond and timetobuy)
strategy.entry("Short", strategy.short, alert_message = message_entershort)
//Strategy Execution - Upper and Lower Band Exit
if strategy.position_size > 0 and uppercrossdown and enablebands and time_cond and timetobuy
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowercrossup and enablebands and time_cond and timetobuy
strategy.close_all(alert_message = message_closeshort)
//Strategy Execution - Upper and Lower Band Stops
if strategy.position_size > 0 and upperstop and enablebands and time_cond and timetobuy
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowerstop and enablebands and time_cond and timetobuy
strategy.close_all(alert_message = message_closeshort)
//Strategy Execution - Close Trade At End Of Time Frame
if strategy.position_size > 0 and timetoclose and enableclose and time_cond
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose and time_cond
strategy.close_all(alert_message = message_closeshort)
//Strategy Execution - Stop Loss and Take Profit
if strategy.position_size > 0 and enablesl and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
if strategy.position_size > 0 and enabletp and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)