볼린저 밴드 표준 편차 돌파 전략


생성 날짜: 2023-11-21 17:14:04 마지막으로 수정됨: 2023-11-21 17:14:04
복사: 0 클릭수: 812
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 표준 편차 돌파 전략

개요

이 전략은 고전적인 볼린저 파동대 지표에 기초하여, 가격이 마감할 때 더 많이 하고, 가격이 마감할 때 더 적게 하는 경향을 추적하는 돌파 전략에 속한다.

전략 원칙

  1. 기준은 55일 간소 이동 평균입니다.
  2. 상반도와 하반도 각각 기준선 아래의 각 표준차이다.
  3. 이 신호는 수직선으로 이동하는 것을 막아주며, 수직선으로 이동하는 것을 막아주며,
  4. 가격 폐쇄가 하향 궤도를 돌파했을 때 하위 신호가 발생한다.
  5. 표준 차이는 고전적인 표준 차이의 두 배가 아니라 표준 차이는 위험도를 낮춘다.

우위 분석

  1. 고정된 값이 아닌 표준값을 사용하는 것이 위험을 줄여줍니다.
  2. 55일 이동 평균은 중기 추세를 잘 나타냅니다.
  3. 위조 돌파구를 통과했다
  4. 트렌드 방향은 여러 시간 주기 분석을 통해 쉽게 파악할 수 있다.

위험 분석

  1. “이런 일이 벌어진다면,
  2. 소송료의 영향을 고려해야 합니다.
  3. 파격 신호는 가짜 파격일 수 있다.
  4. 손실이 발생할 수 있습니다.

스톱로스를 설정하거나 거래 수수료를 고려하거나 지표 필터를 추가하여 위험을 줄일 수 있습니다.

최적화 방향

  1. 기준선 변수를 최적화하여 최적의 평균선을 찾습니다.
  2. 최적화 기준은 매우 작고, 최적의 매개 변수를 찾습니다.
  3. 부가가치 지표와 같은 보조 판단.
  4. 손해 방지 장치 추가.

요약하다

이 전략의 전체적인 논리는 명확하며, 표준 차의 대역폭을 통해 위험을 조정하고, 종결의 돌파는 가짜 돌파를 피한다. 그러나 여전히 흔들림 손실을 방지하는 데 주의를 기울여야 하며, 상쇄 손실, 필터를 추가하는 등의 방법으로 최적화 할 수 있다.

전략 소스 코드
/*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")