모멘텀 오슬레이터 볼링거 밴드 RSI 거래 전략

저자:차오장, 날짜: 2023-09-18 14:07:51
태그:

전반적인 설명

이 전략은 볼링거 밴드와 상대적 강도 지수 (RSI) 지표를 결합하여 가격 변동성을 예측하고 최적의 진입 지점을 결정합니다. 논리는 간단합니다 - 우리는 볼링거 하위 밴드 (Bollinger lower band) 에 닿는 폐쇄 가격을 관찰하고, 그 후 두 가지 가능한 시나리오가 있습니다: 가격이 하위 볼링거 밴드 (Bollinger lower band) 에서 다시 반등하거나 계속 떨어집니다. 가격 움직임을 확인하려면 두 번째 지표인 RSI를 사용하여 트렌드를 추가로 조사합니다. 예를 들어, 가격이 하위 볼링거 밴드 (Bollinger band) 에 도달하지만 RSI 값이 과잉 판매 영역에 있지 않으면 가격이 계속 하락 할 것이라고 결론 지을 수 있습니다. RSI 값이 과잉 판매되면이 지역을 진입 지점으로 사용할 수 있습니다.

만약 RSI가 너무 오래 지나치게 팔린 영역에 머무르면 너무 많은 자본을 잃지 않기 위해 스톱 로스가 필요합니다.

가장 좋은 수익 영역은 가격이 볼링거 중부 밴드/상부 밴드 이상으로 다시 상승하거나 RSI가 초고가 수준에 도달하면 먼저 발생하는 것입니다.

긴 항목:

RSI < 30 및 클로즈 가격 < 볼링거 하위 대역

긴 출구:

RSI > 70

전략 논리

이 전략은 먼저 RSI 지표를 계산하고 과잉 구매 / 과잉 판매 수준을 결정하기 위해 상부 / 하부 경계를 설정합니다. 그 다음 볼링거 중부, 상부 및 하부 대역을 계산합니다. 폐쇄 가격이 하부 대역에 닿고 RSI가 30 이하일 때 긴 지점을 선택합니다. RSI가 70 이상일 때 포지션을 닫습니다.

장래에 들어가면 스톱 로스를 설정하고 이윤을 취합니다. 이윤은 입상 가격에 설정됩니다 * (1 + 고정 비율), 스톱 로스는 입상 가격에 설정됩니다 * (1 - 고정 비율).

이것은 우리가 RSI가 낮을 때 볼링거 하위 밴드에서 구매하고 RSI가 높을 때 판매하여 반전에서 이익을 얻을 수있게합니다. 손실을 멈추고 수익 통제 위험을 감수합니다.

이점 분석

  • 볼링거 밴드는 역전점을 정확하게 결정합니다.
  • RSI는 가짜 브레이크아웃을 필터링하여 신뢰할 수있는 입력을 보장합니다.
  • 손해를 멈추고 수익을 취하십시오.
  • 광범위한 백테스팅과 매개 변수 최적화는 안정적인 수익성을 보장합니다.

위험 분석

  • 볼링거 대역은 역전을 완벽하게 예측하지 못해서 일부 실패가 발생합니다.
  • RSI는 또한 잘못된 신호를 줄 수 있습니다.
  • 너무 가까운 스톱 로스는 포지션을 유지할 수 없습니다, 너무 느슨한 위험 증가

위험은 볼링거 매개 변수를 조정하고 다른 지표를 사용하여 적절한 스톱 로스를 확대함으로써 완화 될 수 있습니다.

최적화 방향

  • KD, MACD와 같은 다른 지표와 결합하여 항목을 필터하는 것을 고려하십시오.
  • 동적으로 스톱 로스/익스피스 비율을 조정합니다
  • 볼링거 매개 변수를 최적화
  • 다양한 제품에서 견고성을 테스트합니다.

결론

이 전략의 전반적인 위험/이익 프로필은 균형 잡혀 있으며 백테스트 결과는 좋다. 매개 변수 최적화와 지표 향상으로 추가 개선이 가능하다. 볼링거 밴드를 기반으로 하는 역전 거래 개념은 간단하고 신뢰할 수 있으며, 추가 연구와 정교화를 보장한다.

[/trans]


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bollinger Band with RSI", shorttitle="BB&RSI", format=format.price, precision=2, pyramiding=50, initial_capital=10000, calc_on_order_fills=false, calc_on_every_tick=true, default_qty_type=strategy.cash, default_qty_value=1000, currency="USD")
len = input(14, minval=1, title="Length")
src = input(close, "Source", type = input.source)
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))
plot(rsi, "RSI", color=#8E1599)
band1 = hline(70, "Upper Band", color=#C0C0C0)
band0 = hline(30, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")

length_bb = input(20,title="BB Length", minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="BB StdDev")
basis = sma(src, length_bb)
dev = mult * stdev(src, length_bb)
upper = basis + dev
lower = basis - dev
offset = input(0, "BB Offset", type = input.integer, minval = -500, maxval = 500)


Plot_PnL = input(title="Plot Cummulative PnL", type=input.bool, defval=false)
Plot_Pos = input(title="Plot Current Position Size", type=input.bool, defval=false)

long_tp_inp = input(10, title='Long Take Profit %', step=0.1)/100
long_sl_inp = input(25, title='Long Stop Loss %', step=0.1)/100
// Take profit/stop loss
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)

entry_long = rsi < 30 and src < lower
exit_long = rsi > 70

plotshape(entry_long, style=shape.labelup, color=color.green,  location=location.bottom, text="L", textcolor=color.white, title="LONG_ORDER")
plotshape(exit_long, style=shape.labeldown, color=color.red,  location=location.top, text="S", textcolor=color.white, title="SHORT_ORDER")

strategy.entry("Long",true,when=entry_long)    
strategy.exit("TP/SL","Long", limit=long_take_level, stop=long_stop_level)
strategy.close("Long", when=exit_long, comment="Exit")
plot(Plot_PnL ? strategy.equity-strategy.initial_capital : na, title="PnL", color=color.red)
plot(Plot_Pos ? strategy.position_size : na, title="open_position", color=color.fuchsia)


더 많은