RSI와 볼린저 밴드 양적 거래 전략


생성 날짜: 2024-01-08 10:16:22 마지막으로 수정됨: 2024-01-08 10:16:22
복사: 0 클릭수: 704
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

RSI와 볼린저 밴드 양적 거래 전략

개요

이 전략은 상대적으로 약한 지표 ((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()