Strategi Kuantitatif: Bollinger Bands RSI CCI Crossover Strategy

Penulis:ChaoZhang, Tarikh: 2023-12-20 16:24:49
Tag:

img

Ringkasan

Strategi ini menggabungkan Bollinger Bands, Indeks Kekuatan Relatif (RSI) dan Indeks Saluran Komoditi (CCI) untuk mencari isyarat silang dan menjana isyarat beli dan jual.

Logika Strategi

Bollinger Bands

Band Bollinger terdiri daripada band tengah, band atas dan band bawah. Band tengah biasanya adalah purata bergerak 20 hari. Band atas adalah dua penyimpangan standard di atas band tengah. Band bawah adalah dua penyimpangan standard di bawah. Harga berhampiran band bawah mungkin menunjukkan keadaan oversold. Harga berhampiran band atas mungkin menunjukkan keadaan overbought.

RSI

RSI mengukur kelajuan pergerakan harga ke arah ke atas dan ke bawah. Ia menunjukkan overbought di atas 70 dan oversold di bawah 30. Apabila RSI jatuh dari atas 70, ia boleh menjadi isyarat jual. Apabila RSI bangkit dari bawah 30, ia boleh menjadi isyarat beli.

CCI

CCI mengukur sejauh mana harga telah bergerak dari harga purata. Bacaan di atas +100 menunjukkan keadaan overbought. Bacaan di bawah -100 menunjukkan keadaan oversold. CCI mencerminkan tahap harga yang melampau.

Isyarat silang

Strategi ini menggunakan Bollinger Bands untuk menilai tahap overbought / oversold jangka pendek, RSI untuk mengukur momentum bullish / bearish dan CCI untuk mengenal pasti harga yang melampau.

Kelebihan

  1. Menggabungkan beberapa penunjuk meningkatkan ketepatan isyarat dan mengurangkan isyarat palsu
  2. Menangkap peluang pembalikan pada titik perubahan
  3. Parameter yang boleh disesuaikan menyesuaikan diri dengan keadaan pasaran yang berbeza
  4. Penapis CCI yang halus mengurangkan bunyi bising dan meningkatkan kestabilan

Risiko dan Penyelesaian

  1. Ketiga-tiga penunjuk boleh menghasilkan isyarat buruk yang mengakibatkan kerugian. Parameter boleh longgar atau menambah penapis lain.
  2. CCI bergelut dengan pasaran yang berbelit-belit. boleh menggantikan dengan purata bergerak atau indikator turun naik.
  3. Hanya stop loss di tempat tanpa mengambil keuntungan. boleh menambah trailing berhenti untuk mengunci dalam beberapa keuntungan.

Peluang Pengoptimuman

  1. Uji lebih banyak kombinasi parameter untuk mencari persediaan optimum
  2. Memperkenalkan pembelajaran mesin untuk menyesuaikan parameter automatik
  3. Menambah strategi mengambil keuntungan dengan sasaran keuntungan
  4. Menggabungkan lebih banyak penunjuk seperti MACD, KD untuk mengesahkan isyarat

Kesimpulan

Strategi ini menganalisis keadaan pasaran secara keseluruhan menggunakan Bollinger Bands, RSI dan penunjuk CCI. Ia mengenal pasti titik belokan melalui isyarat silang untuk membalikkan pasaran perdagangan. Dengan pengoptimuman lanjut seperti penyesuaian parameter, mekanisme mengambil keuntungan dan lain-lain, ia boleh menjadi strategi kontra trend yang kukuh untuk pelbagai persekitaran pasaran.


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

//@version=5
strategy(shorttitle="BBRSIstr", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

//RSI
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

rsiPlot = plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

//cci
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(0, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


longCBB= close < lower
shortCBB = close>upper
longBRSI = rsi < 33
shortBRSI = rsi > 70
longcci = cci < -215
shortcci = cci > 250

strategy.entry("LONG", strategy.long, when = longCBB and longBRSI and longcci)
strategy.exit("Exit ", profit = 600)
strategy.entry("SHORT", strategy.short, when = shortCBB and shortBRSI and shortcci)
strategy.exit("Exit ", profit = 600)

Lebih lanjut