볼린저 밴드 돌파에 기반한 FiboBuLL 파동 전략


생성 날짜: 2023-12-01 14:11:56 마지막으로 수정됨: 2023-12-01 14:11:56
복사: 0 클릭수: 439
1
집중하다
1212
수행원

볼린저 밴드 돌파에 기반한 FiboBuLL 파동 전략

개요

FiboBuLL 파동 전략은 브린 띠의 필터 버전을 기반으로 한 거래 전략으로, 내 프로그램 페이지에서 찾을 수 있습니다. 이 전략은 가격 마감이 상반기보다 높을 때 더 많이 하고, 가격 마감이 하반기보다 낮을 때 더 많이 합니다.

브린 띠는 20주기의 간단한 이동 평균과 기준선에서 2개의 표준 차이의 상하의 궤도를 사용하는 고전적인 지표이다. 이 궤도 띠는 가격의 위치와 관련한 띠의 위치에 따라 가격의 변동성과 추세를 시각화하는데 도움이 된다.

이 전략은 거래량, RSI, 기본 등과 같은 다른 매개 변수를 고려하지 않으며, 따라서 사용자는 다른 지표로부터의 확인 또는 기본 상황에 따라 재량권을 행사해야합니다. 이 전략의 결과는 단순히 다단계 및 공백 거래에 기반하며, 사용자가 정의한 목표 또는 정지 손실을 고려하지 않습니다.

이 전략은 가격이 연속적인 기둥에서 상쇄를 거치면 가장 효과적입니다. 부린의 압축이나 변동성에 따라 상쇄를 거치면 다른 지표와 함께 이 전략이나 부린 필터를 사용하는 것이 현명합니다.

이 전략은 일선과 분기차트에서 사용할 수 있으며, 양선, 음선 전략에서 트렌드를 발견할 수 있지만, 자산의 실제 가격을 반영하지 못하기 때문에 거래 입력을 사용하는 것은 권장되지 않습니다.

전략 원칙

FiboBuLL 파동 전략의 핵심 원칙은 부린 띠 지표에 기반한 가격 판단의 돌파이다. 부린 띠는 중궤, 상궤, 하궤로 구성된다. 중궤는 종전 가격의 21주기 간단한 이동 평균이다. 상궤는 중궤와 중궤의 거리를 더한 1배 이상의 표준 차이를 계산하여, 가격의 위쪽 변동 범위를 반영한다. 하궤는 중궤와 거리의 아래쪽 변동 범위를 제거한 1배 이상의 표준 차이를 계산하여, 가격의 아래쪽 변동 범위를 반영한다.

종결 가격 위쪽이 궤도를 통과할 때 다수 신호가 발생; 종결 가격 아래쪽이 궤도를 통과할 때 다수 신호가 발생. 다수 다수 후, 다시 반대 궤도를 돌파할 때 평점.

이 전략은 barssince 함수를 사용하여 상하철의 돌파구에 대한 가격을 추적한다. 상하철의 돌파구에 대한 돌파구 수가 하하철보다 적을 때 다중 신호가 발생하고, 하하철의 돌파구에 대한 돌파구 수가 상하철에 대한 돌파구 수보다 적을 때 공백 신호가 발생한다.

중궤도주기변수와 표준비차배수변수를 조정함으로써, 부린띠의 돌파감각을 변화시킬 수 있으며, 이를 통해 진출 시기를 조정할 수 있다.

우위 분석

FiboBuLL 파동 전략은 다음과 같은 장점이 있습니다:

  1. 브린 띠를 사용하여 가격 돌파구를 판단하는 방법은 간단하고 이해하기 쉽습니다.
  2. 파라미터를 조정하여 돌파의 감수성을 제어할 수 있습니다.
  3. 브린 벨트를 시각화하여 가격 변동과 추세를 파악하는 데 도움을 줍니다.
  4. 의사 결정의 정확성을 높이기 위해 다른 지표와 함께 사용할 수 있습니다.
  5. 여러 시간 주기에 사용할 수 있고, 적용성이 강하다

위험 분석

피보불 (FiboBuLL) 웨이브 전략에는 다음과 같은 위험도 있습니다.

  1. 브린 벨트 돌파구에 전적으로 의존하면 잘못된 신호가 발생할 수 있습니다.
  2. 파격이 얼마나 지속되는지 알 수 없습니다.
  3. 파격 이후의 가격 반전을 판단할 수 없다
  4. 손실이 없는 설정, 손실 위험이 높습니다.

위와 같은 위험에는 다음과 같은 측면에서 최적화할 수 있습니다.

  1. 다른 지표와 함께 판단하여 잘못된 신호를 피하십시오.
  2. 역사 데이터 테스트에 따라 매개 변수 설정
  3. 최대 손실을 제어하는 스톱포인트 설정
  4. 지속성을 판단하기 위한 역전 요소를 고려하는 것

최적화 방향

FiboBuLL 파동 전략에는 다음과 같은 몇 가지 주요 최적화 방향이 있습니다.

  1. 에너지 기류 지표와 같은 교류량 지표 판단에 추가하여 무력 허위 돌파구를 피하십시오.
  2. RSI와 같은 과매매 지표 판단과 함께 의사 결정의 정확성을 향상시킵니다.
  3. 역사 회귀에 따라 최적화 매개 변수 설정을 통해 최적의 주기와 표준 차이의 배수를 결정합니다.
  4. 스톱로스 및 스톱 레벨을 설정하고, 위험을 통제하고, 수익을 잠금화합니다.
  5. 추세와 반전 필터링 조건을 고려하여 지속 방향을 판단합니다.
  6. 다양한 품종과 주기에서 테스트하는 파라미터 설정

위의 몇 가지 최적화를 통해 FiboBuLL 파동 전략의 안정성과 수익성을 크게 향상시킬 수 있습니다.

요약하다

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')