주식 종목 추천 전략 관련 모듈을 짜는 중.. n일치의 값을 불러와 해당 기간 내의 값과 최근값을 비교해야할 모듈들이 있었다… (ex. 거래량 상승폭, 종가 이동평균 등…)
주식시장 개장일을 쉽게 출력해주는 파이썬 라이브러리로 exchange_calendars, pandas_market_calendars 등이 있는 것 같았지만 최대한 불러오는 라이브러리의 개수를 줄이고 싶었다. 따라서 pykrx 안에서 해결이 가능할지 알아보던 중 get_nearest_business_day_in_a_week 함수를 발견해 이를 활용해보았다! 💡
def get_nearest_business_day_in_a_week(date: str = None, prev: bool = True) \
-> str:
"""인접한 영업일을 조회한다.
Args:
date (str , optional): 조회할 날짜, 입력하지 않으면 현재 시간으로 대체
prev (bool, optional): 휴일일 경우 이전/이후 영업일 선택
Returns:
str: 날짜 (YYMMDD)
"""
return krx.get_nearest_business_day_in_a_week(date, prev)
https://github.com/sharebook-kr/pykrx/blob/master/pykrx/stock/stock_api.py
이를 활용해 작성한 코드는 다음과 같다.
1. 특정일자를 입력
(기간인 경우 시작일과 종료일 사이의 일자를 리스트로 뽑음)
2. get_nearest_business_day_in_a_week 안에 입력일을 넣어준 뒤,
반환된 값이 입력값과 같으면 영업일 / 아니면 비영업일로 구분
[특정일 개장 여부 확인]
from pykrx import stock as pykrx_stock
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
## 특정일자 입력 (yyyyMMdd 형식)
business_date = "20240205"
if business_date = pykrx_stock.get_nearest_business_day_in_a_week(business_date):
print("영업일")
else:
print("비영업일")
[특정기간 개장 여부 확인]
from pykrx import stock as stock
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
## 특정일자 입력 (yyyyMMdd 형식)
business_date = "20240203"
end_date = datetime.strptime(business_date, "%Y%m%d")
## 기준일 1달 전
# start_date = end_date - timedelta(months=1)
## 기준일 1주 전
# start_date = end_date - timedelta(weeks=1)
## 기준일 3일 전
start_date = end_date - timedelta(days=3)
period = (end_date - start_date).days
dates = [d.strftime('%Y%m%d')
for d in pd.date_range(start_date, periods=period+1)]
dt_df = pd.DataFrame({
'date' : dates
})
# 각 일자별 영업일 여부 판단 (1=영업일, 0=비영업일)
dt_df['영업일 여부'] = dt_df['date'].apply(
lambda x: 1 if x==stock.get_nearest_business_day_in_a_week(x) else 0)
print(dt_df)
[특정기간 내 개장일 리스트 확인]
from pykrx import stock as stock
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
## 특정일자 입력 (yyyyMMdd 형식)
business_date = "20240203"
end_date = datetime.strptime(business_date, "%Y%m%d")
## 기준일 1달 전
# start_date = end_date - timedelta(months=1)
## 기준일 1주 전
# start_date = end_date - timedelta(weeks=1)
## 기준일 3일 전
start_date = end_date - timedelta(days=3)
period = (end_date - start_date).days
dates = [d.strftime('%Y%m%d')
for d in pd.date_range(start_date, periods=period+1)]
dt_df = pd.DataFrame({
'date' : dates
})
# 각 일자별 영업일 여부 판단 (1=영업일, 0=비영업일)
dt_df['영업일 여부'] = dt_df['date'].apply(
lambda x: 1 if x==stock.get_nearest_business_day_in_a_week(x) else 0)
bus_df = dt_df[dt_df['영업일 여부']==1]
bus_dt_list = bus_df['date'].to_list()
print(bus_dt_list)
실제 주식시장의 데이터를 불러와 사용하는 경우에 유용하게 사용될 듯 싶다~! 👍
주식 종목 추천 전략 관련 모듈을 짜는 중.. n일치의 값을 불러와 해당 기간 내의 값과 최근값을 비교해야할 모듈들이 있었다… (ex. 거래량 상승폭, 종가 이동평균 등…)
주식시장 개장일을 쉽게 출력해주는 파이썬 라이브러리로 exchange_calendars, pandas_market_calendars 등이 있는 것 같았지만 최대한 불러오는 라이브러리의 개수를 줄이고 싶었다. 따라서 pykrx 안에서 해결이 가능할지 알아보던 중 get_nearest_business_day_in_a_week 함수를 발견해 이를 활용해보았다! 💡
def get_nearest_business_day_in_a_week(date: str = None, prev: bool = True) \
-> str:
"""인접한 영업일을 조회한다.
Args:
date (str , optional): 조회할 날짜, 입력하지 않으면 현재 시간으로 대체
prev (bool, optional): 휴일일 경우 이전/이후 영업일 선택
Returns:
str: 날짜 (YYMMDD)
"""
return krx.get_nearest_business_day_in_a_week(date, prev)
https://github.com/sharebook-kr/pykrx/blob/master/pykrx/stock/stock_api.py
이를 활용해 작성한 코드는 다음과 같다.
1. 특정일자를 입력
(기간인 경우 시작일과 종료일 사이의 일자를 리스트로 뽑음)
2. get_nearest_business_day_in_a_week 안에 입력일을 넣어준 뒤,
반환된 값이 입력값과 같으면 영업일 / 아니면 비영업일로 구분
[특정일 개장 여부 확인]
from pykrx import stock as pykrx_stock
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
## 특정일자 입력 (yyyyMMdd 형식)
business_date = "20240205"
if business_date = pykrx_stock.get_nearest_business_day_in_a_week(business_date):
print("영업일")
else:
print("비영업일")
[특정기간 개장 여부 확인]
from pykrx import stock as stock
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
## 특정일자 입력 (yyyyMMdd 형식)
business_date = "20240203"
end_date = datetime.strptime(business_date, "%Y%m%d")
## 기준일 1달 전
# start_date = end_date - timedelta(months=1)
## 기준일 1주 전
# start_date = end_date - timedelta(weeks=1)
## 기준일 3일 전
start_date = end_date - timedelta(days=3)
period = (end_date - start_date).days
dates = [d.strftime('%Y%m%d')
for d in pd.date_range(start_date, periods=period+1)]
dt_df = pd.DataFrame({
'date' : dates
})
# 각 일자별 영업일 여부 판단 (1=영업일, 0=비영업일)
dt_df['영업일 여부'] = dt_df['date'].apply(
lambda x: 1 if x==stock.get_nearest_business_day_in_a_week(x) else 0)
print(dt_df)
[특정기간 내 개장일 리스트 확인]
from pykrx import stock as stock
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
## 특정일자 입력 (yyyyMMdd 형식)
business_date = "20240203"
end_date = datetime.strptime(business_date, "%Y%m%d")
## 기준일 1달 전
# start_date = end_date - timedelta(months=1)
## 기준일 1주 전
# start_date = end_date - timedelta(weeks=1)
## 기준일 3일 전
start_date = end_date - timedelta(days=3)
period = (end_date - start_date).days
dates = [d.strftime('%Y%m%d')
for d in pd.date_range(start_date, periods=period+1)]
dt_df = pd.DataFrame({
'date' : dates
})
# 각 일자별 영업일 여부 판단 (1=영업일, 0=비영업일)
dt_df['영업일 여부'] = dt_df['date'].apply(
lambda x: 1 if x==stock.get_nearest_business_day_in_a_week(x) else 0)
bus_df = dt_df[dt_df['영업일 여부']==1]
bus_dt_list = bus_df['date'].to_list()
print(bus_dt_list)
실제 주식시장의 데이터를 불러와 사용하는 경우에 유용하게 사용될 듯 싶다~! 👍