Strategi Breakout Deviasi Standar Bollinger Band


Tanggal Pembuatan: 2023-11-21 17:14:04 Akhirnya memodifikasi: 2023-11-21 17:14:04
menyalin: 0 Jumlah klik: 812
1
fokus pada
1617
Pengikut

Strategi Breakout Deviasi Standar Bollinger Band

Ringkasan

Strategi ini didasarkan pada indikator Bollinger Bands klasik, melakukan over saat harga close breaks up, dan short saat harga close breaks down, termasuk dalam strategi trend tracking breakout.

Prinsip Strategi

  1. Referensi adalah rata-rata bergerak sederhana selama 55 hari.
  2. Garis atas dan bawah berbeda pada setiap standar di bawah garis dasar.
  3. Ketika harga mendekati titik terendah, sinyal ini akan muncul.
  4. Sebuah sinyal shorting dihasilkan ketika harga close breaks down.
  5. Menggunakan standar deviasi dan bukan standar deviasi klasik dua kali lipat, mengurangi risiko.

Analisis Keunggulan

  1. Menggunakan standar deviasi dan bukan nilai tetap mengurangi risiko.
  2. Rata-rata bergerak 55 hari lebih baik untuk menunjukkan tren jangka menengah.
  3. Penutupan menembus penutupan palsu.
  4. Hal ini dapat dengan mudah diidentifikasi dengan analisa multi-siklus.

Analisis risiko

  1. “Kembalilah ke tempat asalmu”, katanya.
  2. Anda harus mempertimbangkan dampak biaya.
  3. Sinyal penembusan mungkin palsu.
  4. Ada kemungkinan terjadinya kerugian.

Anda dapat mengurangi risiko dengan mengatur stop loss, mempertimbangkan biaya transaksi, atau menambahkan filter indikator.

Arah optimasi

  1. Optimalkan parameter garis acuan untuk mencari garis rata-rata optimal.
  2. Optimalisasi standar yang berbeda-beda untuk menemukan parameter optimal.
  3. Penambahan indikator harga kuantitatif dan penilaian tambahan.
  4. Menambahkan mekanisme stop loss.

Meringkaskan

Strategi ini secara keseluruhan logis jelas, dengan standar bandwidth defisit untuk menyesuaikan risiko, penutupan terobosan untuk menghindari terobosan palsu. Namun, tetap perlu berhati-hati untuk mencegah kerugian getaran, dapat dioptimalkan dengan cara menghentikan kerugian, menambahkan filter dan sebagainya.

Kode Sumber Strategi
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//┌───── •••• ─────┐//
//   TradeChartist  //
//└───── •••• ─────┘//

//Bollinger Bands is a classic indicator that uses a simple moving average of 20 periods along with upper and lower bands that are 2 standard deviations away from the basis line. 
//These bands help visualize price volatility and trend based on where the price is in relation to the bands.

//This Bollinger Bands filter plots a long signal when price closes above the upper band and plots a short signal when price closes below the lower band. 
//It doesn't take into account any other parameters such as Volume/RSI/fundamentals etc, so user must use discretion based on confirmations from another indicator or based on fundamentals.

//This filter's default is 55 SMA and 1 standard deviation, but can be changed based on asset type

//It is definitely worth reading the 22 rules of Bollinger Bands written by John Bollinger. 


strategy(shorttitle="BB Breakout Strategy", title="Bollinger Bands Filter", overlay=true, 
             pyramiding=1, currency=currency.NONE , 
             initial_capital = 10000, default_qty_type = strategy.percent_of_equity, 
             default_qty_value=100, calc_on_every_tick= true, process_orders_on_close=false)

src         = input(close, title = "Source")
length      = input(55, minval=1, title = "SMA length")// 20 for classis Bollinger Bands SMA line (basis)


mult        = input(1., minval=0.236, maxval=2, title="Standard Deviation")//2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis       = sma(src, length)
dev         = mult * stdev(src,length)

CC          = input(true, "Color Bars")


upper       = basis + dev
lower       = basis - dev

//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.

short       = src<lower// and rsi(close,14)<40
long        = src>upper// and rsi(close,14)>60

L1          = barssince(long)
S1          = barssince(short)

longSignal  = L1<S1 and not (L1<S1)[1]
shortSignal = S1<L1 and not (S1<L1)[1]

//Plots and Fills



////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)  


// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)  



p1          = plot(upper, color=#ff0000, display=display.all, transp=75, title = "Upper Band")
p2          = plot(lower, color=#008000, display=display.all, transp=75, title = "Lower Band")


p           = plot(basis, color=L1<S1?#008000:S1<L1?#ff0000:na, linewidth=2, editable=false, title="Basis")


fill(p,p1, color=color.teal, transp=85, title = "Top Fill") //fill for basis-upper
fill(p,p2, color=color.orange, transp=85, title = "Bottom Fill")//fill for basis-lower


//Barcolor

bcol        = src>upper?color.new(#8ceb07,0): 
             src<lower?color.new(#ff0000,0):
             src>basis?color.green:
             src<basis?color.red:na


barcolor(CC?bcol:na, editable=false, title = "Color Bars")



// //Alerts ----  // Use 'Once per bar close'

// alertcondition(condition=longSignal, title="Long - BB Filter", message='BB Filter Long @ {{close}}') // Use 'Once per bar close'
// alertcondition(condition=shortSignal, title="Short - BB Filter", message='BB Filter Short @ {{close}}')  // Use 'Once per bar close'

Notestart1 = input(true, "╔═══ Time Range to BackTest ═══╗") 


// === INPUT BACKTEST RANGE ===
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2018, title="From Year", minval=2015)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false 

if(window())
    strategy.entry("Long", long=true, when =  longSignal)
    // strategy.close("Long", when = (short and S3==0), comment = "Close Long")

if(window())
    strategy.entry("Short", long=false, when = shortSignal)
    // strategy.close("Short", when = (long and L3==0), comment = "Close Short")