볼링거 밴드 브레이크에 기반한 FiboBuLL 웨브 전략

저자:차오장, 날짜: 2023-12-01 14:11:56
태그:

img

전반적인 설명

FiboBuLL 웨이브 전략은 내 스크립트 페이지에서 찾을 수 있는 볼링거 밴드 연구의 필터 버전에서 적응되었습니다. 이 전략은 가격이 상위 밴드 위에 닫히면 길고 가격이 하위 밴드 아래에 닫히면 짧습니다.

볼링거 밴드 (Bollinger Bands) 는 20 기간의 간단한 이동 평균을 사용하여 중간 밴드에서 2 표준편차 떨어져있는 상위 및 하위 밴드 그래프와 함께 클래식 인 지표입니다. 이러한 밴드는 가격 변동성과 트렌드를 시각화하는데 도움이됩니다.

전략은 볼륨 / RSI / 기본 등과 같은 다른 매개 변수를 고려하지 않습니다. 따라서 사용자는 다른 지표 또는 기본에서 확인 된 것을 기반으로 한 재량을 사용해야합니다. 전략 결과는 순전히 길고 짧은 거래를 기반으로하며 사용자 정의 목표 또는 스톱 손실을 고려하지 않습니다.

이 전략 또는 볼링거 밴드 필터를 다른 지표와 함께 사용하여 BB 압축 또는 변동성에 기초하여 촛불 닫기에 갱도의 위반 / 실패를 조기에 파악하는 것이 확실히 유리합니다.

이 전략은 트렌드를 발견하기 위해 하이킨 아시 촛불에서 사용할 수 있지만 자산의 실제 가격을 반영하지 않기 때문에 거래 항목에 HA 촛불이 권장되지 않습니다.

전략 논리

FiboBuLL 웨이브 전략의 핵심 논리는 볼링거 밴드의 브레이크아웃을 기반으로 거래하는 것입니다. 볼링거 밴드는 중간 밴드, 상부 밴드 및 하부 밴드로 구성됩니다. 중간 밴드는 종료 가격의 21 기간 간단한 이동 평균입니다. 상부 밴드는 가격 변동의 상위 범위를 반영하는 중간 밴드 위의 1 표준 편차를 추가하여 계산됩니다. 하부 밴드는 가격 움직임의 하위 범위를 반영하는 중간 밴드 아래에 1 표준 편차를 빼어냅니다.

긴 신호는 닫기 가격이 상단 범위를 넘을 때 생성됩니다. 닫기 가격이 하단 범위를 넘을 때 짧은 신호가 유발됩니다. 긴 또는 짧은 포지션을 취한 후, 가격이 다시 반대 범위를 넘을 때 기존 거래가 종료됩니다.

이 전략은 상단 및 하단 대역에 대한 가격의 브레이크오웃을 추적하기 위해 바스싱트 함수를 사용합니다. 상단 브레이크오웃 이후의 바의 수가 하단 밴드보다 작을 때 긴 신호가 생성됩니다. 하단 밴드 브레이크오웃 이후의 바의 수가 상단 밴드보다 작을 때 짧은 신호가 유발됩니다.

중간 밴드 기간과 표준편차 곱셈 매개 변수를 조정함으로써 볼링거 밴드의 파업 감수성을 변경하여 진입 시기를 조정할 수 있습니다.

장점

FiboBuLL 웨이브 전략은 몇 가지 장점이 있습니다.

  1. BB 브레이크아웃에 기반한 간단한 논리, 이해하기 쉽다
  2. 파열 감수성은 매개 변수를 조정하여 제어 할 수 있습니다.
  3. BB 대역은 가격 변동과 추세를 시각화합니다.
  4. 다른 지표와 결합하여 정확도를 향상시킬 수 있습니다.
  5. 여러 시간 프레임에 적용

위험성

또한 FiboBuLL Wave 전략에는 몇 가지 위험이 있습니다.

  1. 잘못된 신호에 유연하며, BB 브레이크에 의존합니다.
  2. 파격 후의 추진력과 기간을 결정할 수 없습니다.
  3. 탈퇴 규칙이 없습니다
  4. 스톱 로스 없이 높은 위험

최적화는 다음 측면으로 이루어질 수 있습니다.

  1. 거짓 신호를 피하기 위해 다른 표시기를 사용하여 필터를 추가합니다.
  2. 역사적인 데이터에 기반한 매개 변수를 최적화
  3. 최대 손실을 제한하기 위해 손해를 중지 설정
  4. 지속성을 결정하기 위해 반전 요인을 추가하는 것을 고려하십시오.

더 나은 기회

FiboBuLL 웨이브 전략의 주요 최적화 방향:

  1. 부피 지표를 추가합니다. 예를 들어 A/D 라인은 약한 파장을 피하기 위해
  2. 정확성을 높이기 위해 과소 구매/ 과소 판매 지표 (예: RSI) 를 결합합니다.
  3. 백테스트 결과를 기반으로 기간과 오차 곱셈과 같은 매개 변수를 최적화
  4. 스톱 로스를 설정하고 리스크를 제어하고 수익을 차단하기 위해 이윤을 취합니다.
  5. 경향 및 역전 필터를 고려하여 방향성을 결정합니다.
  6. 다양한 제품과 시간 프레임에 최적의 매개 변수를 테스트합니다.

위의 개선으로 FiboBuLL Wave 전략의 안정성과 수익성이 크게 향상될 수 있습니다.

요약

FiboBuLL 웨이브 전략은 가격 변동성을 추적하기 위해 브레이크오웃과 중간 밴드로 회귀를 식별하는 볼링거 밴드의 기본 원리를 활용합니다. 간단한 개념과 광범위한 적용 가능성으로 시장 변동을 측정하는 효과적인 접근법으로 사용됩니다.

그러나 브레이크오웃에만 의존하는 것은 잘못된 신호와 위프사우를 생성하는 경향이 있습니다. 따라서 전략의 유용성을 극대화하기 위해 브레이크오웃 신뢰성을 결정하기 위해 볼륨, 트렌드, 지표 등을 사용하는 확인을 통합해야하며, 위험을 제어하기 위해 스톱 로스/프로피트를 구현해야합니다.

FiboBuLL 웨이브 전략은 가격 액션에 기반한 거래를 설계하는 기본 프레임워크를 제공합니다. 지속적인 최적화와 추가 요소 통합으로 거래 의사 결정에 강력한 도구가 될 가능성이 있습니다.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave (A version of Bollinger Bands Breakout Strategy By Trade Chartist)', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title='Source')
length = input.int(21, minval=1, title='SMA length')  // 20 for classis Bollinger Bands SMA line (basis)


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

Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
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 = ta.barssince(long)
S1 = ta.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=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, 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.new(color.teal, 85), title='Top Fill')  //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85)  //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')


// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(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() =>
    time >= start and time <= finish ? true : false

if window() and (Show == 'Longs Only' or Show == 'Both')
    strategy.entry('AL', direction=strategy.long, when=longSignal)
    strategy.close('LongAL', when=shortSignal, comment='AL KAPA')

if window() and (Show == 'Shorts Only' or Show == 'Both')
    strategy.entry('SAT', direction=strategy.short, when=shortSignal)
    strategy.close('SAT', when=longSignal, comment='SAT KAPA')




















더 많은