Strategi Sokongan dan Rintangan CCI Dinamik


Tarikh penciptaan: 2024-01-22 16:37:46 Akhirnya diubah suai: 2024-01-22 16:37:46
Salin: 1 Bilangan klik: 725
1
fokus pada
1617
Pengikut

Strategi Sokongan dan Rintangan CCI Dinamik

Gambaran keseluruhan

Strategi ini menggunakan titik-titik penting dalam indikator CCI untuk mengira sokongan dan rintangan yang dinamik, digabungkan dengan penilaian trend untuk mencari isyarat membeli dan menjual. Strategi ini menggabungkan ciri-ciri pembalikan CCI dan keupayaan untuk mengesan trend, yang bertujuan untuk menangkap titik-titik perubahan dalam trend pertengahan untuk menghasilkan keuntungan.

Prinsip Strategi

Indeks CCI dapat menunjukkan sama ada pasaran terlalu lemah atau terlalu kuat, 80 dan -80 adalah dua nilai terhad yang boleh digunakan untuk menentukan sama ada pasaran memasuki keadaan overbuying atau overselling. Strategi ini menggunakan ciri CCI ini untuk mendapatkan pusat atas dan pusat bawah dengan mengira titik pusat setiap 50 garis K di kedua-dua belah kiri dan kanan, dan kemudian membina garis rintangan dan garis sokongan untuk dinamika zon hambatan di atas dasar titik pusat.

Apabila harga penutupan lebih tinggi daripada harga pembukaan dan lebih rendah daripada garisan sokongan atas, ia menghasilkan isyarat beli; apabila harga penutupan lebih rendah daripada harga pembukaan dan lebih tinggi daripada garisan rintangan bawah, ia menghasilkan isyarat jual. Untuk menyaring isyarat perdagangan dari arah trend bukan utama, strategi ini juga menggabungkan EMA dan indikator kecenderungan untuk menilai arah trend utama semasa.

Hentikan dan hentikan berdasarkan pengiraan dinamik ATR, yang menjadikan kawalan risiko strategi ini lebih munasabah.

Analisis kelebihan

  1. Menggunakan ciri-ciri pembalikan CCI, pilih tempat berhampiran dengan titik pembalikan untuk membeli dan menjual untuk meningkatkan peluang keuntungan.
  2. Menggabungkan penilaian trend, mengelakkan operasi berlawanan, mengurangkan kerugian.
  3. Tetapan Stop Loss Dinamika menjadikan kawalan risiko lebih munasabah.
  4. Parameter yang boleh disesuaikan seperti kitaran CCI, saiz zon pelindung dan sebagainya, menyesuaikan diri dengan lebih banyak keadaan pasaran.

Analisis risiko

  1. Indeks CCI mudah menghasilkan isyarat palsu dan perlu disertakan dengan penapis trend.
  2. Tidak semestinya pembalikan itu berjaya, tetapi ada risiko kerugian yang mungkin berlaku.
  3. Tetapan parameter yang tidak betul boleh menyebabkan terlalu banyak perdagangan atau kehilangan peluang perdagangan.

Risiko boleh dikurangkan dengan cara mengoptimumkan parameter, menyesuaikan marjin stop loss dan sebagainya. Selain itu, strategi ini boleh digunakan sebagai alat tambahan untuk indikator lain, tanpa bergantung sepenuhnya pada isyarat perdagangan mereka.

Arah pengoptimuman

  1. Optimumkan saiz zon pelindung untuk menyesuaikan diri dengan pasaran yang berbeza.
  2. Mengoptimumkan parameter kitaran ATR untuk mendapatkan penghentian kerugian dinamik yang lebih tepat.
  3. Cuba seting parameter CCI yang berbeza.
  4. Uji kebolehan lain untuk menilai trend.

ringkaskan

Strategi ini mengintegrasikan keupayaan penyaringan pelbagai ruang dalam indikator CCI dengan pengesahan penyaringan penghakiman trend, dan mempunyai nilai sebenar. Hentian kemusnahan dinamik juga menjadikan strategi ini dapat dikawal risiko dalam aplikasi sebenar.

Kod 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)