RSI 및 볼링거 밴드 양적 거래 전략

저자:차오장, 날짜: 2024-01-08 10:16:22
태그:

img

전반적인 설명

이 전략은 양적 거래에서 평균 반전 전략에 속하는 상대 강도 지수 (RSI) 와 볼링거 밴드를 결합하여 거래 기회를 식별합니다. RSI가 한 임계치 이하로 떨어지면 구매하고 가격이 볼링거 밴드의 중간 범위를 넘어서면 포지션을 닫습니다. 단축 기회가 없습니다.

전략 논리

  1. RSI 지표를 사용하여 시장이 과판되었는지 판단하십시오. RSI 30 이하는 과판 신호로 간주됩니다.

  2. 볼링거 밴드를 사용하여 가격이 상승세를 올리기 시작하는지 여부를 결정합니다. 가격이 하위 밴드에서 반등하고 중간 밴드 위에 넘어가면 긴 방향이 끝납니다.

  3. RSI 과잉 판매 신호와 볼링거 밴드 브레이크 아웃 신호를 결합하여 구매 입구 지점을 설정합니다. 두 신호가 트리거되면 구매하고 중간 밴드 위에 가격이 깨지면 포지션을 닫아서 이익을 취합니다.

이점 분석

  1. 이 전략은 평균 회전 지표 RSI와 채널 지표 볼링거 밴드를 결합하여 입점 지점을 더 정확하게 찾습니다.

  2. RSI 지표는 많은 가짜 브레이크오프를 필터링하고 불필요한 거래를 줄일 수 있습니다.

  3. 볼링거 밴드는 각 거래의 위험을 제어하기 위해 스톱 로스로 작용합니다.

위험 분석

  1. RSI 지표는 잘못된 신호를 줄 수 있어 구매 기회를 놓칠 수 있습니다.

  2. 부적절한 볼링거 반드의 매개 변수 설정은 너무 느슨하거나 엄격한 스톱 손실을 초래할 수 있습니다.

  3. 부적절한 거래 도구를 선택하는 것, 예를 들어 더 높은 유동성 위험을 가진 소액 주식 거래.

최적화 방향

  1. 최적의 매개 변수를 찾기 위해 RSI 기간, 볼링거 기간 및 멀티플리커와 같은 다양한 매개 변수 조합을 테스트하십시오.

  2. KD, MACD와 같은 다른 지표를 통합하여 신호를 필터하기 위해 더 엄격한 구매 조건을 설정합니다.

  3. 다른 거래 도구에 대한 변동성에 기초한 스톱 손실을 설정합니다. 예를 들어 변동성 스톱 손실을 사용하십시오.

결론

이 전략은 평균 반전 전략에 속하는 RSI 최저에서 구매하고 볼링거 최고에서 판매하는 논리를 활용합니다. RSI 또는 볼링거 밴드와 같은 단일 지표를 사용하는 것과 비교하면이 전략은 입구 및 출구 지점을 더 정확하게 위치하여 더 나은 결과를 얻을 수 있습니다. 다음 단계는 매개 변수 최적화, 신호 필터링, 스톱 손실 전략 등을 통해 개선 될 수 있습니다.


/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's BB + RSI Strategy v1.0", shorttitle = "BB+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiuse = input(true, defval = true, title = "Use RSI")
bbuse = input(true, defval = true, title = "Use BB")
showbb = input(true, defval = true, title = "Show BB Overlay")
bbperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "BB period")
bbsource = input(ohlc4, title = "BB source")
bbmult = input(2, defval = 2, minval = 1, maxval = 100, title = "BB Mult")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 1000, title = "RSI period")
rsisource = input(close, title = "RSI source")
rsilimit = input(30, defval = 30, minval = 1, maxval = 49, title = "RSI Limit")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

//RSI
rsi = rsi(rsisource, rsiperiod)

//BB
basis = sma(bbsource, bbperiod)
dev = bbmult * stdev(bbsource, bbperiod)
upper = basis + dev
lower = basis - dev

//Overlay
col = showbb ? blue : na
plot(upper, color = col)
plot(basis, color = col)
plot(lower, color = col)

//Signals
up = (rsi < rsilimit or rsiuse == false) and (low < lower or bbuse == false)
cl = close > open

//Trading
lot = 0.0 
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, lot)
if cl
    strategy.entry("Close", strategy.short, 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

더 많은