버그 및 크리티컬 에러 수정
This commit is contained in:
@@ -4,19 +4,38 @@
|
||||
- KST 기준 장 시작/종료 시간 판별
|
||||
- 공휴일, 주말 휴장 체크
|
||||
"""
|
||||
from datetime import datetime, time
|
||||
from datetime import datetime, time, date as date_type
|
||||
|
||||
try:
|
||||
import pytz
|
||||
KST = pytz.timezone('Asia/Seoul')
|
||||
except ImportError:
|
||||
# pytz가 없으면 기본 timezone 사용 (환경변수에 의존)
|
||||
from datetime import timezone, timedelta
|
||||
KST = timezone(timedelta(hours=9))
|
||||
|
||||
# 한국 공휴일 (holidays 패키지)
|
||||
try:
|
||||
import holidays as _holidays_lib
|
||||
_kr_holidays = _holidays_lib.KR()
|
||||
except ImportError:
|
||||
_kr_holidays = None
|
||||
|
||||
|
||||
def _is_holiday(d: date_type) -> bool:
|
||||
"""공휴일 여부 확인. holidays 패키지 없으면 False 반환."""
|
||||
if _kr_holidays is None:
|
||||
return False
|
||||
return d in _kr_holidays
|
||||
|
||||
|
||||
def is_market_open() -> bool:
|
||||
"""
|
||||
현재 한국 증시 정규장 운영 시간인지 확인
|
||||
(평일 09:00 ~ 15:30, 공휴일 제외 로직은 아직 미포함)
|
||||
(평일 09:00 ~ 15:30 KST, 공휴일 제외)
|
||||
|
||||
수정:
|
||||
- market_end 경계: <= → < (15:30 정각은 폐장)
|
||||
- 공휴일 체크 추가 (holidays 패키지)
|
||||
"""
|
||||
now = datetime.now(KST)
|
||||
|
||||
@@ -24,12 +43,16 @@ def is_market_open() -> bool:
|
||||
if now.weekday() >= 5:
|
||||
return False
|
||||
|
||||
# 2. 시간 체크 (09:00 ~ 15:30)
|
||||
# 2. 공휴일 체크
|
||||
if _is_holiday(now.date()):
|
||||
return False
|
||||
|
||||
# 3. 시간 체크 (09:00 이상 ~ 15:30 미만)
|
||||
current_time = now.time()
|
||||
market_start = time(9, 0)
|
||||
market_end = time(15, 30)
|
||||
|
||||
return market_start <= current_time <= market_end
|
||||
return market_start <= current_time < market_end # 15:30 정각 제외
|
||||
|
||||
|
||||
def is_opening_range_period() -> bool:
|
||||
@@ -37,6 +60,8 @@ def is_opening_range_period() -> bool:
|
||||
now = datetime.now(KST)
|
||||
if now.weekday() >= 5:
|
||||
return False
|
||||
if _is_holiday(now.date()):
|
||||
return False
|
||||
t = now.time()
|
||||
return time(9, 0) <= t < time(9, 30)
|
||||
|
||||
@@ -46,14 +71,21 @@ def is_day_trade_entry_window() -> bool:
|
||||
now = datetime.now(KST)
|
||||
if now.weekday() >= 5:
|
||||
return False
|
||||
if _is_holiday(now.date()):
|
||||
return False
|
||||
t = now.time()
|
||||
return time(9, 30) <= t < time(15, 0)
|
||||
|
||||
|
||||
def is_eod_flat_time() -> bool:
|
||||
"""EOD 강제 청산 구간 (15:20~15:30)"""
|
||||
"""EOD 강제 청산 구간 (15:20~15:29)
|
||||
|
||||
수정: 상한을 15:30 미만(<)으로 변경 — 15:30은 폐장 후.
|
||||
"""
|
||||
now = datetime.now(KST)
|
||||
if now.weekday() >= 5:
|
||||
return False
|
||||
if _is_holiday(now.date()):
|
||||
return False
|
||||
t = now.time()
|
||||
return time(15, 20) <= t <= time(15, 30)
|
||||
return time(15, 20) <= t < time(15, 30)
|
||||
|
||||
Reference in New Issue
Block a user