이것은 볼링거 밴드 (Bollinger Bands) 를 기반으로하는 트렌드 추적 전략이다. 그것은 가격 추세를 결정하고 구매 및 판매 신호를 생성하기 위해 볼링거 밴드의 상부 및 하부 밴드를 사용합니다. 구체적으로, 닫는 가격이 상부 밴드 이상으로 넘어갈 때 길고 닫는 가격이 하위 밴드 아래에 넘어갈 때 짧습니다.
이 전략은 경향을 결정하기 위해 볼링거 밴드의 상단과 하단 밴드를 사용합니다. 볼링거 밴드의 중간 밴드는 n 기간 동안의 폐쇄 가격의 간단한 이동 평균입니다. 밴드의 폭은 n 기간 동안의 폐쇄 가격의 표준편차의 k 곱입니다. 공식은 다음과 같습니다.
중위 대역: SMA (Close, n) 상단역: 중단역 + k * STDEV ((Close, n) 하단 대역: 중단 대역 - k * STDEV ((Close, n)
가격이 상단 범위를 넘을 때, 그것은 가격이 중간 범위를 둘러싼 정상적인 변동 범위를 초과했다는 것을 의미합니다. 상승 추세를 나타냅니다. 가격이 하단 범위를 넘을 때, 그것은 가격이 정상 범위를 벗어났다는 것을 의미합니다. 하향 추세를 나타냅니다.
이를 바탕으로 전략은 다음을 결정합니다.
경향을 결정하기 위해 볼링거 밴드를 사용하는 것은 중장기 트렌드에 잘 작동합니다.
이 전략의 주요 장점은 다음과 같습니다.
경향을 결정하기 위해 볼링거 밴드를 사용하는 것은 신뢰할 수 있습니다. 볼링거 밴드는 변동성을 고려하고 전환점을 잘 결정할 수 있습니다.
전략 규칙은 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다.
가격을 예측할 필요가 없습니다. 가격과 볼링거 밴드 사이의 관계를 추적할 필요가 있습니다. 조작하기 쉽습니다.
신호는 밴드 브레이크에서 생성되며 기회를 놓치지 않고 트렌드 전환을 적시에 포착합니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
볼링거 밴드는 가격 움직임을 완전히 예측할 수 없습니다. 밴드 브레이크 후, 트렌드는 지속되지 않을 수 있으며 윙사브가 가능합니다.
가격은 대역 근처에서 변동할 수 있고, 여러 개의 작은 손실을 유발할 수 있습니다.
부적절한 매개 변수 설정은 또한 나쁜 신호로 이어질 수 있다. 너무 작은 n은 너무 빈번한 대역 변화와 신호를 유발할 수 있다. 너무 큰 k는 신호의 지연으로 이어질 수 있다.
시장 동향은 개별 주식에 영향을 미치고 체계적 위험에 이어질 수 있습니다.
대응한 위험 관리 조치:
전략은 여러 가지 방법으로 최적화 될 수 있습니다.
n를 최적화하고 다른 설정을 테스트합니다. 또한 변동성을 기반으로 k를 동적으로 만듭니다.
MACD와 KDJ와 같은 다른 지표를 사용하는 필터를 추가하여 구매/판매 신호를 필터하고 잘못된 신호를 줄이십시오.
손실을 통제하기 위해 가격 기반 또는 변동성 기반의 중지와 같은 스톱 손실 메커니즘을 추가하십시오.
가격 변동성을 결정하고 포지션 크기를 조정하기 위해 볼링거 대역폭을 사용하십시오. 더 넓은 대역은 더 높은 변동성을 나타냅니다. 따라서 크기를 줄이십시오.
트렌드 결정 지표와 결합하고 기존 트렌드에 입력 신호를 위해 대역을 사용합니다.
전체적으로 이것은 트렌드를 따르는 신뢰할 수 있는 전략이다. 트렌드를 결정하기 위해 볼링거 밴드를 사용하며 작동하는 것이 간단하다. 주요 장점은 트렌드의 변화를 포착하는 적절한 신호이다. 그러나 일부 윙사와 매개 변수 최적화 어려움이 존재한다. 매개 변수 최적화, 필터 추가와 같은 방법은 위험을 제어하고 안정성을 향상시킬 수 있다. 이는 온건한 트렌드 정확성 요구가 있고 높은 운영 주파수를 선호하는 투자자에게 적합하다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands Trend Strategy", shorttitle="BB Trend", overlay=true) source = close length = input(8, minval=1) mult = input(1.00, minval=0.001, maxval=50) basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev buyEntry = crossover(source, upper) sellEntry = crossunder(source, lower) if (crossover(source, upper)) strategy.entry("BBandLE", strategy.long, stop=upper, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(source, lower)) strategy.entry("BBandSE", strategy.short, stop=lower, oca_name="BollingerBands", comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)