Strategi ini dirancang sebagai sistem perdagangan trend yang fleksibel berdasarkan indikator CCI. Ini dapat menghasilkan sinyal perdagangan berdasarkan penyeberangan garis nol CCI atau penyeberangan pita atas / bawah khusus. Strategi ini memungkinkan pengaturan stop loss tetap dan mengambil rasio keuntungan, perdagangan dalam kerangka waktu tertentu, dan banyak lagi.
Menggunakan CCI garis nol crossover untuk menentukan tren pasar. CCI melintasi di atas nol adalah sinyal bullish dan melintasi di bawah adalah sinyal bearish.
Setel band CCI atas dan bawah yang disesuaikan. CCI yang melintasi band atas adalah bullish dan melintasi band bawah adalah bearish. Crossover band bertindak sebagai stop.
Pilihan untuk hanya berdagang dalam jangka waktu tertentu dan menutup semua posisi di luar periode tersebut.
Tetapkan stop loss tetap dan ambil persentase keuntungan.
Pesan peringatan yang dapat disesuaikan untuk sinyal masuk dan keluar.
Strategi yang sangat dapat disesuaikan dengan parameter CCI yang dapat disesuaikan, band, stop, dll.
CCI sensitif terhadap perubahan harga, baik untuk menangkap pembalikan tren.
Band khusus dapat disesuaikan untuk pasar yang berbeda.
Mendukung perdagangan dalam kerangka waktu yang berbeda dengan parameter yang dioptimalkan berdasarkan karakteristik.
Stop loss/take profit tetap rasio risiko/imbalan yang telah ditetapkan dan risiko batas.
Parameter yang dapat disesuaikan sepenuhnya mengoptimalkan strategi untuk produk dan kondisi pasar yang berbeda.
CCI rentan terhadap sinyal palsu, harus memverifikasi sinyal dengan indikator jangka waktu yang lebih panjang.
Persentase stop/take tetap tidak dapat beradaptasi dengan perubahan kondisi pasar.
Perdagangan dalam kerangka waktu tetap berisiko kehilangan peluang selama periode rentang.
Optimasi parameter yang sering dapat menyebabkan over-trading atau trading yang hilang.
Faktor makro harus dipertimbangkan, optimasi saja tidak cukup untuk menghilangkan risiko.
Tambahkan indikator jangka waktu yang lebih panjang untuk memverifikasi sinyal CCI.
Masukkan pemberhentian/pengambilan dinamis seperti ATR.
Uji parameter dalam kerangka waktu yang berbeda dan temukan periode efisiensi tinggi.
Mengoptimalkan parameter dan band CCI untuk pasar yang berubah.
Pertimbangkan untuk memasukkan faktor lain seperti volatilitas dan volume.
Pilih kerangka waktu yang sesuai untuk produk yang diperdagangkan.
Pertimbangkan pembelajaran mesin untuk mengotomatisasi optimasi strategi.
Secara keseluruhan, ini adalah sistem trend yang sangat fleksibel dan dapat disesuaikan. Keuntungan utama adalah menggunakan CCI untuk tren, band kustom untuk membatasi risiko, stop / take tetap, dan pemilihan kerangka waktu. Perlu memperhatikan sinyal CCI palsu dan stop yang tidak fleksibel. Peningkatan di masa depan dapat datang dari mengoptimalkan parameter, menyaring sinyal, memilih kerangka waktu yang efisien, dan menggabungkan pembelajaran mesin untuk adaptasi otomatis terhadap perubahan pasar, untuk mencapai hasil yang lebih konsisten.
/*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)