Strategi ini menggunakan titik pusingan penunjuk CCI untuk mengira tahap sokongan dan rintangan dinamik, dan menggabungkan penilaian trend untuk mencari isyarat beli dan jual. Strategi ini mengintegrasikan ciri-ciri pembalikan CCI dan keupayaan penjejakan trend untuk menangkap titik pembalikan dalam trend jangka menengah untuk keuntungan.
Indikator CCI boleh menunjukkan sama ada pasaran terlalu lemah atau terlalu kuat. Dua ekstrem 80 dan -80 boleh digunakan untuk menentukan sama ada pasaran telah memasuki keadaan overbought atau oversold. Strategi ini menggunakan ciri CCI ini. Dengan mengira titik pusingan 50 bar kiri dan kanan, titik pusingan atas dan bawah diperoleh. Kemudian garis sokongan dan rintangan dibina secara dinamik dengan menambah atau mengurangkan penyangga berdasarkan titik pusingan.
Isyarat beli dihasilkan apabila penutupan lebih tinggi daripada terbuka dan lebih rendah daripada tahap sokongan atas. Isyarat jual dihasilkan apabila penutupan lebih rendah daripada terbuka dan lebih tinggi daripada tahap rintangan yang lebih rendah. Untuk menapis isyarat perdagangan terhadap arah trend utama, strategi ini juga menggabungkan EMA dan penunjuk cerun untuk menentukan arah trend utama semasa. Dagangan masuk panjang hanya diletakkan apabila trend ditentukan sebagai bullish. Dagangan masuk pendek hanya diletakkan apabila trend ditentukan sebagai bearish.
Stop loss dan mengambil keuntungan dikira secara dinamik berdasarkan penunjuk ATR, menjadikan kawalan risiko strategi ini lebih munasabah.
Kaedah-kaedah seperti pengoptimuman parameter, menyesuaikan julat stop loss, dan lain-lain boleh membantu mengurangkan risiko. Juga, strategi ini boleh digunakan sebagai alat tambahan untuk penunjuk lain, tanpa perlu bergantung sepenuhnya pada isyaratnya.
Strategi ini mengintegrasikan keupayaan skrining panjang / pendek dari CCI dan pengesahan penapis dari penghakiman trend, yang mempunyai nilai praktikal tertentu. Hentikan kehilangan dinamik dan ambil keuntungan juga menjadikan risiko terkawal apabila menggunakan strategi dalam perdagangan sebenar. Melalui pengoptimuman parameter dan penambahbaikan, hasil yang lebih baik dapat diharapkan.
/*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)