728x90
반응형
RSI (Relative Strength Index, 상대 강도지수)
전략
- 과매수, 과매도를 판단하기 위한 지표
- 과매수는 주식 상승으로 인해 많이 매수된 상태를 말하고, 과매도는 주식 하락으로 인해 많이 매도된 상태
- RSI = 일정기간 동안의 상승폭 합계 / (일정기간 동안의 상승폭 합계 + 일정기간 동안의 하락폭 합계)
특징
· 과매도 및 과매수 임계값을 70, 30으로 잡았을 때
- 과매도 : RSI가 30보다 떨어질 때 (일정기간 동안 상승한 폭보다 하락한 폭이 훨씬 큰 것을 의미)
- 과매수 : RSI가 70보다 올라갈 때 (일정기간 동안 하락한 폭보다 상승한 폭이 훨씬 큰 것을 의미)
- 과매도 일 때 (바닥) 매수, 과매수 일 때 (천장) 매도
· 과거 데이터의 영향을 받지 않는 기초자산이라면, 단순 이동평균이 과거의 추세 힘이 남아있다면 일반적인 RSI가 좀 더 적합할 것이다.
코드
## RSI
## RSI = 일정기간 동안의 상승폭 합계 / (일정기간 동안의 상승폭 합계 + 일정기간 동안의 하락폭 합계)
from datetime import datetime
import backtrader as bt
class RSI(bt.Strategy) :
def __init__(self):
self.rsi = bt.indicators.RSI(self.data.close)
def next(self) :
if not self.position: # 아직 주식을 사지 않았을 때
if self.rsi < 30:
self.order = self.buy()
elif self.rsi > 70:
self.orfer = self.sell()
# cerebro 가져오기
cerebro = bt.Cerebro()
# 야후 금융 데이터 불러오기
data = bt.feeds.YahooFinanceData(dataname='036570.KS',
fromdate=datetime(2017, 1, 1),
todate=datetime(2020, 12, 31))
# 데이터 추가
cerebro.adddata(data)
# 전략 추가
cerebro.addstrategy(RSI)
cerebro.broker.setcash(10000000) # 브로거 설정
# 매매 단위 설정하기
cerebro.addsizer(bt.sizers.SizerFix, stake=30) # 한번에 30주 설정
# 초기 투자금
init_cash = cerebro.broker.getvalue()
# cerebro 실행
cerebro.run()
# 최종 금액
final_cash = cerebro.broker.getvalue()
print("최종 금액 : ", final_cash, "\\")
print("수익률 : ", float(final_cash - init_cash) / float(init_cash) *100.0, "%")
# 차트 출력
cerebro.plot()
728x90
반응형
'캡스톤' 카테고리의 다른 글
Turtle 전략 (6) | 2021.09.14 |
---|---|
EMA 전략 (0) | 2021.09.13 |
SMA 전략 (0) | 2021.09.13 |
시스템(퀀트) 트레이딩 롤모델 (1) | 2021.09.13 |