Triple BB Bands Breakout dengan RSI Strategy

Penulis:ChaoZhang, Tarikh: 2024-02-29 14:57:49
Tag:

img

Ringkasan

Strategi ini menggabungkan Bollinger Bands dan penunjuk RSI untuk menjana isyarat perdagangan. Ia memantau sama ada harga penutupan tiga candlestick menembusi jalur atas atau bawah pada masa yang sama, dan menggabungkan penunjuk Vortex dan penunjuk RSI untuk mengesahkan isyarat perdagangan.

Prinsip Strategi

Strategi ini berdasarkan prinsip-prinsip berikut:

  1. Menggunakan 20-period Bollinger Bands, mempertimbangkan mengeluarkan isyarat perdagangan apabila harga memecahkan atas atau bawah band pada penutupan
  2. Memerlukan tiga candlesticks untuk menembusi pada masa yang sama untuk mengelakkan breakouts palsu
  3. Gabungkan penunjuk Vortex, apabila sangat overbought VIP>1.25, apabila sangat oversold VIM>1.25, menapis isyarat
  4. Menggabungkan penunjuk RSI untuk menentukan overbought dan oversold, mempertimbangkan untuk pergi pendek apabila RSI memecahkan melalui 70, dan mempertimbangkan untuk pergi panjang apabila RSI memecahkan melalui 30
  5. Apabila syarat di atas dipenuhi, isyarat panjang dan pendek dihasilkan

Analisis Kelebihan

Kelebihan utama strategi ini ialah:

  1. Garis BB berganda menapis pecah palsu dan memastikan kebolehpercayaan pecah
  2. Indikator Vortex menilai kekuatan pasaran dan mengelakkan perdagangan yang tidak menguntungkan di pasaran
  3. Penunjuk RSI menilai kawasan overbought dan oversold, digabungkan dengan penunjuk Bollinger Bands untuk kemasukan
  4. Gabungan pelbagai penunjuk menilai keadaan pasaran secara komprehensif, dan kebolehpercayaan isyarat agak tinggi

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Bollinger Bands penunjuk sangat sensitif kepada parameter, panjang dan StdDev pengganda perlu dioptimumkan
  2. Indikator Vortex juga agak sensitif kepada parameter kitaran, yang perlu diselaraskan untuk pasaran yang berbeza
  3. Indikator RSI cenderung kepada perbezaan dan juga mungkin terlepas trend
  4. Jika terdapat perbezaan pendapat dalam penilaian tiga penunjuk, ia akan mustahil untuk memasuki, kehilangan beberapa peluang

Langkah kawalan risiko termasuk:

  1. Mengoptimumkan parameter dan menggunakan parameter dengan kadar kemenangan tertinggi dalam backtesting
  2. Menggabungkan penunjuk lain, seperti penapisan jumlah dagangan
  3. Melancarkan logik penilaian penunjuk dengan betul untuk mengelakkan peluang yang baik yang hilang

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan panjang dan pengganda StdDev Bollinger Bands untuk mencari parameter optimum
  2. Mengoptimumkan kitaran penunjuk Vortex untuk menjadikannya lebih sesuai untuk pasaran yang berbeza
  3. Meningkatkan penilaian penunjuk lain, seperti jumlah dagangan, MACD, dan lain-lain, untuk memperkayakan isyarat yang pelbagai
  4. Sesuaikan logik penilaian penunjuk untuk mengelakkan ketidakupayaan untuk masuk kerana perbezaan penunjuk
  5. Meningkatkan strategi stop loss untuk mengawal kerugian maksimum setiap perdagangan

Ringkasan

Strategi ini menggabungkan pelbagai penunjuk untuk penghakiman. Walaupun memastikan kebolehpercayaan isyarat, ia juga mempunyai beberapa masalah. Melalui pengoptimuman parameter, sumber isyarat yang diperkaya, logik penghakiman yang diselaraskan dan stop loss, dll., kestabilan dan keuntungan strategi dapat ditingkatkan lagi. Ia memberikan idea yang baik untuk perdagangan kuantitatif.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
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/
// © Noway0utstorm

//@version=5
strategy(title='RSI + BB  over 3 bar+--- vortex0.71.3  ', shorttitle='NoWaytruongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Lebih lanjut