볼링거 밴드와 헐 지표의 교차 전략

저자:차오장, 날짜: 2023-12-08 11:58:07
태그:

img

요약

이 전략은 볼링거 밴드와 헐 지표 사이의 교차를 기반으로 거래 신호를 생성한다. 헐 지표가 볼링거 밴드의 하단 지대 위에 넘어가면 길게, 헐 지표가 볼링거 밴드의 상단 지대 아래에 넘어가면 짧게 된다. 이 전략은 볼링거 밴드의 브레이크아웃 전략과 헐 지표의 트렌드 추종 전략을 결합하여 둘의 장점을 활용한다.

원칙

이 전략은 주로 볼링거 밴드와 헐 지표의 크로스오버를 사용하여 거래 신호를 생성합니다.

볼링거 밴드는 중간선, 상위선, 하위선 3개의 라인을 포함합니다. 중간선은 N일 이동평균이고, 상위선과 하위선은 중간선 ± 표준편차입니다. 가격이 상위선을 통과하면 돌파 기회를 나타냅니다. 가격이 하위선을 통과하면 콜백 기회를 나타냅니다.

헐 지표 (Hull indicator) 는 트렌드를 따르는 지표이다. 현재 트렌드를 결정하기 위해 서로 다른 기간의 두 가중 이동 평균 사이의 차이를 사용합니다. 짧은 기간 이동 평균이 긴 기간 중 하나보다 높으면 상승 추세를 나타냅니다.

이 전략은 두 지표의 강점을 결합한다. 홀 지표가 볼링거 밴드의 하부 밴드 위에 넘어가면 주가가 상승 추세로 진입할 수 있다고 간주되므로, 길게 이동한다. 홀 지표가 상부 밴드 아래에 넘어가면, 주가가 하향 콜백으로 진입할 수 있다고 간주되므로, 짧게 이동한다.

장점

  1. 볼링거 반드와 헐 지표의 장점을 결합하여 거래 신호를 더 신뢰할 수 있습니다.

  2. 트렌드 방향을 결정하기 위해 헐 지표를 사용하며 지지/저항 수준을 결정하기 위해 볼린저 밴드를 사용하며 수익성을 향상시키기 위해 크로스오버 신호를 생성합니다.

  3. 두 지표의 매개 변수는 적용 가능성을 확장하기 위해 다른 주기의 주식에 최적화 할 수 있습니다.

위험 과 해결책

  1. 이 전략은 범위에 제한된 움직임 중에 더 많은 잘못된 신호를 생성하여 손실을 유발할 수 있습니다. 매개 변수를 최적화하거나 필터를 추가하여 잘못된 신호를 줄일 수 있습니다.

  2. 가격은 격렬하게 변동될 수 있으며, 두 지표가 동시에 신호를 발산하도록 할 수 있습니다. 잘못된 크로스오버 신호 판단을 피하기 위해 신호 순서를 보장하십시오. 제어 손실에 스톱 손실을 추가하는 것을 고려하십시오.

  3. 전략은 위치 크기를 직접 100%로 설정합니다. 실제 배포에서는 포지션 개척으로 인한 증대 손실을 피하기 위해 위치 크기를 조정해야합니다.

최적화 방향

  1. 두 지표의 매개 변수를 테스트하고 최적화하여 더 많은 주식 주기에 적응합니다.

  2. 거래량이나 변동성 같은 필터를 추가하여 통합 중에 잘못된 신호를 피합니다.

  3. 트래일링 스톱 로스 또는 스톱 리미트 오더를 설정하여 스톱 로스 전략을 최적화합니다.

  4. 손실 증폭을 피하기 위해 재입구 조건을 추가하여 위치 크기를 조정합니다.

결론

이 전략은 볼링거 밴드 (Bollinger Bands) 의 브레이크아웃 전략과 헐 지표의 트렌드-추천 전략을 결합하여 트렌드-추천 및 브레이크아웃 효과를 모두 달성하기 위해 그 사이의 크로스오버 신호를 사용하여 전략입니다. 전략은 중장기 및 단기 주식에 큰 근본적인 변화가 없으므로 강력한 적응력을 가지고 있습니다. 그러나 매개 변수, 포지션 사이징, 스톱 로스 전략은 전략을 더 견고하게 만들기 위해 실제 배포 중에 최적화가 필요합니다.


/*backtest
start: 2023-11-30 00:00:00
end: 2023-12-07 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=3
strategy(title="Strategy Hull Bollinger", shorttitle="Hull bollinger",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=false)

n=input(title="period",defval=3)


n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))


n2ma1=2*wma(close[1],round(n/2))
nma1=wma(close[1],n)
diff1=n2ma1-nma1
sqn1=round(sqrt(n))


n1=wma(diff,sqn)
n2=wma(diff1,sqn)
c=n1>n2?green:red

i = input(1)
PP = close[i]

length1 = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=10, step=0.2)
basis = sma(src, length1)
dev = mult * stdev(src, length1)
upper = basis + dev
lower = basis - dev


TP = input(500) * 10
SL = input(500) * 10
TS = input(20) * 10
TO = input(10) * 10
CQ = 100

TPP = (TP > 0) ? TP : na
SLP = (SL > 0) ? SL : na
TSP = (TS > 0) ? TS : na
TOP = (TO > 0) ? TO : na

longCondition = crossover(n1,lower)
if (longCondition)
    strategy.entry("Long", strategy.long)


shortCondition = crossunder(n1,upper)
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)
strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)

더 많은