47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
|
|
"""
|
||
|
|
한국 주식 시장 거래일 여부 확인
|
||
|
|
exit code 0 = 거래일, 1 = 휴장일
|
||
|
|
|
||
|
|
사용:
|
||
|
|
python scripts/_is_trading_day.py
|
||
|
|
if ($LASTEXITCODE -ne 0) { exit }
|
||
|
|
"""
|
||
|
|
import sys
|
||
|
|
from datetime import date
|
||
|
|
import holidays
|
||
|
|
|
||
|
|
# 라이브러리가 포함하지만 KRX는 개장하는 날 (2008년 이후 제헌절)
|
||
|
|
_KRX_OPEN_OVERRIDES = {
|
||
|
|
(7, 17), # 제헌절 — 2008년부터 공휴일 제외, 장 열림
|
||
|
|
}
|
||
|
|
|
||
|
|
def is_trading_day(d: date = None) -> tuple[bool, str]:
|
||
|
|
if d is None:
|
||
|
|
d = date.today()
|
||
|
|
|
||
|
|
# 주말
|
||
|
|
if d.weekday() >= 5:
|
||
|
|
return False, "주말"
|
||
|
|
|
||
|
|
kr = holidays.SouthKorea(years=d.year)
|
||
|
|
|
||
|
|
if d in kr:
|
||
|
|
name = kr[d]
|
||
|
|
# KRX 개장 예외 날짜는 무시
|
||
|
|
if (d.month, d.day) in _KRX_OPEN_OVERRIDES:
|
||
|
|
return True, f"개장 (라이브러리 오류 무시: {name})"
|
||
|
|
return False, name
|
||
|
|
|
||
|
|
return True, "거래일"
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
today = date.today()
|
||
|
|
trading, reason = is_trading_day(today)
|
||
|
|
if trading:
|
||
|
|
print(f"[거래일] {today} — {reason}")
|
||
|
|
sys.exit(0)
|
||
|
|
else:
|
||
|
|
print(f"[휴장일] {today} — {reason}")
|
||
|
|
sys.exit(1)
|