fix(시세): LS spill-only·토큰 파일캐시·호가 snap_time 3초컷

- _feed_fallback 미러 OFF, LS cap/grace/hold RAM을 KIS·키움 spill과 정합
- LS 접근토큰 .ls_token_cache_*.json (재시작 재사용, revoke 루프 없음)
- 호가 RAM을 틱과 동일 LIVE_FEED_FALLBACK(snap_time)로 컷, 필터 max_age=0은 유지
- 익절 지정가 로그에 실제 호가 벤더(kis/kiwoom/ls 1·2·3차) 표기

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Your Name
2026-08-27 15:21:21 +09:00
parent ba2f9f0953
commit 5e44b86f8b
24 changed files with 1923 additions and 203 deletions

View File

@@ -154,12 +154,22 @@ env 스위치:
| TR | 시장 | 내용 |
|----|------|------|
| `US3` (기본) / `S3_`·`K3_` | 국내 | 체결 틱 |
| `UH1` 등 | 국내 | 호가 |
| `US3` (기본) / `S3_`·`K3_` | 국내 | **체결 틱** (호가 DB `MODE=tick` 트리거 = 한투 CNT0·키움 0B 와 동일 역할) |
| `UH1` / `H1_`·`HA_` | 국내 | **호가 → RAM** (`also_hoga`). **UH3 없음** |
| `UVI` 등 | 국내 | VI |
| `JIF` | 국내 | 장운영정보 (워치독 보조) |
| `GSC` | 해외 | 해외 체결 (`82{symbol}` 키) |
**호가 수집 (LS = 한투·키움과 같은 두 갈래)**
| 갈래 | TR | 역할 |
|------|-----|------|
| 실시간 호가 | UH1 | RAM 갱신 (실매 필터) |
| 틱동기 DB | US3 체결 때 | `LS_WS_ORDERBOOK_SAVE_MODE=tick` 이면 RAM 호가 1장 → `ls_ws_orderbook` |
`MODE=interval` 이면 UH1 경로에서 DB 저장. 세 증권사 공통 개념.
상세·8/25 Bye/`sends≈1` 사고: `docs/호가.md` §0-0b.
소켓 hold (벽시계): `ls_ws_session_windows`
- 국내 `07:00~20:00` / 해외 `21:00~06:00`(해외 구독 있을 때)
- 갭·장외: **소켓 close + 대기**, 토큰 캐시 유지
@@ -204,7 +214,7 @@ env 스위치:
1. 만료·서버 거부 코드 확인 전에는 **force 발급 금지**
2. KIS approval: 6h 가드 · 국내/해외 **공유 캐시만** · 세션 전환은 **close/open**
3. LS: `expires_in` 캐시 · 세션 hold 전환 시 **oauth 호출 금지**
4. 키움: LOGIN 거부 시에만 invalidate · 재연결 폭주 쿨다운
4. 키움: LOGIN 거부 시에만 invalidate · 재연결 단계 대기 (`WS_RECONNECT_DELAY_SECS`, 기본 1,3,5,7,10초)
5. 진단 스크립트도 실매와 **동일 한도**
---