볼링거 밴드 역전 기반의 양적 전략

저자:차오장, 날짜: 2023-11-22 17:44:40
태그:

img

전반적인 설명

이 전략은?? 볼링거 밴드 역전 기반 양적 전략?? 이라고 불린다. 이 전략은 볼링거 밴드의 상부 및 하부 레일을 사용하여 입출을 결정한다. 가격이 밴드의 하부 레일 근처에 있고 하향 돌풍의 징후를 나타내면 가격이 역전될 수 있음을 나타냅니다. 가격이 상부 레일로 상승하면 가격이 하향으로 역전될 수 있음을 나타냅니다. 따라서 짧게 이동하십시오.

전략 논리

이 전략은 긴 엔트리를 결정하기 위해 RSI 지표를 사용합니다. 구체적으로, 가장 최근의 바의 폐쇄 가격이 이전 6 바의 가장 낮은 가격보다 낮는지, 한편 볼링거 밴드 폭 (BBW) 이 한 임계보다 크고 볼링거 밴드 비율 (BBR) 이 범위 내에 있는지 확인합니다. 이러한 기준이 충족되면 가격이 반전 될 수 있음을 나타냅니다. 따라서 길게 이동하십시오.

출입은 간단합니다. RSI가 70을 넘으면 가격이 과열되어 있음을 나타냅니다.

이점 분석

이 전략의 가장 큰 장점은 엔트리를 결정하기 위해 볼링거 밴드의 상부 및 하부 레일을 활용하는 것입니다. BB가 방향을 뒤집을 때, 단기 반전 기회를 잡기 위해 길거나 짧게 이동하십시오. 간단한 RSI 전략에 비해이 전략은 엔트리에 대한 더 신중한 기준을 가지고 있으며, 따라서 잘못된 거래를 피합니다.

또한, 전략은 매개 변수에 민감합니다. BBW와 BBR를 조정함으로써 다른 제품에 최적화되어 더 나은 결과를 얻을 수 있습니다.

위험 분석

주요 위험은 BB가 가격 반전을 완벽하게 예측하지 못한다는 것입니다. 타이밍이 부적절하다면 가장 좋은 항목이나 부동 손실을 놓치는 것을 쉽게 초래합니다.

또한, 단기 변동은 빈번한 입출출을 유발할 수 있으며, 수수료 및 미끄러짐으로 인한 비용을 증가시킬 수 있습니다. 역동 동력이 충분하지 않으면 출출에서 손실을 입을 위험이 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 매개 변수를 최적화 합니다. BBW, BBR 및 다른 매개 변수를 다른 제품에 대해 더 세밀하게 테스트하고 조정합니다.

  2. 최대 손실을 제한하기 위해 후속 스톱 손실 및 시간 스톱 손실과 같은 스톱 손실 메커니즘을 추가합니다.

  3. KDJ와 MACD와 같은 다른 지표를 포함하여 항목을 더 신뢰할 수 있습니다.

  4. 출구 논리를 개선합니다. 현재 출구는 간단합니다. 변동성에 따라 수익을 취하거나 출구를 최적화 할 수 있습니다.

결론

이 전략은 입상 및 출구에 대한 잠재적 인 반전 지점을 결정하기 위해 볼링거 밴드의 특성을 활용합니다. RSI와 같은 단일 지표와 비교하면 더 정확한 타이밍이 있습니다. 매개 변수 조정, 손실 중지 및 이익 취득으로 더 신뢰할 수 있습니다. 그러나 BB의 예측은 완벽하지 않으므로 여전히 성능에 약간의 무작위성이 있습니다.


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

//@version=4

//study(title = "Bolinger strategy", overlay=true)
strategy("Bolinger strategy",currency="SEK",default_qty_value=10000,default_qty_type=strategy.cash,max_bars_back=50)
len = 5
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


bbw3level = input(15, title="bbw3")
bbr3level = input(0.45, title="bbr3level")
bbrlower = input(0.4480, title="bbrlower")
bbrhigher = input(0.4560, title="bbrhigher")
sincelowestmin = input(7, title="sincelowestmin")
sincelowestmax = input(57, title="sincelowestmax")


length = input(20, minval=1)
mult = 20
src3 = close[3]
basis3 = sma(src3, length)
dev3 = mult * stdev(src3, length)
upper3 = basis3 + dev3
lower3 = basis3 - dev3
bbr3 = (src3 - lower3)/(upper3 - lower3)
bbw3 = (upper3-lower3)/basis3*100


basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
bbw = (upper-lower)/basis*100

criteriamet = 0
crossUnderB0 = crossunder(bbr,0)

since_x_under = barssince(crossUnderB0)


sincelowest = barssince(close[6] > close[3] and close[5] > close[3] and close[4] > close[3] and close[2] > close[3] and close[1] > close[3] and close > close[3] and bbw3 > bbw3level and bbr3 < bbr3level) //  and bbr3 < 0 

if sincelowest > sincelowestmin and sincelowest < sincelowestmax and bbr > bbrlower and bbr < bbrhigher
	criteriamet := 1
else
	criteriamet := 0	
//plot (criteriamet)

//exit 
exitmet = 0
if rsi > 70
	exitmet := 1
else
	exitmet := 0

if criteriamet == 1
	strategy.entry("long", strategy.long)
if exitmet == 1
	strategy.close("long")



더 많은