볼린저 밴드 황금비율 방법을 기반으로 한 균형 회귀 거래 전략


생성 날짜: 2023-11-16 16:52:55 마지막으로 수정됨: 2023-11-16 16:52:55
복사: 0 클릭수: 774
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 황금비율 방법을 기반으로 한 균형 회귀 거래 전략

개요

이 전략은 부린띠의 금분리선을 이용해서, 평선형태 판단과 결합하여 회귀 거래를 한다. 가격이 부린띠의 금분리선을 접촉할 때 구매 신호로 보고, 가격의 균형 회귀 특성을 이용해서 이익을 얻는다.

전략 원칙

  1. 브린 띠의 중간 궤도, 상단 궤도 및 금분 하단 궤도를 계산
  • 중도 궤도: n주기의 가중 이동 평균vwma
  • 상궤도: 중궤도 + k * n 주기 표준차
  • 황금분열 하계궤도: 중궤도 - 0.618 * n주기의 표준차
  1. 판단의 형태
  • 50일 평균선에서 200일 평균선을 통과하여 상승 추세에 부합합니다.
  • 가격 접촉 또는 금 분할 하단 궤도 아래로, 구매 신호로
  1. 탈퇴
  • 가격의 상승으로 브린이 궤도에 올랐고, 가격이 하향 궤도에서 벗어났다고 생각하여 평점으로 돌아왔다.
  1. 상쇄
  • 고정된 손실 비율을 5%로 설정합니다.

전략적 이점

  1. 스마가 아닌 vwma를 브린 띠의 중간 궤도로 사용하면 가격의 이동 동향을 더 잘 반영할 수 있다.

  2. 금분열은 중요한 지지/저항 지역으로, 회귀를 위한 근거를 제공합니다.

  3. 평균자책점 다단계로, 큰 상승세를 보장합니다.

  4. 고정된 손실은 단위 손실을 통제합니다.

전략적 위험

  1. 금분열선은 확실한 지지가 아니기 때문에 가격이 곧바로 넘어갈 수 있습니다.

  2. 고정된 스톱 손실은 너무 무단일 수 있으며 시장의 변동에 따라 조정하는 것이 고려되어야합니다.

  3. 평균선 다중 머리 배열도 가짜 돌파구일 수 있으며, 더 많은 지표와 함께 판단해야 한다.

  4. 회귀 길이가 불확실하고, 합리적인 휴식지 지점을 설정해야 한다.

최적화 방향

  1. 브린 밴드 주기, 표준 차이의 배수, 고정 스톱 손실 비율 등과 같은 다양한 파라미터 조합을 테스트할 수 있습니다.

  2. MACD, KD 등과 같은 시장의 추세와 회귀 확률을 판단하는 더 많은 지표를 추가할 수 있습니다.

  3. 동적 중지, ATR 중지 또는 추적 중지에 따라 고려할 수 있습니다.

  4. 이동식 차단, 분기식 차단 등의 차단 전략을 최적화할 수 있습니다.

요약하다

이 전략은 불린 반지 금분열선을 이용해서 평형 회귀 거래를 하고 거래 논리가 명확하고, 파라미터를 설정하는 것이 간단하고, 회수할 수 있는 등의 장점을 가지고 있다. 그러나 또한 특정한 위험이 존재하며, 더 많은 기술 지표 판단과 손해/정지 도구를 추가하여 더 많은 테스트와 최적화를 필요로 한다. 실제로 적용되기 전에.

전략 소스 코드
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4

strategy(title="Bollinger Band with Fib Golden Ratio (0.618)",  shorttitle="Bollinger Band with Fib Golden Ratio" , overlay=true, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  

length = input(50,title="BB Length" , minval=1)
src1 = input(hlc3, title="Source")
//mult1 = input(1.33, minval=0.001, maxval=50)
mult = input(1.5,title="multplier", minval=0.001, maxval=50)

stopLoss=input(5,title="Stop Loss",minval=1)

basis = vwma(src1, length)
dev = mult * stdev(src1, length)

//dev3 = mult3 * stdev(src, length)

upper_618= basis + (0.618*dev)
lower_618= basis - (0.618*dev)

//lower_618_dev3= basis - (0.618*dev3)



plot_upper618= plot(upper_618, color=color.purple, linewidth=2, title="0.618")
plot(basis, color=color.purple,style=plot.style_circles,  linewidth=2)

plot_lower618= plot(lower_618, color=color.purple, linewidth=2, title="0.618 entry")
//plot_lower618_dev3= plot(lower_618_dev3, color=color.red, linewidth=1, title="0.618 stop")

//plot_lower618= plot(lower_618, color=color.purple, linewidth=1, title="0.618 entry")

ema200=ema(close,200)
ema50=ema(close,50)

plot (ema200, title="ema200", color=color.orange, linewidth=2)
plot (ema50, title="ema50", color=color.blue , linewidth=2)


longCondition= ema50 > ema200

strategy.entry(id="BB_Fib618", long=true, when = longCondition and ( close < lower_618  or  low <= lower_618)  )

strategy.close(id="BB_Fib618",  comment="points="+tostring(close - strategy.position_avg_price,  "###.##") , when = strategy.position_size >= 1  and crossover(close,upper_618 )) 

//stoploss exit
stopLossVal = strategy.position_size>=1 ?  strategy.position_avg_price * ( 1 - (stopLoss/100) ) : 0.00
strategy.close(id="BB_Fib618", comment="SL="+tostring(close - strategy.position_avg_price,  "###.##"), when=abs(strategy.position_size)>=1 and close < stopLossVal ) //and close > strategy.position_avg_price )