FiboBuLL 웨이브 전략은 내 스크립트 페이지에서 찾을 수 있는 볼링거 밴드 연구의 필터 버전에서 적응되었습니다. 이 전략은 가격이 상위 밴드 위에 닫히면 길고 가격이 하위 밴드 아래에 닫히면 짧습니다.
볼링거 밴드 (Bollinger Bands) 는 20 기간의 간단한 이동 평균을 사용하여 중간 밴드에서 2 표준편차 떨어져있는 상위 및 하위 밴드 그래프와 함께 클래식 인 지표입니다. 이러한 밴드는 가격 변동성과 트렌드를 시각화하는데 도움이됩니다.
전략은 볼륨 / RSI / 기본 등과 같은 다른 매개 변수를 고려하지 않습니다. 따라서 사용자는 다른 지표 또는 기본에서 확인 된 것을 기반으로 한 재량을 사용해야합니다. 전략 결과는 순전히 길고 짧은 거래를 기반으로하며 사용자 정의 목표 또는 스톱 손실을 고려하지 않습니다.
이 전략 또는 볼링거 밴드 필터를 다른 지표와 함께 사용하여 BB 압축 또는 변동성에 기초하여 촛불 닫기에 갱도의 위반 / 실패를 조기에 파악하는 것이 확실히 유리합니다.
이 전략은 트렌드를 발견하기 위해 하이킨 아시 촛불에서 사용할 수 있지만 자산의 실제 가격을 반영하지 않기 때문에 거래 항목에 HA 촛불이 권장되지 않습니다.
FiboBuLL 웨이브 전략의 핵심 논리는 볼링거 밴드의 브레이크아웃을 기반으로 거래하는 것입니다. 볼링거 밴드는 중간 밴드, 상부 밴드 및 하부 밴드로 구성됩니다. 중간 밴드는 종료 가격의 21 기간 간단한 이동 평균입니다. 상부 밴드는 가격 변동의 상위 범위를 반영하는 중간 밴드 위의 1 표준 편차를 추가하여 계산됩니다. 하부 밴드는 가격 움직임의 하위 범위를 반영하는 중간 밴드 아래에 1 표준 편차를 빼어냅니다.
긴 신호는 닫기 가격이 상단 범위를 넘을 때 생성됩니다. 닫기 가격이 하단 범위를 넘을 때 짧은 신호가 유발됩니다. 긴 또는 짧은 포지션을 취한 후, 가격이 다시 반대 범위를 넘을 때 기존 거래가 종료됩니다.
이 전략은 상단 및 하단 대역에 대한 가격의 브레이크오웃을 추적하기 위해 바스싱트 함수를 사용합니다. 상단 브레이크오웃 이후의 바의 수가 하단 밴드보다 작을 때 긴 신호가 생성됩니다. 하단 밴드 브레이크오웃 이후의 바의 수가 상단 밴드보다 작을 때 짧은 신호가 유발됩니다.
중간 밴드 기간과 표준편차 곱셈 매개 변수를 조정함으로써 볼링거 밴드의 파업 감수성을 변경하여 진입 시기를 조정할 수 있습니다.
FiboBuLL 웨이브 전략은 몇 가지 장점이 있습니다.
또한 FiboBuLL Wave 전략에는 몇 가지 위험이 있습니다.
최적화는 다음 측면으로 이루어질 수 있습니다.
FiboBuLL 웨이브 전략의 주요 최적화 방향:
위의 개선으로 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')