이번에 들어간 내용
한투 호가 = 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:
@@ -93,6 +93,9 @@ class TickRecorder:
|
||||
session: Optional[str] = None,
|
||||
tick_seq: Optional[int] = None,
|
||||
persist_db: bool = True,
|
||||
cntr_str: Optional[float] = None,
|
||||
upper_limit_time: Optional[str] = None,
|
||||
tick_time_raw: Optional[str] = None,
|
||||
) -> None:
|
||||
"""체결 틱 1건 — WS 핫패스에서 호출 (논블로킹).
|
||||
|
||||
@@ -130,6 +133,13 @@ class TickRecorder:
|
||||
"source": (source or "kis")[:16],
|
||||
"recv_ts": recv_ts,
|
||||
}
|
||||
if cntr_str is not None:
|
||||
item["cntr_str"] = float(cntr_str)
|
||||
if upper_limit_time:
|
||||
item["upper_limit_time"] = str(upper_limit_time).strip()[:8]
|
||||
if tick_time_raw:
|
||||
# WS 원본 체결시각 — 자르지 않음 (초·밀리초·영업일 포함 그대로)
|
||||
item["tick_time_raw"] = str(tick_time_raw).strip()[:64]
|
||||
|
||||
with self._lock:
|
||||
buf = self._buffers.get(code)
|
||||
@@ -185,13 +195,17 @@ class TickRecorder:
|
||||
|
||||
@staticmethod
|
||||
def _normalize_tick_time(tick_time: str) -> str:
|
||||
"""HHMMSS 또는 YYYYMMDDHHMMSS → 14자리 시장 시각."""
|
||||
"""HHMMSS · YYYYMMDDHHMMSS · 그 이상(밀리초 등) → tick_time 컬럼용 14자리+."""
|
||||
raw = (tick_time or "").strip().replace(":", "").replace("-", "").replace(" ", "")
|
||||
if len(raw) >= 14:
|
||||
if len(raw) >= 14 and raw[:14].isdigit():
|
||||
return raw[:14]
|
||||
if len(raw) == 6 and raw.isdigit():
|
||||
today = dt.datetime.now().strftime("%Y%m%d")
|
||||
return today + raw
|
||||
if len(raw) > 6 and raw.isdigit():
|
||||
# KIS BSOP_DATE+STCK_CNTG_HOUR 등 — 앞 14자리가 유효하면 사용
|
||||
if len(raw) >= 14:
|
||||
return raw[:14]
|
||||
return dt.datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
|
||||
def _ensure_table(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user