CCI Strategi Terobosan Kuat

Penulis:ChaoZhang, Tarikh: 2023-11-15 16:52:06
Tag:

img

Ringkasan

Strategi ini berdasarkan pada Indeks Saluran Komoditi klasik (CCI) dan hanya berlangsung lama. Ia memasuki pasaran apabila penunjuk CCI berada pada tahap yang sangat rendah (CCI <-150 atau ambang yang ditakrifkan oleh pengguna) dan mendapatkan kekuatan semula (iaitu CCI> CCI lilin sebelumnya), dengan penapis pada kekuatan harga itu sendiri (iaitu penutupan bar isyarat mesti lebih tinggi daripada perbezaan tertentu - ditetapkan pada 0.25% - dari pembukaan).

Strategi ini dihentikan apabila stop loss diaktifkan atau harga meningkat di atas jalur atas CCI.

Matlamatnya adalah untuk mencapai peratusan perdagangan yang menguntungkan (lebih daripada 50%) dan bukannya menangkap tempoh keseluruhan trend.

Logika Strategi

  1. Membina penunjuk CCI dan jalur menggunakan ta.sma() danta.dev() fungsi.

  2. Gunakan input untuk memilih tarikh permulaan untuk backtest.

  3. Isyarat kemasukan: CCI melintasi bawah jalur bawah dan mula meningkat. penapis tambahan memerlukan tutup > terbuka sebanyak 0.25%.

  4. Keluar 1: CCI naik di atas barisan atas, mengambil keuntungan.

  5. Keluar 2: Harga jatuh di bawah paras stop loss, mengurangkan kerugian.

  6. Strategi hanya berjalan lama berdasarkan kekuatan CCI, dengan berhenti untuk mengawal risiko.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Mengenali overbought/oversold dengan CCI untuk memanfaatkan pembalikan.

  2. Hanya arah panjang mengelakkan risiko berlebihan daripada perdagangan yang buruk.

  3. Penapis kekuatan harga memastikan sokongan terbentuk sebelum masuk.

  4. Mekanisme Stop Loss membatasi kerugian setiap perdagangan dan menguruskan modal.

  5. Parameter backtest yang fleksibel untuk menyesuaikan penapis masuk.

  6. Kadar kemenangan yang tinggi sesuai dengan pelabur yang fokus pada pengurusan risiko.

  7. Logik yang jelas dan pelaksanaan yang mudah.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Pergi hanya panjang mungkin terlepas daripada trend penurunan jangka pendek.

  2. Penyesuaian parameter CCI yang buruk membawa kepada kegagalan.

  3. Stop loss terlalu longgar gagal untuk mengehadkan kerugian.

  4. Trend menaik yang kuat melanda berhenti menyebabkan kerugian besar.

  5. Frekuensi perdagangan yang tinggi meningkatkan kos transaksi.

Penyelesaian yang mungkin:

  1. Mengoptimumkan parameter CCI untuk mencari nilai terbaik.

  2. Sesuaikan stop loss untuk mengimbangi risiko dan slippage.

  3. Mengurus frekuensi kemasukan dengan mengambil kira kos.

  4. Gabungkan dengan penapis trend dan julat.

Peluang Peningkatan

Beberapa cara untuk meningkatkan strategi:

  1. Melaksanakan berhenti dinamik berdasarkan turun naik pasaran.

  2. Tambah penapis seperti MACD untuk mengelakkan berhenti terlalu luas.

  3. Masukkan sisi pendek apabila CCI terlalu panas.

  4. Pertimbangkan kos, tetapkan sasaran keuntungan minimum.

  5. Mengoptimumkan parameter untuk jangka masa.

  6. Pembelajaran mesin untuk penyesuaian parameter automatik.

  7. Tambah saiz kedudukan untuk peruntukan dinamik.

Kesimpulan

Ringkasnya, strategi hanya panjang ini memanfaatkan tahap overbought / oversold CCI dengan penapis kekuatan harga dan stop loss. Ia menawarkan pelaksanaan yang mudah, kawalan risiko yang baik dan peratusan kemenangan yang tinggi. Keterbatasan menjadi hanya panjang dan berhenti tetap boleh ditangani melalui pengoptimuman parameter, entri pendek, berhenti dinamik dll. Strategi ini sesuai untuk pelabur yang mencari kadar kemenangan yang tinggi dan pengurusan risiko yang betul.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='CCI High Performance long only', overlay=false )
src = input(close)
length = input.int(20, title='Period', minval=1)
lossp = input.float(8, title='Stop Loss percentage', minval=0.5, step=0.5)
scart = input.float(0.25, title='Close of the signal bar higher than Open %', minval = 0)
upperline = input.int(150, title='Upper Band', minval=0, step=10)
lowline = input.int(-150, title='Low Band', maxval=0, step=10)


// construction of CCI (not on close but in totalprice) and of bands
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, 'CCI', color=color.new(#996A15, 0))
band1 = hline(upperline, 'Upper Band', color=#C0C0C0, linestyle=hline.style_dashed)
band0 = hline(lowline, 'Lower Band', color=#C0C0C0, linestyle=hline.style_dashed)
fill(band1, band0, color=color.new(#9C6E1B, 90), title='Background')
// === INPUT BACKTEST RANGE ===
fromMonth = input.int(defval = 1,    title = "From Month",  minval = 1, maxval = 12)
fromDay   = input.int(defval = 1,    title = "From Day",    minval = 1, maxval = 31)
fromYear  = input.int(defval = 2016, title = "From Year",   minval = 1970)
thruMonth = input.int(defval = 1,    title = "Thru Month",  minval = 1, maxval = 12)
thruDay   = input.int(defval = 1,    title = "Thru Day",    minval = 1, maxval = 31)
thruYear  = input.int(defval = 2112, title = "Thru Year",   minval = 1970)
// === FUNCTION EXAMPLE limit for backtest ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)            // backtest start  window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)            // backtest finish window
window()  => time >= start and time <= finish ? true : false           // create function "within window of time"
//ENTRY CONDITIONS

// strategy: enter when CCI is under the low line and starts increasing. The filter is that the signal candle should mark a close higher than a x-percent
// (0.25%) of the open
// Exit when either when it reaches the target of a prices highest than high level of CCI or fixed stop loss (in percentage)
scart_level = open * (1+scart/100)
entryl = cci[1] < lowline[1] and cci > cci[1] and close > scart_level and window()
exit1 = cci> upperline
strategy.entry('Long', strategy.long, when=entryl)
strategy.close('Long', when=exit1, comment='target')

// money management (only stop loss)
losspel = strategy.position_avg_price * (1 - lossp / 100)
fixed_stop_long = close < losspel
strategy.close('Long', when=fixed_stop_long, comment='Stop Loss')



Lebih lanjut