이번에 들어간 내용

한투 호가 = 2번째 앱키 전용
키 없거나 start 실패 시 메인에 H0STASP0 안 붙임. 운영설정 WS_ORDERBOOK_SAVE_KIS 빨간 danger.

LS RAM 합집합
후보∪보유∪영구∪grace. sync_targets와 split reconcile 둘 다. 틱 DB 영구 게이트는 그대로.

분봉 쓰레기 → 다음 소스 봉 통째
그 분 틱 0건이거나 전부 봉끝 대비 LIVE_FEED_FALLBACK_MAX_AGE_SEC 초과면 구멍. 메인 WS → 2차 → LS → REST → rollup. CANDLE_GARBAGE_FALLBACK 기본 true.

파일: feed_fallback.py(신규), ws_manager.py, kis_ws.py, candle_series.py, bt_candle_source.py, live_config_schema.py, database.py, 스모크, MD 2개.

같은 ws_manager/database/kis_ws/live_config에는 직전 커밋 이후 쌓여 있던 시세 폴백·ENV 키 정리도 같이 들어갔습니다. 파일 단위로 나눌 수 없어서입니다.
This commit is contained in:
Your Name
2026-08-19 22:11:31 +09:00
parent d1dc274f0e
commit 0ecac7cb95
229 changed files with 8487 additions and 1647 deletions

View File

@@ -82,19 +82,16 @@ def _bars_per_day(tf_min: int) -> int:
# ─── 키움 키 로드 ─────────────────────────────────────────────────────
def _load_kiwoom_keys(db: TradeDB) -> tuple[str, str, bool]:
"""env_config 에서 키움 앱키/시크릿/모의여부를 로드.
"""env_auth_config 에서 키움 앱키/시크릿/모의여부를 로드.
우선순위
1. KIS_MOCK=true → KIWOOM_APP_KEY_MOCK/SECRET_MOCK
2. KIS_MOCK=false → KIWOOM_APP_KEY_REAL/SECRET_REAL
3. 위 둘 다 비어있으면 레거시 KIWOOM_APP_KEY/SECRET
"""
row = db.conn.execute(
"SELECT * FROM env_config ORDER BY id DESC LIMIT 1"
).fetchone()
if not row:
raise RuntimeError("env_config 테이블이 비어 있습니다.")
r = dict(row)
r = db.get_auth_env()
if not r:
raise RuntimeError("env_auth_config 테이블이 비어 있습니다.")
is_mock = str(r.get("KIS_MOCK", "")).strip().lower() in ("true", "1", "yes", "on")
@@ -114,7 +111,7 @@ def _load_kiwoom_keys(db: TradeDB) -> tuple[str, str, bool]:
if not key or not sec:
raise RuntimeError(
"키움 API 키 미설정. env_config 에 KIWOOM_APP_KEY_REAL/MOCK 또는 "
"키움 API 키 미설정. env_auth_config 에 KIWOOM_APP_KEY_REAL/MOCK 또는 "
"레거시 KIWOOM_APP_KEY 가 있어야 합니다."
)