zerohertzLib.quant ¶
Quant
FinanceDataReader 및 KoreaInvestment 를 통해 수집한 data를 이용해 매수, 매도 signal을 포착하고 test하는 quant function 및 class들
Important
signals["signals"] 부호의 의미
+1: 매수-1: 매도
Modules:
| Name | Description |
|---|---|
backtest | |
koreainvestment | |
methods | |
quant | |
util | |
Classes:
| Name | Description |
|---|---|
Balance | 한국투자증권의 국내 계좌 정보 조회 class |
Experiments | Full factorial design 기반의 backtest 수행 class |
Quant | 한 가지 종목에 대해 full factorial design 기반의 backtest를 수행하고 최적의 전략을 융합하는 class |
QuantBot | 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Slack으로 message와 graph를 전송하는 class |
QuantBotFDR | FinanceDataReader module 기반으로 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Bot을 통해 message와 graph를 전송하는 class |
QuantBotKI | 한국투자증권 API를 기반으로 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Bot을 통해 message와 graph를 전송하는 class |
Functions:
| Name | Description |
|---|---|
bollinger_bands | Bollinger band 기반 매수 및 매도 signal을 생성하는 function |
experiments | Full factorial design 기반의 backtest 수행 function |
macd | MACD 기반 매수 및 매도 signal을 생성하는 function |
momentum | Momentum 기반 매수 및 매도 signal을 생성하는 function |
moving_average | 단기 및 장기 이동 평균 기반 매수 및 매도 signal을 생성하는 function |
rsi | RSI 기반 매수 및 매도 signal을 생성하는 function |
__all__ module-attribute ¶
__all__ = ['Balance', 'Experiments', 'Quant', 'QuantBot', 'QuantBotFDR', 'QuantBotKI', 'backtest', 'bollinger_bands', 'experiments', 'macd', 'momentum', 'moving_average', 'rsi']
Balance ¶
Bases: KoreaInvestment
한국투자증권의 국내 계좌 정보 조회 class
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
account_no | str | API 호출 시 사용할 계좌 번호 | required |
path | str |
| './' |
kor | bool | 국내 여부 | True |
Attributes:
| Name | Type | Description |
|---|---|---|
balance | 현재 보유 주식과 계좌의 금액 정보 |
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
Methods:
| Name | Description |
|---|---|
__call__ | 현재 보유 금액을 반환 |
__contains__ | 보유 종목 여부를 확인 |
__getitem__ | Index에 따른 주식 정보를 반환 |
__len__ | 보유 주식 종류의 개수를 반환 |
barv | 현재 보유 종목의 이익과 손실을 bar chart로 시각화 |
bought_symbols | 보유 주식의 종목 code return |
items | 보유 주식의 반복문 사용을 위한 method |
merge | 현재 계좌와 입력 계좌의 정보를 병합하는 function |
pie | 현재 보유 종목을 pie chart로 시각화 |
table | 현재 계좌의 상태를 image로 저장 |
Source code in zerohertzLib/quant/koreainvestment.py
__contains__ ¶
__getitem__ ¶
barv ¶
barv() -> str
현재 보유 종목의 이익과 손실을 bar chart로 시각화
Returns:
| Type | Description |
|---|---|
str | 저장된 graph의 절대 경로 |
Examples:
Source code in zerohertzLib/quant/koreainvestment.py
bought_symbols ¶
items ¶
merge ¶
merge(balance: Balance) -> None
현재 계좌와 입력 계좌의 정보를 병합하는 function
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
balance | Balance | 병합될 계좌 정보 | required |
Returns:
| Type | Description |
|---|---|
None | 현재 계좌에 정보 update |
Examples:
Source code in zerohertzLib/quant/koreainvestment.py
pie ¶
pie() -> str
현재 보유 종목을 pie chart로 시각화
Returns:
| Type | Description |
|---|---|
str | 저장된 graph의 절대 경로 |
Examples:
Source code in zerohertzLib/quant/koreainvestment.py
table ¶
table() -> str
현재 계좌의 상태를 image로 저장
Returns:
| Type | Description |
|---|---|
str | 저장된 image의 절대 경로 |
Examples:
Source code in zerohertzLib/quant/koreainvestment.py
Experiments ¶
Full factorial design 기반의 backtest 수행 class
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title | str | 종목 이름 | required |
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
ohlc | str | 사용할 | '' |
vis | bool | Candle chart 시각화 여부 | False |
report | bool | Experiment 결과 출력 여부 | True |
Examples:
Methods:
| Name | Description |
|---|---|
bollinger_bands | Bollinger bands 전략 실험 |
macd | MACD 전략 실험 |
momentum | Momentum 전략 실험 |
moving_average | Moving average 전략 실험 |
rsi | RSI 전략 실험 |
Attributes:
| Name | Type | Description |
|---|---|---|
data | | |
exps_bollinger_bands | | |
exps_macd | | |
exps_momentum | | |
exps_moving_average | | |
exps_rsi | | |
ohlc | | |
report | | |
title | | |
vis | |
Source code in zerohertzLib/quant/backtest.py
exps_bollinger_bands instance-attribute ¶
exps_moving_average instance-attribute ¶
_experiments ¶
Source code in zerohertzLib/quant/backtest.py
bollinger_bands ¶
Bollinger bands 전략 실험
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
exps | list[list[Any]] | None | 전략 function에 입력될 변수들의 범위 | None |
Returns:
| Type | Description |
|---|---|
dict[str, list[Any]] | 손실 거래 비율에 따른 수익률, |
Source code in zerohertzLib/quant/backtest.py
macd ¶
momentum ¶
moving_average ¶
Quant ¶
Quant(title: str, data: DataFrame, ohlc: str = '', top: int = 1, methods: dict[str, list[list[Any]]] | None = None, report: bool = False)
Bases: Experiments
한 가지 종목에 대해 full factorial design 기반의 backtest를 수행하고 최적의 전략을 융합하는 class
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title | str | 종목 이름 | required |
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
ohlc | str | 사용할 data의 column 이름 | '' |
top | int | Experiment 과정에서 사용할 각 전략별 수 | 1 |
methods | dict[str, list[list[Any]]] | None | 사용할 전략들의 function명 및 parameters | None |
report | bool | Experiment 결과 출력 여부 | False |
Attributes:
| Name | Type | Description |
|---|---|---|
signals | 융합된 전략의 signal | |
methods | 융합된 전략명 | |
profit | 융합된 전략의 backtest profit | |
buy | 융합된 전략의 backtest 시 총 매수 | |
sell | 융합된 전략의 backtest 시 총 매도 | |
transaction | 융합된 전략의 backtest 시 거래 정보 (매수가, 매도가, 수익률, 거래 기간) | |
threshold_buy | 융합된 전략의 매수 signal threshold | |
threshold_sell | 융합된 전략의 매도 signal threshold | |
total_cnt | 융합된 전략의 수 | |
methods_cnt | 각 전략에 따른 이익이 존재하는 수 | |
exps_cnt | 각 전략과 parameter에 따른 이익이 존재하는 수 | |
exps_str | 각 전략에 따른 이익이 존재하는 paramter 문자열 |
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'})
Methods:
| Name | Description |
|---|---|
__call__ | 입력된 날짜에 대해 분석 정보 return |
Source code in zerohertzLib/quant/quant.py
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | |
__call__ ¶
입력된 날짜에 대해 분석 정보 return
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
day | str | int | 분석할 날짜 | -1 |
Returns:
| Type | Description |
|---|---|
dict[str, Any] | 각 전략에 따른 분석 정보 및 결론 |
Source code in zerohertzLib/quant/quant.py
QuantBot ¶
QuantBot(symbols: int | list[str], start_day: str = '', ohlc: str = '', top: int = 1, methods: dict[str, list[list[Any]]] | None = None, report: bool = False, token: str | None = None, channel: str | None = None, name: str | None = None, icon_emoji: str | None = None, mp_num: int = 0, analysis: bool = False, kor: bool = True)
입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Slack으로 message와 graph를 전송하는 class
Note
Abstract Base Class: 종목 code에 따른 종목명과 data를 불러오는 abstract method _get_data 정의 후 사용
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
symbols | int | list[str] | 종목 code들 | required |
start_day | str | 조회 시작 일자 ( | '' |
ohlc | str | 사용할 data의 column 이름 | '' |
top | int | Experiment 과정에서 사용할 각 전략별 수 | 1 |
methods | dict[str, list[list[Any]]] | None | 사용할 전략들의 function명 및 parameters | None |
report | bool | Experiment 결과 출력 여부 | False |
token | str | None | Bot의 token ( | None |
channel | str | None | Bot이 전송할 channel | None |
name | str | None | Bot의 표시될 이름 | None |
icon_emoji | str | None | Bot의 표시될 사진 (emoji) | None |
mp_num | int | 병렬 처리에 사용될 process의 수 (0: 직렬 처리) | 0 |
analysis | bool | 각 전략의 보고서 전송 여부 | False |
kor | bool | 국내 여부 | True |
Attributes:
| Name | Type | Description |
|---|---|---|
exps | 각 전략에 따른 parameter 분포 |
Examples:
Methods:
| Name | Description |
|---|---|
buy | 매수 signals 탐색 |
index | 모든 signals 탐색 |
Source code in zerohertzLib/quant/quant.py
_analysis_send ¶
Source code in zerohertzLib/quant/quant.py
_analysis_update ¶
_analysis_update(quant: Quant) -> None
Source code in zerohertzLib/quant/quant.py
_get_data abstractmethod ¶
_inference ¶
Source code in zerohertzLib/quant/quant.py
_plot ¶
Source code in zerohertzLib/quant/quant.py
_progress ¶
_progress(symbol: str, idx: int | ValueProxy, progress_thread_id: str, status: Literal['completed', 'failed']) -> None
Source code in zerohertzLib/quant/quant.py
_report ¶
Source code in zerohertzLib/quant/quant.py
_run ¶
Source code in zerohertzLib/quant/quant.py
_run_mp ¶
_traceback ¶
_traceback(error: Exception, message: str, symbol: str, idx: int | ValueProxy, progress_thread_id: str) -> None
Source code in zerohertzLib/quant/quant.py
buy ¶
QuantBotFDR ¶
QuantBotFDR(symbols: int | list[str], start_day: str = '', ohlc: str = '', top: int = 1, methods: dict[str, list[list[Any]]] | None = None, report: bool = False, token: str | None = None, channel: str | None = None, name: str | None = None, icon_emoji: str | None = None, mp_num: int = 0, analysis: bool = False, kor: bool = True)
Bases: QuantBot
FinanceDataReader module 기반으로 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Bot을 통해 message와 graph를 전송하는 class
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
symbols | int | list[str] | 종목 code들 혹은 시가 총액 순위 | required |
start_day | str | 조회 시작 일자 ( | '' |
ohlc | str | 사용할 data의 column 이름 | '' |
top | int | Experiment 과정에서 사용할 각 전략별 수 | 1 |
methods | dict[str, list[list[Any]]] | None | 사용할 전략들의 function명 및 parameters | None |
report | bool | Experiment 결과 출력 여부 | False |
token | str | None | Bot의 token ( | None |
channel | str | None | Bot이 전송할 channel | None |
name | str | None | Bot의 표시될 이름 | None |
icon_emoji | str | None | Bot의 표시될 사진 (emoji) | None |
mp_num | int | 병렬 처리에 사용될 process의 수 (0: 직렬 처리) | 0 |
analysis | bool | 각 전략의 보고서 전송 여부 | False |
kor | bool | 국내 여부 | True |
Attributes:
| Name | Type | Description |
|---|---|---|
exps | 각 전략에 따른 parameter 분포 | |
market | kor에 따른 시장 목록 |
Examples:
>>> qbf = zz.quant.QuantBotFDR(symbols, token=token, channel=channel)
>>> qbf = zz.quant.QuantBotFDR(10, token=token, channel=channel)
Source code in zerohertzLib/quant/quant.py
_get_data ¶
Source code in zerohertzLib/quant/quant.py
QuantBotKI ¶
QuantBotKI(account_no: str, symbols: list[str] | None = None, start_day: str = '', ohlc: str = '', top: int = 1, methods: dict[str, list[list[Any]]] | None = None, report: bool = False, token: str | None = None, channel: str | None = None, name: str | None = None, icon_emoji: str | None = None, mp_num: int = 0, analysis: bool = False, kor: bool = True, path: str = './')
한국투자증권 API를 기반으로 입력된 여러 종목에 대해 매수, 매도 signal을 판단하고 Bot을 통해 message와 graph를 전송하는 class
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
account_no | str | API 호출 시 사용할 계좌 번호 | required |
symbols | list[str] | None | 종목 code들 | None |
start_day | str | 조회 시작 일자 ( | '' |
ohlc | str | 사용할 | '' |
top | int | Experiment 과정에서 사용할 각 전략별 수 | 1 |
methods | dict[str, list[list[Any]]] | None | 사용할 전략들의 function명 및 parameters | None |
report | bool | Experiment 결과 출력 여부 | False |
token | str | None | Bot의 token ( | None |
channel | str | None | Bot이 전송할 channel | None |
name | str | None | Bot의 표시될 이름 | None |
icon_emoji | str | None | Bot의 표시될 사진 (emoji) | None |
mp_num | int | 병렬 처리에 사용될 process의 수 ( | 0 |
analysis | bool | 각 전략의 보고서 전송 여부 | False |
kor | bool | 국내 여부 | True |
path | str |
| './' |
Attributes:
| Name | Type | Description |
|---|---|---|
exps | 각 전략에 따른 parameter 분포 |
Examples:
Methods:
| Name | Description |
|---|---|
sell | 매도 signals 탐색 |
Source code in zerohertzLib/quant/koreainvestment.py
_get_data ¶
sell ¶
매도 signals 탐색
한국투자증권의 잔고와 주식 보유 상황을 image로 변환하여 slack으로 전송 및 보유 중인 주식에 대해 매도 signals 탐색
Source code in zerohertzLib/quant/koreainvestment.py
bollinger_bands ¶
bollinger_bands(data: DataFrame, window: int = 60, num_std_dev: float = 2.5, ohlc: str = '') -> DataFrame
Bollinger band 기반 매수 및 매도 signal을 생성하는 function
Note
Bollinger Band
- Definition: 1980년대에 John Bollinger에 의해 개발된 가격 변동성 및 추세 파악 기법
- Mean
- Middle Band: 기본적인 중간 가격 추세
- Upper Band: Middle band에서 일정 표준편차 위에 위치 (과도한 상승 추세나 고평가 상태)
- Lower Band: Middle band에서 일정 표준편차 아래에 위치 (과도한 하락 추세나 저평가 상태)
- 매수 신호: 주가가 하단 Bollinger band (
lower_band) 아래로 감소할 때 생성 (과매도 상태) - 매도 신호: 주가가 상단 Bollinger band (
upper_band) 위로 상승할 때 생성 (과매수 상태)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
window | int | 이동 평균을 계산하기 위한 widnow 크기 | 60 |
num_std_dev | float | 표준편차의 배수 | 2.5 |
ohlc | str | 이동 평균을 계산할 때 사용할 | '' |
Returns:
| Type | Description |
|---|---|
DataFrame | 각 날짜에 대한 signal ( |
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]
Source code in zerohertzLib/quant/methods.py
experiments ¶
experiments(title: str, data: DataFrame, method: Callable[[Any], DataFrame], exps: list[list[Any]], ohlc: str = '', vis: bool = False, dpi: int = 100, report: bool = True) -> dict[str, list[Any]]
Full factorial design 기반의 backtest 수행 function
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title | str | 종목 이름 | required |
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
method | Callable[[Any], DataFrame] | Full factorial을 수행할 전략 function | required |
exps | list[list[Any]] | 전략 function에 입력될 변수들의 범위 | required |
ohlc | str | 사용할 | '' |
vis | bool | Candle chart 시각화 여부 | False |
dpi | int | Graph 저장 시 DPI (Dots Per Inch) | 100 |
report | bool | Experiment 결과 출력 여부 | True |
Returns:
| Type | Description |
|---|---|
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), ...]
Source code in zerohertzLib/quant/backtest.py
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 | |
macd ¶
MACD 기반 매수 및 매도 signal을 생성하는 function
Note
MACD (Moving Average Convergence Divergence)
- Definition: 빠른 EMA (
n_fast)와 느린 EMA (n_slow)의 차이n_slow = n_fast * 2
- Mean
- EMA: 최근 가격에 더 많은 가중치를 두어 계산하는 이동 평균
- Signal line: MACD의 추세를 평활화하여 추세의 방향과 강도를 파악
- 매수 신호: MACD가 signal line 위로 상승할 때 생성 (상승 추세)
- 매도 신호: MACD가 signal line 아래로 하락할 때 생성 (하락 추세)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
n_fast | int | 빠른 EMA 계산을 위한 기간 | 12 |
n_signal | int | MACD signal line 계산을 위한 기간 | 9 |
ohlc | str | Momentum을 계산할 때 사용할 | '' |
Returns:
| Type | Description |
|---|---|
DataFrame | 각 날짜에 대한 signal ( |
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]
Source code in zerohertzLib/quant/methods.py
momentum ¶
Momentum 기반 매수 및 매도 signal을 생성하는 function
Note
Momentum
- Definition:
data[ohlc].diff(window)를 통해window일 전 가격 사이의 차이 계산 - Mean
- 양의 momentum: 가격 상승
- 음의 momentum: 가격 하락
- Momentum의 크기: 추세의 강도
- 매수 신호: 주가 momentum이 양수일 때 생성 (상승 추세)
- 매도 신호: 주가 momentum이 음수일 때 생성 (하락 추세)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
window | int | Momentum을 계산하기 위한 widnow 크기 | 5 |
ohlc | str | Momentum을 계산할 때 사용할 | '' |
Returns:
| Type | Description |
|---|---|
DataFrame | 각 날짜에 대한 signal ( |
Examples:
>>> zz.quant.momentum(data)
momentum signals
Date
2022-01-03 NaN 0
... ... ...
2023-12-19 550.0 0
[485 rows x 2 columns]
Source code in zerohertzLib/quant/methods.py
moving_average ¶
moving_average(data: DataFrame, short_window: int = 40, long_window: int = 80, threshold: float = 0.0, ohlc: str = '') -> DataFrame
단기 및 장기 이동 평균 기반 매수 및 매도 signal을 생성하는 function
Note
Moving Average
- Definition: 일정 기간 동안 평균화하여 추세 파악 및 noise 감소
- 매수 신호: 단기 이동 평균이 장기 이동 평균보다 높을 때 생성 (상승 추세)
- 매도 신호: 단기 이동 평균이 장기 이동 평균보다 낮을 때 생성 (하락 추세)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
short_window | int | 단기 이동 평균을 계산하기 위한 window 크기 | 40 |
long_window | int | 장기 이동 평균을 계산하기 위한 widnow 크기 | 80 |
threshold | float | 신호를 발생 시킬 임계값 | 0.0 |
ohlc | str | 이동 평균을 계산할 때 사용할 | '' |
Returns:
| Type | Description |
|---|---|
DataFrame | 각 날짜에 대한 signal ( |
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]
Source code in zerohertzLib/quant/methods.py
rsi ¶
rsi(data: DataFrame, lower_bound: int = 20, upper_bound: int = 80, window: int = 30, ohlc: str = '') -> DataFrame
RSI 기반 매수 및 매도 signal을 생성하는 function
Note
RSI (Relative Strength Index)
-
Definition
- \(RS = \frac{Average\ Gain}{Average\ Loss}\)
- \(RSI = 100 - \frac{100}{1+RS}\)
-
Mean
-1→0: 과매수 상태에서 중립 상태로 변화 (매도 position 청산)0→-1: 과매수 상태로의 진입 (새로운 매도 position)+1→0: 과매도 상태에서 중립 상태로 변화 (매수 position 청산)0→+1: 과매도 상태로의 진입 (새로운 매수 position)
- 매수 신호: RSI 값이
lower_bound보다 낮을 때 생성 (과매도 상태) - 매도 신호: RSI 값이
upper_bound보다 높을 때 생성 (과매수 상태)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data | DataFrame | OHLCV (Open, High, Low, Close, Volume) data | required |
lower_bound | int | RSI 과매도 기준 | 20 |
upper_bound | int | RSI 과매수 기준 | 80 |
window | int | 이동 평균을 계산하기 위한 widnow 크기 | 30 |
ohlc | str | RSI를 계산할 때 사용할 | '' |
Returns:
| Type | Description |
|---|---|
DataFrame | 각 날짜에 대한 signal ( |
Examples:
>>> zz.quant.rsi(data)
RSI signals
Date
2022-01-03 NaN 0
... ... ...
2023-12-19 35.671343 0
[485 rows x 2 columns]





