Sumber dimuat naik... memuat...

Strategi Dagangan Berbilang Penunjuk yang Difilterkan dengan Bollinger Bands dan Woodies CCI

Penulis:ChaoZhang, Tarikh: 2024-12-27 15:32:30
Tag:BBCCIMAOBVATRSMATPSL

img

Ringkasan

Strategi ini adalah sistem perdagangan pelbagai penunjuk yang menggabungkan Bollinger Bands, Woodies CCI (Commodity Channel Index), Moving Averages (MA), dan On-Balance Volume (OBV). Ia menggunakan Bollinger Bands untuk menyediakan julat turun naik pasaran, penunjuk CCI untuk penapisan isyarat, dan menggabungkan sistem MA dengan pengesahan jumlah untuk melaksanakan dagangan apabila trend pasaran jelas. Di samping itu, ia menggunakan ATR untuk penempatan stop-loss dinamik dan mengambil keuntungan untuk mengawal risiko dengan berkesan.

Prinsip Strategi

Logik teras adalah berdasarkan elemen utama berikut:

  1. Menggunakan dua Band Bollinger deviasi standard (1x dan 2x) untuk membina saluran turun naik harga
  2. Menggunakan penunjuk CCI 6 tempoh dan 14 tempoh sebagai penapis isyarat, memerlukan pengesahan dari kedua-dua tempoh
  3. Menggabungkan purata bergerak 50 tempoh dan 200 tempoh untuk menentukan trend pasaran
  4. Mengukuhkan trend jumlah melalui OBV 10 tempoh yang halus
  5. Menggunakan ATR 14 tempoh untuk paras stop-loss dan mengambil keuntungan dinamik

Kelebihan Strategi

  1. Penyelarasan silang pelbagai penunjuk mengurangkan isyarat palsu dengan ketara
  2. Gabungan Bollinger Bands dan CCI memberikan penilaian volatiliti pasaran yang tepat
  3. Sistem MA jangka panjang dan jangka pendek berkesan menangkap trend utama
  4. OBV mengesahkan sokongan jumlah, meningkatkan kebolehpercayaan isyarat
  5. Tetapan stop-loss dan mengambil keuntungan dinamik disesuaikan dengan keadaan pasaran yang berbeza
  6. Isyarat dagangan yang jelas dengan pelaksanaan standard, sesuai untuk pelaksanaan kuantitatif

Risiko Strategi

  1. Pelbagai penunjuk boleh menyebabkan isyarat tertunda
  2. Stop-loss yang kerap di pasaran pelbagai
  3. Risiko penyesuaian parameter yang berlebihan
  4. Stop-loss mungkin tidak mencetuskan dengan cepat dalam tempoh yang tidak menentu Langkah-langkah pengurangan:
  • Sesuaikan parameter penunjuk secara dinamik untuk kitaran pasaran yang berbeza
  • Memantau penarikan untuk kawalan kedudukan
  • Pengesahan parameter biasa
  • Tetapkan had kerugian maksimum

Arahan pengoptimuman

  1. Memperkenalkan penunjuk turun naik untuk menyesuaikan kedudukan dalam tempoh turun naik yang tinggi
  2. Tambah penapisan kekuatan trend untuk mengelakkan perdagangan pasaran yang berbeza
  3. Mengoptimumkan pemilihan tempoh CCI untuk meningkatkan kepekaan isyarat
  4. Meningkatkan pengurusan keuntungan/kerugian dengan mengambil keuntungan separa
  5. Melaksanakan sistem amaran anomali jumlah

Ringkasan

Ini adalah sistem perdagangan lengkap berdasarkan kombinasi penunjuk teknikal yang meningkatkan ketepatan perdagangan melalui pengesahan isyarat berbilang. Reka bentuk strategi adalah munasabah dengan kawalan risiko yang betul dan mempunyai nilai aplikasi praktikal yang baik.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(shorttitle="BB Debug + Woodies CCI Filter", title="Debug Buy/Sell Signals with Woodies CCI Filter", overlay=true)

// Input Parameters
length = input.int(20, minval=1, title="BB MA Length")
src = input.source(close, title="BB Source")
mult1 = input.float(1.0, minval=0.001, maxval=50, title="BB Multiplier 1 (Std Dev 1)")
mult2 = input.float(2.0, minval=0.001, maxval=50, title="BB Multiplier 2 (Std Dev 2)")
ma_length = input.int(50, minval=1, title="MA Length")
ma_long_length = input.int(200, minval=1, title="Long MA Length")
obv_smoothing = input.int(10, minval=1, title="OBV Smoothing Length")
atr_length = input.int(14, minval=1, title="ATR Length") // ATR Length for TP/SL

// Bollinger Bands
basis = ta.sma(src, length)
dev1 = mult1 * ta.stdev(src, length)
dev2 = mult2 * ta.stdev(src, length)

upper_1 = basis + dev1
lower_1 = basis - dev1
upper_2 = basis + dev2
lower_2 = basis - dev2

plot(basis, color=color.blue, title="BB MA")
p1 = plot(upper_1, color=color.new(color.green, 80), title="BB Upper 1")
p2 = plot(lower_1, color=color.new(color.green, 80), title="BB Lower 1")
p3 = plot(upper_2, color=color.new(color.red, 80), title="BB Upper 2")
p4 = plot(lower_2, color=color.new(color.red, 80), title="BB Lower 2")

fill(p1, p2, color=color.new(color.green, 90))
fill(p3, p4, color=color.new(color.red, 90))

// Moving Averages
ma_short = ta.sma(close, ma_length)
ma_long = ta.sma(close, ma_long_length)
plot(ma_short, color=color.orange, title="MA Short")
plot(ma_long, color=color.yellow, title="MA Long")

// OBV and Smoothing
obv = ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0)
obv_smooth = ta.sma(obv, obv_smoothing)

// Debugging: Buy/Sell Signals
debugBuy = ta.crossover(close, ma_short)
debugSell = ta.crossunder(close, ma_short)

// Woodies CCI
cciTurboLength = 6
cci14Length = 14
cciTurbo = ta.cci(src, cciTurboLength)
cci14 = ta.cci(src, cci14Length)

// Filter: Only allow trades when CCI confirms the signal
cciBuyFilter = cciTurbo > 0 and cci14 > 0
cciSellFilter = cciTurbo < 0 and cci14 < 0

finalBuySignal = debugBuy and cciBuyFilter
finalSellSignal = debugSell and cciSellFilter

// Plot Debug Buy/Sell Signals
plotshape(finalBuySignal, title="Filtered Buy", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.normal)
plotshape(finalSellSignal, title="Filtered Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal)

// Change candle color based on filtered signals
barcolor(finalBuySignal ? color.lime : finalSellSignal ? color.red : na)

// ATR for Stop Loss and Take Profit
atr = ta.atr(atr_length)
tp_long = close + 2 * atr  // Take Profit for Long = 2x ATR
sl_long = close - 1 * atr  // Stop Loss for Long = 1x ATR
tp_short = close - 2 * atr // Take Profit for Short = 2x ATR
sl_short = close + 1 * atr // Stop Loss for Short = 1x ATR

// Strategy Execution
if (finalBuySignal)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Buy", limit=tp_long, stop=sl_long)

if (finalSellSignal)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Sell", limit=tp_short, stop=sl_short)

// Check for BTC/USDT pair
isBTCUSDT = syminfo.ticker == "BTCUSDT"

// Add alerts only for BTC/USDT
alertcondition(isBTCUSDT and finalBuySignal, title="BTCUSDT Buy Signal", message="Buy signal detected for BTCUSDT!")
alertcondition(isBTCUSDT and finalSellSignal, title="BTCUSDT Sell Signal", message="Sell signal detected for BTCUSDT!")

Berkaitan

Lebih lanjut