zerohertzLib.quant

Quant

FinanceDataReaderKoreaInvestment 를 통해 수집한 data를 이용해 매수, 매도 signal을 포착하고 test하는 quant 함수 및 class들

Important

signals["signals"] 부호의 의미

  • +1: 매수

  • -1: 매도

class zerohertzLib.quant.Balance(account_no, path='./', kor=True)[source]

Bases: KoreaInvestment

한국투자증권의 국내 계좌 정보 조회 class

Parameters:
  • account_no (str) – API 호출 시 사용할 계좌 번호

  • path (Optional[str]) – secret.key 혹은 token.dat 이 포함된 경로

  • kor (Optional[bool]) – 국내 여부

balance

현재 보유 주식과 계좌의 금액 정보

Type:

Dict[str, Any]

__contains__()[source]
Parameters:

item (Any) – 보유 여부를 판단할 종목명

Returns:

입력 종목명의 보유 여부

Return type:

bool

__len__()[source]
Returns:

보유 주식 종류의 수

Return type:

int

__getitem__()[source]
Parameters:

idx (int) – Index

Returns:

Index에 따른 주식의 매수 시점과 현재의 정보

Return type:

List[Union[int, float, str]]

__call__()[source]
Returns:

현재 보유 금액

Return type:

int

Examples

kor=True:
>>> balance = zz.quant.Balance("00000000-00")
>>> "LG전자" in balance
True
>>> "삼성전자" in balance
False
>>> len(balance)
1
>>> balance[0]
['066570', 102200.0, 100200, 1, -1.95, -2000]
>>> balance()
000
kor=False:
>>> balance = zz.quant.Balance("00000000-00", kor=False)
>>> "아마존닷컴" in balance
True
>>> "삼성전자" in balance
False
>>> len(balance)
1
>>> balance[0]
['META', 488.74, 510.92, 1, 4.53, 22.18]
>>> balance()
000.000
barv()[source]

현재 보유 종목의 이익과 손실을 bar chart로 시각화

Returns:

저장된 graph의 절대 경로

Return type:

str

Examples

>>> balance.barv()
bought_symbols()[source]

보유 주식의 종목 code return

Returns:

보유 주식의 종목 code들

Return type:

List[str]

Examples

>>> balance.bought_symbols():
['066570']
items()[source]

보유 주식의 반복문 사용을 위한 method

Returns:

보유 종목 code와 그에 따른 정보들

Return type:

ItemsView[str, List[Union[int, float, str]]]

Examples

>>> for k, v in balance.items():
>>>     print(k, v)
merge(balance)[source]

현재 계좌와 입력 계좌의 정보를 병합하는 함수

Parameters:

balance (zerohertzLib.quant.Balance) – 병합될 계좌 정보

Returns:

현재 계좌에 정보 update

Return type:

None

Examples

>>> balance_1.merge(balance_2)
pie()[source]

현재 보유 종목을 pie chart로 시각화

Returns:

저장된 graph의 절대 경로

Return type:

str

Examples

>>> balance.pie()
table()[source]

현재 계좌의 상태를 image로 저장

Returns:

저장된 image의 절대 경로

Return type:

str

Examples

>>> balance.table()
class zerohertzLib.quant.Experiments(title, data, ohlc='', vis=False, report=True)[source]

Bases: object

Full factorial design 기반의 backtest 수행 class

Parameters:
  • title (str) – 종목 이름

  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • vis (Optional[bool]) – Candle chart 시각화 여부

  • report (Optional[bool]) – Experiment 결과 출력 여부

Examples

>>> experiments = zz.quant.Experiments(title, data)
bollinger_bands(exps=None)[source]

Bollinger bands 전략 실험

Parameters:

exps (List[List[Any]]) – 전략 함수에 입력될 변수들의 범위

Returns:

손실 거래 비율에 따른 수익률, signals, parameters

Return type:

Dict[str, List[Any]]

macd(exps=None)[source]

MACD 전략 실험

Parameters:

exps (List[List[Any]]) – 전략 함수에 입력될 변수들의 범위

Returns:

손실 거래 비율에 따른 수익률, signals, parameters

Return type:

Dict[str, List[Any]]

momentum(exps=None)[source]

Momentum 전략 실험

Parameters:

exps (List[List[Any]]) – 전략 함수에 입력될 변수들의 범위

Returns:

손실 거래 비율에 따른 수익률, signals, parameters

Return type:

Dict[str, List[Any]]

moving_average(exps=None)[source]

Moving average 전략 실험

Parameters:

exps (List[List[Any]]) – 전략 함수에 입력될 변수들의 범위

Returns:

손실 거래 비율에 따른 수익률, signals, parameters

Return type:

Dict[str, List[Any]]

rsi(exps=None)[source]

RSI 전략 실험

Parameters:

exps (List[List[Any]]) – 전략 함수에 입력될 변수들의 범위

Returns:

손실 거래 비율에 따른 수익률, signals, parameters

Return type:

Dict[str, List[Any]]

class zerohertzLib.quant.Quant(title, data, ohlc='', top=1, methods=None, report=False)[source]

Bases: Experiments

한 가지 종목에 대해 full factorial design 기반의 backtest를 수행하고 최적의 전략을 융합하는 class

Parameters:
  • title (str) – 종목 이름

  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • top (Optional[int]) – Experiment 과정에서 사용할 각 전략별 수

  • methods (Optional[Dict[str, List[List[Any]]]]) – 사용할 전략들의 함수명 및 parameters

  • report (Optional[bool]) – Experiment 결과 출력 여부

signals

융합된 전략의 signal

Type:

pd.DataFrame

methods

융합된 전략명

Type:

Tuple[str]

profit

융합된 전략의 backtest profit

Type:

float

buy

융합된 전략의 backtest 시 총 매수

Type:

Union[int, float]

sell

융합된 전략의 backtest 시 총 매도

Type:

Union[int, float]

transaction

융합된 전략의 backtest 시 거래 정보 (매수가, 매도가, 수익률, 거래 기간)

Type:

Dict[str, Union[int, float]]

threshold_buy

융합된 전략의 매수 signal threshold

Type:

int

threshold_sell

융합된 전략의 매도 signal threshold

Type:

int

total_cnt

융합된 전략의 수

Type:

int

methods_cnt

각 전략에 따른 이익이 존재하는 수

Type:

Dict[str, int]

exps_cnt

각 전략과 parameter에 따른 이익이 존재하는 수

Type:

Dict[str, List[Dict[str, int]]]

exps_str

각 전략에 따른 이익이 존재하는 paramter 문자열

Type:

Dict[str, List[str]]

__call__()[source]

입력된 날짜에 대해 분석 정보 return

Parameters:

day (Optional[str]) – 분석할 날짜

Returns:

각 전략에 따른 분석 정보 및 결론

Return type:

Dict[str, Any]

Examples

>>> qnt = zz.quant.Quant(title, data, top=3)
>>> qnt.signals.columns
Index(['moving_average', 'rsi', 'bollinger_bands', 'momentum', 'macd', 'signals', 'logic'], dtype='object')
>>> qnt.methods
('moving_average', 'bollinger_bands', 'macd')
>>> qnt.profit
23.749412256412935
>>> qnt.buy
3828200.0
>>> qnt.sell
4737375.0
>>> qnt.transaction
defaultdict(<class 'list'>, {'buy': [92850.0, ...], 'sell': [105275.0, ...], 'profit': [11.802422227499406, ...], 'period': [205, ...]})
>>> qnt.threshold_buy
1
>>> qnt.threshold_sell
-4
>>> qnt.total_cnt
9
>>> qnt.methods_cnt
defaultdict(<class 'int'>, {'moving_average': 3, 'rsi': 3, 'bollinger_bands': 3, 'momentum': 1, 'macd': 3})
>>> qnt.exps_cnt
defaultdict(None, {'moving_average': [defaultdict(<class 'int'>, {'20': 3}), ...], ...})
>>> qnt.exps_str
defaultdict(<class 'list'>, {'moving_average': ['20-70-1.0', '20-60-1.0', '20-70-0.0'], ...})
>>> qnt()
defaultdict(<class 'list'>, {'moving_average': [0, 0.0], 'bollinger_bands': [0, 0.0], 'macd': [0, 0.0], 'logic': 0, 'total': [0, 0.0], 'position': 'None'})
>>> qnt("20231211")
defaultdict(<class 'list'>, {'moving_average': [0, 0.0], 'bollinger_bands': [3, 100.0], 'macd': [0, 0.0], 'logic': 1, 'total': [3, 33.33333333333333], 'position': 'Buy'})
>>> qnt("2023-12-08")
defaultdict(<class 'list'>, {'moving_average': [0, 0.0], 'bollinger_bands': [3, 100.0], 'macd': [0, 0.0], 'logic': 1, 'total': [3, 33.33333333333333], 'position': 'Buy'})
class zerohertzLib.quant.QuantSlackBot(symbols, start_day='', ohlc='', top=1, methods=None, report=False, token=None, channel=None, name=None, icon_emoji=None, mp_num=0, analysis=False, kor=True)[source]

Bases: ABC, SlackBot

입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Slack으로 message와 graph를 전송하는 class

Note

Abstract Base Class: 종목 code에 따른 종목명과 data를 불러오는 abstract method _get_data 정의 후 사용

def _get_data(self, symbol: str) -> Tuple[str, pd.DataFrame]:
    title = data = None
    return title, data
Parameters:
  • symbols (List[str]) – 종목 code들

  • start_day (Optional[str]) – 조회 시작 일자 (YYYYMMDD)

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • top (Optional[int]) – Experiment 과정에서 사용할 각 전략별 수

  • methods (Optional[Dict[str, List[List[Any]]]]) – 사용할 전략들의 함수명 및 parameters

  • report (Optional[bool]) – Experiment 결과 출력 여부

  • token (Optional[str]) – Slack Bot의 token

  • channel (Optional[str]) – Slack Bot이 전송할 channel

  • name (Optional[str]) – Slack Bot의 표시될 이름

  • icon_emoji (Optional[str]) – Slack Bot의 표시될 사진 (emoji)

  • mp_num (Optional[int]) – 병렬 처리에 사용될 process의 수 (0: 직렬 처리)

  • analysis (Optional[bool]) – 각 전략의 보고서 전송 여부

  • kor (Optional[bool]) – 국내 여부

exps

각 전략에 따른 parameter 분포

Type:

Dict[str, List[Dict[str, int]]]

Examples

>>> qsb = zz.quant.QuantSlackBot(symbols, token=token, channel=channel)
>>> qsb.index()
_images/quant.QuantSlackBot.png
buy()[source]

매수 signals 탐색

file(path, thread_ts=None)[source]

token 혹은 channel 이 입력되지 않을 시 전송 불가

Parameters:
  • path (str) – 전송할 file 경로

  • thread_ts (Optional[str]) – 댓글을 전송할 thread의 timestamp

Returns:

Slack Bot의 응답

Return type:

slack_sdk.web.slack_response.SlackResponse

index()[source]

모든 signals 탐색

message(message, codeblock=False, thread_ts=None)[source]

token 혹은 channel 이 입력되지 않을 시 전송 불가

Parameters:
  • message (str) – 전송할 message

  • codeblock (Optional[bool]) – 전송되는 message의 스타일

  • thread_ts (Optional[str]) – 댓글을 전송할 thread의 timestamp

Returns:

Slack Bot의 응답

Return type:

slack_sdk.web.slack_response.SlackResponse

class zerohertzLib.quant.QuantSlackBotFDR(symbols, start_day='', ohlc='', top=1, methods=None, report=False, token=None, channel=None, name=None, icon_emoji=None, mp_num=0, analysis=False, kor=True)[source]

Bases: QuantSlackBot

FinanceDataReader module 기반으로 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Slack으로 message와 graph를 전송하는 class

Parameters:
  • symbols (Union[int, List[str]]) – 종목 code들 혹은 시가 총액 순위

  • start_day (Optional[str]) – 조회 시작 일자 (YYYYMMDD)

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • top (Optional[int]) – Experiment 과정에서 사용할 각 전략별 수

  • methods (Optional[Dict[str, List[List[Any]]]]) – 사용할 전략들의 함수명 및 parameters

  • report (Optional[bool]) – Experiment 결과 출력 여부

  • token (Optional[str]) – Slack Bot의 token

  • channel (Optional[str]) – Slack Bot이 전송할 channel

  • name (Optional[str]) – Slack Bot의 표시될 이름

  • icon_emoji (Optional[str]) – Slack Bot의 표시될 사진 (emoji)

  • mp_num (Optional[int]) – 병렬 처리에 사용될 process의 수 (0: 직렬 처리)

  • analysis (Optional[bool]) – 각 전략의 보고서 전송 여부

  • kor (Optional[bool]) – 국내 여부

exps

각 전략에 따른 parameter 분포

Type:

Dict[str, List[Dict[str, int]]]

market

kor 에 따른 시장 목록

Type:

pd.DataFrame

Examples

>>> qsb = zz.quant.QuantSlackBotFDR(symbols, token=token, channel=channel)
>>> qsb = zz.quant.QuantSlackBotFDR(10, token=token, channel=channel)
class zerohertzLib.quant.QuantSlackBotKI(account_no, symbols=None, start_day='', ohlc='', top=1, methods=None, report=False, token=None, channel=None, name=None, icon_emoji=None, mp_num=0, analysis=False, kor=True, path='./')[source]

Bases: Balance, QuantSlackBot

한국투자증권 API를 기반으로 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Slack으로 message와 graph를 전송하는 class

Parameters:
  • account_no (str) – API 호출 시 사용할 계좌 번호

  • symbols (Optional[List[str]]) – 종목 code들

  • start_day (Optional[str]) – 조회 시작 일자 (YYYYMMDD)

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • top (Optional[int]) – Experiment 과정에서 사용할 각 전략별 수

  • methods (Optional[Dict[str, List[List[Any]]]]) – 사용할 전략들의 함수명 및 parameters

  • report (Optional[bool]) – Experiment 결과 출력 여부

  • token (Optional[str]) – Slack Bot의 token

  • channel (Optional[str]) – Slack Bot이 전송할 channel

  • name (Optional[str]) – Slack Bot의 표시될 이름

  • icon_emoji (Optional[str]) – Slack Bot의 표시될 사진 (emoji)

  • mp_num (Optional[int]) – 병렬 처리에 사용될 process의 수 (0: 직렬 처리)

  • analysis (Optional[bool]) – 각 전략의 보고서 전송 여부

  • kor (Optional[bool]) – 국내 여부

  • path (Optional[str]) – secret.key 혹은 token.dat 이 포함된 경로

exps

각 전략에 따른 parameter 분포

Type:

Dict[str, List[Dict[str, int]]]

Examples

>>> qsb = zz.quant.QuantSlackBotKI("00000000-00", token=token, channel=channel)
sell()[source]

매도 signals 탐색

한국투자증권의 잔고와 주식 보유 상황을 image로 변환하여 slack으로 전송 및 보유 중인 주식에 대해 매도 signals 탐색

zerohertzLib.quant.backtest(data, signals, ohlc='', threshold=1, signal_key='signals')[source]

전략에 의해 생성된 signals backtest

Parameters:
  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • signals (pd.DataFrame) – "signals" column이 포함된 data (다른 이름으로 지정했을 시 signal_key 사용)

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • threshold (Optional[Union[int, Tuple[int]]]) – 매수, 매도를 결정할 signals 경계값

  • signal_key (Optional[str]) – "signals" 의 key 값

Returns:

총 수익률 (단위: %), 손실 거래 비율 (단위: %), 손실 거래 비율에 따른 수익률, 거래 정보 (매수가, 매도가, 수익률, 거래 기간), 총 매수, 총 매도

Return type:

Dict[str, Any]

Examples

>>> results = zz.quant.backtest(data, signals)
>>> results.keys()
dict_keys(['profit', 'loss', 'weighted_profit', 'transaction', 'buy', 'sell'])
>>> results["transaction"].keys()
dict_keys(['buy', 'sell', 'profit', 'period'])
zerohertzLib.quant.bollinger_bands(data, window=60, num_std_dev=2.5, ohlc='')[source]

Bollinger band 기반 매수 및 매도 signal을 생성하는 함수

Note

Bollinger Band

  • Definition: 1980년대에 John Bollinger에 의해 개발된 가격 변동성 및 추세 파악 기법

  • Mean
    • Middle Band: 기본적인 중간 가격 추세

    • Upper Band: Middle band에서 일정 표준편차 위에 위치 (과도한 상승 추세나 고평가 상태)

    • Lower Band: Middle band에서 일정 표준편차 아래에 위치 (과도한 하락 추세나 저평가 상태)

  • 매수 신호 (+1): 주가가 하단 Bollinger band (lower_band) 아래로 감소할 때 생성 (과매도 상태)

  • 매도 신호 (-1): 주가가 상단 Bollinger band (upper_band) 위로 상승할 때 생성 (과매수 상태)

Parameters:
  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • window (Optional[int]) – 이동 평균을 계산하기 위한 widnow 크기

  • num_std_dev (Optional[float]) – 표준편차의 배수

  • ohlc (Optional[str]) – 이동 평균을 계산할 때 사용할 data 의 column 이름

Returns:

각 날짜에 대한 signal ("signals") 정보

Return type:

pd.DataFrame

Examples

>>> zz.quant.bollinger_bands(data)
              middle_band     upper_band    lower_band  signals
Date
2022-01-03            NaN            NaN           NaN        0
...                   ...            ...           ...      ...
2023-12-19  102771.666667  111527.577705  94015.755629        0
[485 rows x 4 columns]
_images/quant.bollinger_bands.png
zerohertzLib.quant.experiments(title, data, method, exps, ohlc='', vis=False, dpi=100, report=True)[source]

Full factorial design 기반의 backtest 수행 함수

Parameters:
  • title (str) – 종목 이름

  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • method (Callable[[Any], pd.DataFrame]) – Full factorial을 수행할 전략 함수

  • exps (List[List[Any]]) – 전략 함수에 입력될 변수들의 범위

  • ohlc (Optional[str]) – 사용할 data 의 column 이름

  • vis (Optional[bool]) – Candle chart 시각화 여부

  • dpi (Optional[int]) – Graph 저장 시 DPI (Dots Per Inch)

  • report (Optional[bool]) – Experiment 결과 출력 여부

Returns:

손실 거래 비율에 따른 수익률, signals, parameters

Return type:

Dict[str, List[Any]]

Examples

>>> exps = [[10, 20, 25, 30], [70, 75, 80, 85, 90], [14, 21, 31]]
>>> results = zz.quant.experiments(title, data, zz.quant.rsi, exps)
+----------------------+------------+------------+
| EXP                  |     PROFIT | LOSS RATIO |
+----------------------+------------+------------+
| 10-70-14             |      5.65% |      0.00% |
| 10-70-21             |   -100.00% |    100.00% |
| ...                  |        ... |        ... |
| 30-90-21             |     21.25% |      0.00% |
| 30-90-31             |     20.98% |      0.00% |
| ==================== | ========== | ========== |
| WORST (10-70-21)     |   -100.00% |    100.00% |
| BEST (25-90-31)      |     21.53% |      0.00% |
| OPTIM (25-75-31)     |     21.53% |      0.00% |
+----------------------+------------+------------+
>>> results.keys()
dict_keys(['profits', 'signals', 'exps_str', 'exps_tup'])
>>> results["profits"]
[21.530811750223275, ...]
>>> results["signals"][0].columns
Index(['RSI', 'signals', 'logic'], dtype='object')
>>> results["exps_str"]
['25-75-31', ...]
>>> results["exps_tup"]
[(25, 75, 31), ...]
zerohertzLib.quant.macd(data, n_fast=12, n_signal=9, ohlc='')[source]

MACD 기반 매수 및 매도 signal을 생성하는 함수

Note

MACD (Moving Average Convergence Divergence)

  • Definition: 빠른 EMA (n_fast)와 느린 EMA (n_slow)의 차이
    • n_slow = n_fast * 2

  • Mean
    • EMA (Exponential Moving Average): 최근 가격에 더 많은 가중치를 두어 계산하는 이동 평균

    • Signal line: MACD의 추세를 평활화하여 추세의 방향과 강도를 파악

  • 매수 신호 (+1): MACD가 signal line 위로 상승할 때 생성 (상승 추세)

  • 매도 신호 (-1): MACD가 signal line 아래로 하락할 때 생성 (하락 추세)

Parameters:
  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • n_fast (Optional[int]) – 빠른 EMA 계산을 위한 기간

  • n_signal (Optional[int]) – MACD signal line 계산을 위한 기간

  • ohlc (Optional[str]) – Momentum을 계산할 때 사용할 data 의 column 이름

Returns:

각 날짜에 대한 signal ("signals") 정보

Return type:

pd.DataFrame

Examples

>>> zz.quant.macd(data)
                   MACD  signals
Date
2022-01-03     0.000000        0
...                 ...      ...
2023-12-19 -1950.006134        0
[485 rows x 2 columns]
_images/quant.macd.png
zerohertzLib.quant.momentum(data, window=5, ohlc='')[source]

Momentum 기반 매수 및 매도 signal을 생성하는 함수

Note

Momentum

  • Definition: data[ohlc].diff(window) 를 통해 window 일 전 가격 사이의 차이 계산

  • Mean
    • 양의 momentum: 가격 상승

    • 음의 momentum: 가격 하락

    • Momentum의 크기: 추세의 강도

  • 매수 신호 (+1): 주가 momentum이 양수일 때 생성 (상승 추세)

  • 매도 신호 (-1): 주가 momentum이 음수일 때 생성 (하락 추세)

Parameters:
  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • window (Optional[int]) – Momentum을 계산하기 위한 widnow 크기

  • ohlc (Optional[str]) – Momentum을 계산할 때 사용할 data 의 column 이름

Returns:

각 날짜에 대한 signal ("signals") 정보

Return type:

pd.DataFrame

Examples

>>> zz.quant.momentum(data)
            momentum  signals
Date
2022-01-03       NaN        0
...              ...      ...
2023-12-19     550.0        0
[485 rows x 2 columns]
_images/quant.momentum.png
zerohertzLib.quant.moving_average(data, short_window=40, long_window=80, threshold=0.0, ohlc='')[source]

단기 및 장기 이동 평균 기반 매수 및 매도 signal을 생성하는 함수

Note

Moving Average

  • Definition: 일정 기간 동안 평균화하여 추세 파악 및 noise 감소

  • 매수 신호 (+1): 단기 이동 평균이 장기 이동 평균보다 높을 때 생성 (상승 추세)

  • 매도 신호 (-1): 단기 이동 평균이 장기 이동 평균보다 낮을 때 생성 (하락 추세)

Parameters:
  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • short_window (Optional[int]) – 단기 이동 평균을 계산하기 위한 window 크기

  • long_window (Optional[int]) – 장기 이동 평균을 계산하기 위한 widnow 크기

  • threshold (Optional[float]) – 신호를 발생 시킬 임계값

  • ohlc (Optional[str]) – 이동 평균을 계산할 때 사용할 data 의 column 이름

Returns:

각 날짜에 대한 signal ("signals") 정보

Return type:

pd.DataFrame

Examples

>>> zz.quant.moving_average(data)
            short_mavg    long_mavg  signals
Date
2022-01-03  139375.000  139375.0000        0
...                ...          ...      ...
2023-12-19  102450.000  102337.1875        0
[485 rows x 3 columns]
_images/quant.moving_average.png
zerohertzLib.quant.rsi(data, lower_bound=20, upper_bound=80, window=30, ohlc='')[source]

RSI 기반 매수 및 매도 signal을 생성하는 함수

Note

RSI (Relative Strength Index)

  • Definition
    • \(RS = \frac{Average\ Gain}{Average\ Loss}\)

    • \(RSI = 100 - \frac{100}{1+RS}\)

  • Mean
    • -10: 과매수 상태에서 중립 상태로 변화 (매도 position 청산)

    • 0-1: 과매수 상태로의 진입 (새로운 매도 position)

    • +10: 과매도 상태에서 중립 상태로 변화 (매수 position 청산)

    • 0+1: 과매도 상태로의 진입 (새로운 매수 position)

  • 매수 신호 (+1): RSI 값이 lower_bound 보다 낮을 때 생성 (과매도 상태)

  • 매도 신호 (-1): RSI 값이 upper_bound 보다 높을 때 생성 (과매수 상태)

Parameters:
  • data (pd.DataFrame) – OHLCV (Open, High, Low, Close, Volume) data

  • lower_bound (Optional[int]) – RSI 과매도 기준

  • upper_bound (Optional[int]) – RSI 과매수 기준

  • window (Optional[int]) – 이동 평균을 계산하기 위한 widnow 크기

  • ohlc (Optional[str]) – RSI를 계산할 때 사용할 data 의 column 이름

Returns:

각 날짜에 대한 signal ("signals") 정보

Return type:

pd.DataFrame

Examples

>>> zz.quant.rsi(data)
                  RSI  signals
Date
2022-01-03        NaN        0
...               ...      ...
2023-12-19  35.671343        0
[485 rows x 2 columns]
_images/quant.rsi.png