이 전략은 볼링거 밴드와 상대적 강도 지수 (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가 높을 때 판매하여 반전에서 이익을 얻을 수있게합니다. 손실을 멈추고 수익 통제 위험을 감수합니다.
위험은 볼링거 매개 변수를 조정하고 다른 지표를 사용하여 적절한 스톱 로스를 확대함으로써 완화 될 수 있습니다.
이 전략의 전반적인 위험/이익 프로필은 균형 잡혀 있으며 백테스트 결과는 좋다. 매개 변수 최적화와 지표 향상으로 추가 개선이 가능하다. 볼링거 밴드를 기반으로 하는 역전 거래 개념은 간단하고 신뢰할 수 있으며, 추가 연구와 정교화를 보장한다.
[/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)