Strategi Dukungan dan Perlawanan CCI Dinamis


Tanggal Pembuatan: 2024-01-22 16:37:46 Akhirnya memodifikasi: 2024-01-22 16:37:46
menyalin: 1 Jumlah klik: 725
1
fokus pada
1617
Pengikut

Strategi Dukungan dan Perlawanan CCI Dinamis

Ringkasan

Strategi ini menggunakan titik pusat indikator CCI untuk menghitung posisi dukungan dan resistensi yang dinamis, dikombinasikan dengan penilaian tren untuk mencari sinyal beli dan jual. Strategi ini menggabungkan karakteristik reversal CCI dan kemampuan pelacakan tren, yang bertujuan untuk menangkap titik balik dalam tren jangka menengah untuk menghasilkan keuntungan.

Prinsip Strategi

Indikator CCI dapat menunjukkan apakah pasar terlalu lemah atau terlalu kuat, 80 dan -80 adalah dua batas yang dapat digunakan untuk menilai apakah pasar telah memasuki keadaan overbought atau oversold. Strategi ini memanfaatkan karakteristik CCI ini, dengan menghitung titik pusat dari masing-masing 50 garis K di kedua sisi kiri dan kanan, untuk mendapatkan titik pusat atas dan bawah, dan kemudian membangun garis resistensi dan garis dukungan dari dinamika area dorongan yang melambat berdasarkan titik pusat.

Strategi ini juga menggabungkan EMA dan indikator kecenderungan untuk menilai arah tren utama saat ini. Hanya jika tren dinilai sebagai multihead, maka akan dilakukan pembelian. Hanya jika tren dinilai sebagai kosong, maka akan dilakukan penjualan.

Stop loss dan stop loss didasarkan pada perhitungan dinamika indikator ATR, sehingga pengendalian risiko strategi ini juga lebih masuk akal.

Analisis Keunggulan

  1. Menggunakan fitur reversal dari indikator CCI, pilih tempat untuk membeli dan menjual di dekat titik reversal untuk meningkatkan probabilitas keuntungan.
  2. Menggunakan penilaian tren untuk menghindari operasi berlawanan dan mengurangi kerugian.
  3. Pengaturan Stop Loss Dinamis membuat pengendalian risiko lebih masuk akal.
  4. Parameter yang dapat disesuaikan, seperti siklus CCI, ukuran zona penyangga, dan lain-lain, dapat disesuaikan dengan kondisi pasar yang lebih luas.

Analisis risiko

  1. Indikator CCI mudah menghasilkan sinyal palsu dan perlu digabungkan dengan filter tren.
  2. Pembalasan tidak selalu berhasil, ada risiko kerugian dengan probabilitas tertentu.
  3. Pengaturan parameter yang tidak tepat dapat menyebabkan perdagangan yang terlalu sering atau kehilangan peluang perdagangan.

Strategi ini juga dapat digunakan sebagai alat tambahan untuk indikator lain, tanpa harus sepenuhnya bergantung pada sinyal perdagangan.

Arah optimasi

  1. Optimalkan ukuran zona penyangga untuk pasar yang berfluktuasi.
  2. Optimalkan parameter siklus ATR untuk mendapatkan stop loss yang lebih akurat.
  3. Cobalah pengaturan parameter CCI yang berbeda.
  4. Uji coba untuk jenis lain dari indikator penilaian tren.

Meringkaskan

Strategi ini mengintegrasikan kemampuan CCI multi-ruang penyaringan dengan penyaringan penilaian tren, dengan nilai nyata tertentu. Stop-loss dinamis juga membuat strategi dapat dikontrol risiko dalam aplikasi nyata. Dengan parameter optimasi dan perbaikan, diharapkan untuk mendapatkan efek yang lebih baik.

Kode Sumber Strategi
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AliSignals


//@version=5
strategy("CCI based support and resistance strategy", overlay=true  )


cci_length = input.int(50, "cci length")
right_pivot = input.int(50, "right pivot")
left_pivot = input.int(50, "left pivot")
buffer = input.float(10.0, "buffer")
trend_matter = input.bool(true, "trend matter?")
showmid = input.bool ( false , "show mid?")
trend_type = input.string("cross","trend type" ,options = ["cross","slope"])
slowma_l = input.int(100, "slow ma length")
fastma_l = input.int(50, "fast ma length")
slope_l = input.int(5,  "slope's length for trend detection")
ksl = input.float(1.1)
ktp = input.float(2.2)
restf = input.timeframe(title="Time Frame of Last Period for Calculating max" , defval="D")



// Calculating Upper and Lower CCI
cci = ta.cci(hlc3,cci_length)

uppercci = 0.0
lowercci = 0.0

uppercci := fixnan(ta.pivothigh(cci, left_pivot, right_pivot)) - buffer
lowercci := fixnan(ta.pivotlow (cci, left_pivot, right_pivot)) + buffer
midccci  = math.avg(uppercci,lowercci)


// Support and Resistance based on CCI
res = uppercci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)
sup = lowercci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)
mid =  midccci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)



// Calculating trend
t_cross  = 0
t_cross := ta.ema(close,fastma_l) > ta.ema(close,slowma_l) ? 1 : ta.ema(close,fastma_l) < ta.ema(close,slowma_l) ? -1 : t_cross[1] 

t_slope  = 0
t_slope := ta.ema(close,slowma_l) > ta.ema(close,slowma_l)[slope_l] ? 1 : ta.ema(close,slowma_l) < ta.ema(close,slowma_l)[slope_l]  ? -1 : t_slope[1] 

t  = 0
t := trend_type == "cross" ? t_cross : trend_type == "slope" ? t_slope : na

colort =  trend_matter == false ? color.rgb(201, 251, 0) : t == 1 ? color.rgb(14, 243, 132) :  t == -1 ? color.rgb(255, 34, 34) : na
bull_t = trend_matter == false or t ==  1
bear_t = trend_matter == false or t == -1

plot(res, color = colort)
plot(sup, color = colort)
plot(showmid == true ? mid : na)


// Long and Short enter condition
buy  = bull_t == 1 and ta.lowest (2) < sup and close > open and close > sup
sell = bear_t == 1 and ta.highest(2) > res and close < open and close < res

plotshape( buy , color=color.rgb(6, 255, 23) , location = location.belowbar, style = shape.triangleup  , size = size.normal)
plotshape( sell, color=color.rgb(234, 4, 4) ,  location = location.abovebar, style = shape.triangledown, size = size.normal)





atr = ta.atr(100)



CLOSE=request.security(syminfo.tickerid, restf, close)
max = 0.0
max := CLOSE == CLOSE[1] ? math.max(max[1], atr) : atr
act_atr = 0.0
act_atr := CLOSE == CLOSE[1] ? act_atr[1] : max[1]

atr1 =  math.max(act_atr, atr) 

dis_sl = atr1 * ksl
dis_tp = atr1 * ktp


var float longsl  = open[1] - dis_sl
var float shortsl = open[1] + dis_sl
var float longtp =   open[1] + dis_tp
var float shorttp =  open[1] - dis_tp


longCondition = buy
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = sell
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


longsl  := strategy.position_size > 0  ? longsl[1]  : close - dis_sl
shortsl := strategy.position_size < 0 ? shortsl[1] : close + dis_sl
longtp  := strategy.position_size > 0  ? longtp[1]  : close + dis_tp
shorttp := strategy.position_size < 0 ? shorttp[1] : close - dis_tp




if strategy.position_size > 0 
    strategy.exit(id="My Long close Id", from_entry ="My Long Entry Id" , stop=longsl, limit=longtp)
if strategy.position_size < 0 
    strategy.exit(id="My Short close Id", from_entry ="My Short Entry Id" , stop=shortsl, limit=shorttp)