CCI Dual Timeframe Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-11-24 10:53:07
Tag:

img

Gambaran umum

Strategi ini adalah strategi trend following berdasarkan indikator CCI. Strategi ini menghasilkan sinyal perdagangan dengan memantau crossover antara dua CCI dari kerangka waktu yang berbeda. Secara khusus, strategi ini akan mendeteksi apakah CCI periode yang lebih pendek melanggar CCI periode yang lebih lama dan menentukan posisi panjang atau pendek berdasarkan arah terobosan.

Logika Strategi

Logika inti dari strategi ini adalah:

  1. Tentukan dua CCI, ci1 sebagai 14 periode, ci2 sebagai 56 periode
  2. Ketika ci1 melanggar di atas ci2, pergi panjang
  3. Ketika ci1 melanggar di bawah ci2, pergi pendek
  4. Gunakan nilai ci1 dan ci2 untuk menentukan keluar setelah sinyal dipicu

Peraturan panjang khusus:

  1. ci1 pecah di atas ci2, CCI jangka pendek di atas CCI jangka panjang
  2. Kondisi stop loss: ci1 <-50 dan tingkat perubahan < 0 atau ci1 putus di bawah -100

Aturan singkat khusus:

  1. ci1 putus di bawah ci2, CCI jangka pendek di bawah CCI jangka panjang
  2. Kondisi stop loss: ci1 > 100 dan tingkat perubahan > 0 atau ci2 pecah di atas 100

Seperti yang dapat dilihat, strategi ini memanfaatkan sensitivitas CCI jangka pendek dan stabilitas CCI jangka panjang untuk mengidentifikasi dan mengikuti tren.

Keuntungan

Keuntungan dari strategi ini:

  1. Mengidentifikasi tren secara efektif menggunakan kekuatan indikator CCI
  2. Desain CCI ganda menyaring beberapa perdagangan kebisingan
  3. Kombinasi KSI jangka panjang dan jangka pendek mengendalikan risiko sambil mengikuti tren
  4. Aturan strategi yang sederhana dan jelas, mudah dimengerti dan diterapkan
  5. Sangat dapat dikonfigurasi, kedua periode CCI dan kondisi stop loss dapat disesuaikan

Risiko

Ada juga beberapa risiko:

  1. Kemampuan yang lemah untuk mengidentifikasi pasar yang terikat pada kisaran dan volatilitas menggunakan CCI
  2. Perbedaan mungkin terjadi antara CCI jangka panjang dan jangka pendek, menyebabkan sinyal yang salah
  3. Pengaturan stop loss yang tidak benar dapat menyebabkan kerugian besar
  4. Pengaturan parameter yang tidak tepat juga sangat mempengaruhi profitabilitas strategi

Solusi:

  1. Menggabungkan indikator lain untuk menentukan kondisi pasar, menghindari perdagangan pada periode volatile
  2. Tambahkan filter untuk menghindari kesalahan dari divergensi CCI
  3. Mengoptimalkan dan menguji tingkat stop loss yang berbeda
  4. Temukan set parameter yang cocok melalui backtesting dan tuning

Arahan Optimasi

Bidang di mana strategi dapat dioptimalkan lebih lanjut:

  1. Tambahkan lebih banyak indikator untuk membangun sistem perdagangan yang lebih sistematis
  2. Perbedaan profitabilitas uji antara hari kerja dan sesi
  3. Mencari parameter yang lebih baik menggunakan pembelajaran mesin
  4. Parameter tuning untuk produk yang berbeda
  5. Mengoptimalkan aturan masuk dan keluar

Kesimpulan

Sebagai kesimpulan, ini adalah strategi trend following sederhana berdasarkan crossover CCI. Ini dapat secara efektif mengidentifikasi arah tren dan mengikuti tren. Sementara itu mengendalikan risiko melalui stop loss. Strategi ini sederhana, praktis, fleksibel dalam penyesuaian parameter, dan dapat berfungsi sebagai strategi kuantitas starter. Ini dapat ditingkatkan menjadi sistem yang lebih kuat melalui optimasi dan kombinasi lebih lanjut.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="my work",calc_on_order_fills=true,currency=currency.USD, default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent)


source = close
shortlength=input(14)
longlength=input(56)
aa=input(2)
Ss=input(75)

//Cci part
ci1=cci(source,shortlength)   //4시간봉의 기본 cci
ci2=cci(source,longlength)   //4시간봉에서 12시봉의 cci 무빙측정

//오린간 선생님의 WT + ichimoku
len = input(10)
lenTurn = input(9)
lenStd = input(26)

wtm_e(so, l) =>
    esa = ema(so, l)
    d = ema(abs(so - esa), l)
    ci = (so - esa) / (0.015 * d)
    ema(ci, l*2+1)

alh(len) => avg(lowest(len), highest(len))
alh_src(src, len) => avg(lowest(src, len), highest(src, len))

wt = wtm_e(close,len)
turn = alh_src(wt, lenTurn)
std = alh_src(wt, lenStd)

cnt = 0
if wt > turn
    cnt:=cnt+1
if wt > std
    cnt:=cnt+1


//100,-100선
h0 = hline(100)
h1 = hline(-100)

//plot(ci,color=green)
// plot(k,color=green)
// plot(d,color=red)
plot(ci1,color=green)
plot(ci2,color=red)

plot(0,color=black)
plot(100,color=black)
plot(-100,color=black)

fill(h0,h1,color=purple,transp=95)

bgcolor(cnt==0 ? red : cnt==1 ? blue : cnt == 2 ? green : na, transp = Ss)

//기간조정

Fromday = input(defval=1, title="from day", minval=1, maxval=31)
FromMonth = input(defval=1, title="from month", minval=1, maxval=12)
FromYr = input(defval=2019, title="from yr", minval=1970)

Today = input(defval=13, title="to day", minval=1, maxval=31)
ToMonth = input(defval=12, title="to month", minval=1, maxval=12)
ToYr = input(defval=2019, title="to yr", minval=1970)

startDate = timestamp(FromYr, FromMonth, Fromday, 00, 00)
finishDate = timestamp(ToYr, ToMonth, Today, 00, 00)
Time_cond = true


/////롱

if  crossover(ci1,ci2) and change(ci2)>0 and Time_cond
    strategy.entry("go", strategy.long, comment="go")
    
strategy.close("go", (ci2<0 and ci1 <-50 and change(ci1)<0) or (crossunder(ci1,-100) and strategy.openprofit<0) and change(cnt)<0)



/////숏

if  (crossunder(ci1,ci2) and change(ci2)<0 and falling(ci1,aa)) and Time_cond
    strategy.entry("die", strategy.short, comment="die")
    
strategy.close("die", (ci2>0 and ci1 > 100 and change(ci1)>0) or (crossover(ci2,100) and strategy.openprofit<0) and change(cnt)>0)

Lebih banyak