상대적 강도 지수 및 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-12-21 11:30:27
태그:

img

전반적인 설명

상대적 강도 지수 (RSI) 및 이동 평균 크로스오버 전략은 RSI 지표와 이동 평균을 결합하여 양적 거래 결정을 내립니다. RSI가 표시하는 과잉 구매 및 과잉 판매 수준을 활용하여 입점 및 출구를 결정하며, RSI가 이동 평균선을 넘을 때 생성되는 황금 십자가 및 죽음의 십자가 신호와 함께합니다.

전략 논리

  1. RSI 지표 값을 계산합니다. RSI는 최근 가격 변화의 크기를 측정하여 자산이 과잉 구매되거나 과잉 판매되는지 평가합니다.

  2. 기하급수적인 이동 평균 (EMA) 또는 간단한 이동 평균 (SMA) 을 사용하여 RSI의 이동 평균 선 (MA) 을 계산합니다.

  3. RSI가 MA 라인을 넘을 때, 골든 크로스 구매 신호가 생성됩니다. RSI가 MA 라인을 넘을 때, 죽음의 크로스 판매 신호가 유발됩니다.

  4. RSI가 과잉 매수 임계 이상으로 상승하면 자산은 과잉 매수된 것으로 간주되며 짧은 포지션을 시작할 수 있습니다. RSI가 과잉 매매 임계 이하로 떨어지면 자산은 과잉 매매된 것으로 간주되며 긴 포지션을 개설 할 수 있습니다.

이점 분석

  1. 표시자 크로스오버 신호를 RSI 과잉 구매/ 과잉 판매 수준과 결합하면 거래 결정의 정확성이 향상됩니다.

  2. RSI의 과잉 구매 및 과잉 판매 기준은 최적의 진입 및 출구를 결정합니다.

  3. 지표의 크로스오버 신호에 따라 행동함으로써 트렌드 반전을 포착합니다.

위험 분석

  1. RSI는 불안정하거나 옆면 시장에서 잘못된 신호를 생성할 수 있습니다.

  2. 부적절한 과반 구매 또는 과반 판매 문턱 설정은 너무 느슨하거나 너무 엄격한 신호로 이어질 수 있습니다.

  3. 이동평균은 단기적 변동과 변동성 스파이크에 민감하게 반응하기 때문에 조기 중단될 확률이 높아집니다.

최적화 방향

  1. 다른 길이 기간을 테스트함으로써 RSI 매개 변수를 최적화합니다.

  2. 각기 다른 MA 길이를 평가하여 최적의 이동 평균 기간을 구합니다.

  3. 다양한 과잉 구매 및 과잉 판매 임계 수준을 테스트하여 진입 신호를 정제합니다.

  4. 신호를 검증하고 잘못된 거래를 피하기 위해 추가 필터를 포함합니다.

결론

RSI 및 이동 평균 크로스오버 전략은 시장 전환점을 식별하고 반전을 포착하기 위해 RSI 과잉 구매 / 과잉 판매 수준을 MA 크로스오버 신호와 결합합니다. 매개 변수 최적화 및 신호 필터링을 통해 성능 및 위험 관리가 향상 될 수 있습니다. 이 중장기 거래 전략은 경험이 많은 투자자에게 강력한 알파 생성 잠재력을 제공합니다.


/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//dfurrer45
strategy(title="Relative Strength Index", shorttitle="RSI", overlay=true)
src = close, len = input(13, minval=1, title="Length"), maLen = input(9, minval=1, title="MA Lenght"), exponential = input(false, title="Exponential")

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)
// ===  BACKTEST END  ===
backtestdaterange = (time > timestamp(FromYear, FromMonth, FromDay, 00, 00))

rsioverbought = input(90, minval=1, title="RSI % start overbought")
rsioversold = input(10, minval=1, title="RSI % start oversold")
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))
ma = exponential ? ema(rsi, maLen) : sma(rsi, maLen)
rsimacrossup = cross(rsi,ma) and rsi > ma
rsimacrossdown = cross(rsi,ma) and rsi < ma
plotchar(rsimacrossup, char='⇧', location = location.belowbar, color = green, text = "", textcolor = green, size=size.small)
plotchar(rsimacrossdown, char='⇩', location = location.abovebar, color = red, text = "", textcolor = red, size=size.small)
plotchar(rsi > rsioverbought, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)
plotchar(rsi < rsioversold, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)


closetrade = rsimacrossup or rsimacrossdown
strategy.close_all(closetrade)
strategy.close_all((rsi > rsioverbought) or (rsi < rsioversold))
strategy.entry("Short Overbought",strategy.short, when=(rsi > rsioverbought) and backtestdaterange)
strategy.entry("Buy Overbought",strategy.long, when=(rsi < rsioversold) and backtestdaterange)
strategy.entry("Long Cross", strategy.long, when=rsimacrossup and backtestdaterange)
strategy.entry("Short Cross", strategy.short, when=rsimacrossdown and backtestdaterange)


더 많은