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:
139
docs/LS_WS_관측_예약.md
Normal file
139
docs/LS_WS_관측_예약.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# LS WS 저널 관측 (Bye / sends≈1 / abort_why / RSP)
|
||||
|
||||
8/25형 **불완전 REG** (`OPEN sends≈1` → Bye 반복) 와 관측 패치 필드
|
||||
(`abort_why`, `ws_same`, `LS WS RSP`) 를 **장중 hold** 구간에 자동 수집한다.
|
||||
|
||||
장외(hold 외)에는 LS 소켓이 없어 OPEN/Bye 가 없는 것이 **정상**이다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 파일 목록
|
||||
|
||||
| 경로 | 역할 |
|
||||
|------|------|
|
||||
| `scripts/observe_ls_ws_journal.py` | journalctl 수집·집계 (once / watch) |
|
||||
| `scripts/observe_ls_ws_journal.sh` | cron용 래퍼 (stdout → 일별 래퍼 로그) |
|
||||
| `docs/LS_WS_관측_예약.md` | 본 문서 |
|
||||
| `logs/ls_ws_observe_YYYYMMDD_HHMMSS.log` | 매칭된 저널 **원문** |
|
||||
| `logs/ls_ws_observe_YYYYMMDD_HHMMSS_summary.md` | **집계 요약** (sends 분포, abort_why, …) |
|
||||
| `logs/ls_ws_observe_cron_YYYYMMDD.log` | cron/래퍼 실행 로그 (그날 누적 append) |
|
||||
|
||||
관련 코드(관측 필드 출력):
|
||||
|
||||
| 경로 | 내용 |
|
||||
|------|------|
|
||||
| `kis_trader/ws/ls_ws.py` | `LS WS OPEN … abort_why=` / `CLOSE … ws_same=` / `LS WS RSP …` |
|
||||
| `kis_trader/utils/ls_ws_session_windows.py` | KR hold 기본 **07:00~20:00** |
|
||||
|
||||
유닛: `kis_trader_main.service`
|
||||
|
||||
---
|
||||
|
||||
## 2. 수동 실행
|
||||
|
||||
```bash
|
||||
cd /home/hoon/kis_bot
|
||||
|
||||
# 당일 00:00~지금 1회 집계
|
||||
python3 -u scripts/observe_ls_ws_journal.py --once
|
||||
|
||||
# hold 시각부터 지정
|
||||
python3 -u scripts/observe_ls_ws_journal.py --once --since "2026-08-26 07:00:00"
|
||||
|
||||
# 90분 폴링(2분 간격) 후 최종 집계 — 아침 재현용
|
||||
python3 -u scripts/observe_ls_ws_journal.py --watch --minutes 90 --interval 120
|
||||
|
||||
# 래퍼 (cron과 동일, 로그 append)
|
||||
bash scripts/observe_ls_ws_journal.sh watch
|
||||
bash scripts/observe_ls_ws_journal.sh once --since "2026-08-26 07:00:00"
|
||||
```
|
||||
|
||||
실행 후 stdout 에 `raw=` / `summary=` 경로가 찍힌다.
|
||||
|
||||
```bash
|
||||
# 최신 요약 보기
|
||||
ls -lt logs/ls_ws_observe_*_summary.md | head -3
|
||||
tail -f logs/ls_ws_observe_cron_$(date +%Y%m%d).log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. cron 예약 (평일 아침)
|
||||
|
||||
KR hold 기본 **07:00** → **07:05** 에 90분 watch 시작 (약 08:35 종료).
|
||||
|
||||
설치 (사용자 `hoon` crontab):
|
||||
|
||||
```cron
|
||||
# LS WS Bye/REG 관측 — 평일 07:05 KST, 90분 watch
|
||||
5 7 * * 1-5 /home/hoon/kis_bot/scripts/observe_ls_ws_journal.sh watch
|
||||
```
|
||||
|
||||
장 마감 후 하루 요약(선택):
|
||||
|
||||
```cron
|
||||
# LS WS 당일 전체 once 요약 — 평일 20:10 (hold 종료 직후)
|
||||
10 20 * * 1-5 /home/hoon/kis_bot/scripts/observe_ls_ws_journal.sh once --since "$(date +\%Y-\%m-\%d) 07:00:00"
|
||||
```
|
||||
|
||||
확인:
|
||||
|
||||
```bash
|
||||
crontab -l | grep observe_ls_ws
|
||||
```
|
||||
|
||||
제거:
|
||||
|
||||
```bash
|
||||
crontab -l | grep -v observe_ls_ws_journal | crontab -
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 요약 파일이 보는 것
|
||||
|
||||
| 집계 | 의미 |
|
||||
|------|------|
|
||||
| `LS WS OPEN` + `sends≈N` 분포 | N=1 다수 → 불완전 REG 의 |
|
||||
| `abort_why` | `opened_cleared` / `not_running` (REG 루프 중단 사유) |
|
||||
| `ws_same` | CLOSE/ERROR 가 **현재 소켓**인지 |
|
||||
| `LS WS RSP` / `rsp_cd` | REG ACK (body 없는 응답 포함) |
|
||||
| Bye / opcode=8 | 서버/연결 종료 시그니처 |
|
||||
| hold 관련 | 장외 대기 중이면 OPEN=0 이 정상 |
|
||||
|
||||
힌트 문구는 **가설**이다. `abort_why`·`ws_same` 없이 “고쳤다”고 단정하지 말 것.
|
||||
|
||||
---
|
||||
|
||||
## 5. 8/25 참고 시그니처 (이미 확인된 것)
|
||||
|
||||
- 장중 `sends≈1` OPEN 다수 (예: 373) + Bye/CLOSE 반복 (~1400대)
|
||||
- 정상급 `sends≈15` 이상은 소수
|
||||
- 당시 프로세스에는 `abort_why` / `ws_same` / `LS WS RSP` **없음** (관측 패치 전)
|
||||
- **재시작 후 hold 진입분**부터 새 필드가 찍힘
|
||||
|
||||
---
|
||||
|
||||
## 6. 운영 체크리스트
|
||||
|
||||
1. 전날/당일 `kis_trader_main` 재시작으로 관측 패치·틱 구독전체 적재 코드 반영 확인
|
||||
2. 평일 07:05 cron → `logs/ls_ws_observe_cron_YYYYMMDD.log` append 확인
|
||||
3. `*_summary.md` 에서 `sends≈1` 비율·`abort_why`·`ws_same` 확인
|
||||
4. 원인 확정 후에만 행동 패치(REG 재시도 / stale close 무시 등) — **선보고·승인**
|
||||
5. `LS_WS_TICK_SAVE=true` 여도 **Bye로 구독이 죽으면** `ls_ws_ticks` 는 0
|
||||
|
||||
---
|
||||
|
||||
## 7. 의존
|
||||
|
||||
- `journalctl` 읽기 권한 (동일 사용자 유닛 또는 systemd user)
|
||||
- Python 3, 레포 루트 `/home/hoon/kis_bot`
|
||||
- DB/증권사 API **호출 없음** (저널만)
|
||||
|
||||
---
|
||||
|
||||
## 8. 변경 이력
|
||||
|
||||
| 일자 | 내용 |
|
||||
|------|------|
|
||||
| 2026-08-26 | 스크립트·cron 문서 최초. 재시작 후 장외 hold 대기로 당일 새벽 재현 불가 → 07:05 watch 예약 |
|
||||
@@ -79,16 +79,20 @@ align 스터디는 `limit_atr_mult` 제외. fixed 스터디는 `atr_sl_*` 제외
|
||||
시세·호가 읽기 폴백 (실매=옵투나 같은 읽기):
|
||||
- `LIVE_TICK_PROVIDER` / `LIVE_OB_PROVIDER` 운영설정 **셀박** (`kiwoom`|`kis`). LS는 1차 아님(3차 spill).
|
||||
- `LIVE_FEED_FALLBACK_MAX_AGE_SEC`(기본 3) = **그 틱의 체결시각(FID20/chetime) vs 이 서버 지금**. 1·2·3차 동일. 벤더끼리 시각 비교 금지.
|
||||
- 호가 RAM도 동일 초: `snap_time`(KIS BSOP_HOUR / LS hotime / 키움 FID20) lag 초과 시 미반영·`get(max_age>0)` None. `FILTER_MAX_AGE=0`(마지막 RAM)은 snap 컷 안 함.
|
||||
- `TRIGGER_FEED_DETAIL_LOG`(기본 true) = 매수체크 `🔍` 로그에 틱1차설정/실제(kis|kiwoom|ls)·px·틱타임·호가 bid/ask/or 꼬리.
|
||||
- `BT_FEED_DETAIL_LOG`(기본 true) / `BT_FEED_DETAIL_LOG_MAX`(기본 40) = 옵투나·백테에도 동일 축: 틱/호가 로드 벤더 비율 INFO + TRIGGER 샘플. `entry_source=ws_ticks:kis` 등.
|
||||
- 호가 후처리(`recommend_orderbook_parameters`): 코어 TPE 호가OFF와 무관. `[호가후처리]` DB벤더·`[호가후처리샘플]` bid/ask/src 가 **후처리 구간**에 나옴.
|
||||
- 분봉 쓰레기=`CANDLE_GARBAGE_FALLBACK`(기본 true). 그 분 그 소스 틱 0건이거나 전부 **봉 끝시각** 대비 읽기나이 초과면 그 WS 봉을 구멍 → 다음 소스 **봉 통째**. 한 봉 안 키움+한투 혼합 금지. 실매 링이 그 소스·그 분을 커버 못하면 유지.
|
||||
- 한투 호가=`WS_ORDERBOOK_SAVE_KIS`: **2번째 앱키(`KIS_APP_KEY_OB_REAL`) 전용 세션만**. 키 없거나 start 실패 시 메인에 H0STASP0 붙이지 않음(시세 41 합산 금지).
|
||||
- `LS_FEED_FALLBACK_SUBSCRIBE`(기본 true) → 후보∪보유∪영구∪grace 를 LS RAM 미러. **MINIMAL ON/OFF 무관** (`sync_targets` + split reconcile 둘 다). DB 틱 `should_persist_ls`(영구만) 이번 범위 밖.
|
||||
`WS_ORDERBOOK_SAVE_MODE=tick` 이면 메인 `H0STCNT0` 체결마다 2키 OB RAM을 `on_orderbook_tick_sync` → `ws_orderbook`(source=`kis_h0stasp0`). 키움 0B↔0D 틱동기와 동일.
|
||||
- `LS_FEED_FALLBACK_SUBSCRIBE`(기본 false) → spill/permanent만. ON=후보∪보유∪grace LS RAM 미러(레거시).
|
||||
- `LS_WS_TICK_SAVE` → `ls_ws_ticks` INSERT. 게이트=`_ls_is_subscribed`(구독 전체, 호가와 동일). 봉·VI만 `should_persist_ls`(영구).
|
||||
- `BT_TICK_LS_THIRD_FALLBACK`(기본 true) → 백테/옵투나 `load_breakout_ticks_by_code` 가 같은 초 1·2차 없을 때 `ls_ws_ticks` 채움. 나이=`LIVE_FEED_FALLBACK_MAX_AGE_SEC`.
|
||||
- 키움 RAM/리스너/봉 skip = 읽기 나이. `ws_ticks` 적재는 기본 전부(`KIWOOM_TICK_LIVE_MAX_LAG_SEC=0`). 같이 내리지 말 것. `ws_ticks.channel`(기본 ws)은 봉과 같은 경로 라벨. ka10007을 틱 INSERT 하지 말 것.
|
||||
- 시세 REST 키 = `KIWOOM_WS_FORCE_REAL`(기본 true) 실키. `_get_kiwoom_creds` 가 `KIS_MOCK` 모의키로 가면 안 됨 (8001).
|
||||
- `LS_GAP_FILL_CANDIDATES` 기본 OFF.
|
||||
- `LS_WS_TICK_SAVE` 기본 false = `ls_ws_ticks` INSERT 만 OFF. `_tick_recorder` 를 같이 끄면 호가 틱동기도 0건. `LS_WS_ALSO_HOGA` 기본 true(UH1 구독). `LS_WS_ORDERBOOK_SAVE` 기본 true(구독 종목). 호가필터 `FILTER_MAX_AGE=0` 을 저장 TTL 과 다시 합치지 말 것.
|
||||
- `LS_WS_TICK_SAVE` 기본 false 가능(운영 ON 권장 검증기간). `_tick_recorder` 를 같이 끄면 호가 틱동기도 0건. `LS_WS_ALSO_HOGA` 기본 true(UH1 구독). `LS_WS_ORDERBOOK_SAVE` 기본 true(구독 종목). 호가필터 `FILTER_MAX_AGE=0` 을 저장 TTL 과 다시 합치지 말 것.
|
||||
- 매수 루프 전 종목 REST 금지. 매도: 3초 체인 → last-RAM(`SELL_WS_LAST_RAM_MAX_AGE_SEC`) → 직전가 캐시 → 4차 키움 `ka10007`+쿨다운. 한투 60초 캐시 금지. 보유 KIS는 41슬롯 pin + `WS_TICK_GRACE_SEC`(후보 KIS grace 아님).
|
||||
- MM 체결 알림: `시세: kiwoom(1차) | 호가: ls(3차)`.
|
||||
|
||||
@@ -278,6 +282,16 @@ Optuna 후처리(실매 엔진 비영향): OPTUNA_POST_TOP_N / INCLUDE_MODE / IN
|
||||
· optuna_rerun_postprocess.py (구 JSON 「이 잡 후처리 재실행」. 호가스냅<3 `not_enough_trades` 는 구JSON이 아님 — 재실행해도 스냅 없으면 8방 동일)
|
||||
후처리 앵커: gated TopN + stable TopN(표/적용) + mode + live(참고). 합의·과적합 가점은 gated+mode만.
|
||||
웹 Optuna: 학습/gated/stable Top5 행에 안정점수(↑·만점없음·원) + 과적합%(↓·0~100). 1위 비교표·mode_combo 실측행은 표시 안 함.
|
||||
**본 TPE 호가·휩쏘 (2026-08-23 A):** `OPTUNA_TPE_INCLUDE_ORDERBOOK`/`WHIPSAW` 기본 true →
|
||||
trial suggest 에 `_orderbook_filter_enabled`·spread/ratio/ask · `whipsaw_*`(돌파 제외).
|
||||
CLI `--orderbook-filter off` 여도 TPE 시 호가 스냅 로드. 사후 8방「필터후」는
|
||||
`OPTUNA_POST_FORCE_OB_WHIPSAW` 없으면 OFF (`_run_ob_whipsaw_full`). 축 변경 시 **새 study-name**.
|
||||
**웹 스캘 진입 스냅 (2026-08-23):** `run_scalping_backtest_web_aligned` 도 모멘텀/돌파/꼬리처럼
|
||||
`resolve_trigger_snapshots_for_backtest` → `_bt_orderbook_by_code` (표시용 enrich와 별개).
|
||||
미로드+호가ON+REJECT_IF_EMPTY 가 웹 0건 구멍이었음.
|
||||
**호가 UI=DB (2026-08-23):** 모멘텀 `mom_ob_filter` HTML `checked`+「ON」고정 금지.
|
||||
꼬리/돌파 `tl_/bo_ob_filter` 도 기본 unchecked → `/api/env/params` 실효값으로만 체크.
|
||||
스캘은 `bt_ob_ro_on` 읽기전용(원래 DB 반영).
|
||||
진입 격자(2026-08-15): OPTUNA_OB_ENTRY_SPREAD 0.1~8 / RATIO 0.05~1.5 / ASK_MULT 1~80 / LOOKBACK 30분.
|
||||
8방 스택(2026-08-16/17): OPTUNA_OB_COMBO_TRIALS_SINGLE=150 / DOUBLE=200 / TRIPLE=250.
|
||||
적용=방 단위(build_combo_env_patch). 합의=8방 중 median PnL 최고 방(_consensus_from_anchors).
|
||||
|
||||
@@ -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. 진단 스크립트도 실매와 **동일 한도**
|
||||
|
||||
---
|
||||
|
||||
52
docs/호가.md
52
docs/호가.md
@@ -6,6 +6,56 @@
|
||||
|
||||
---
|
||||
|
||||
## 0-0b. 벤더 공통: 실시간 호가(RAM) vs 틱동기 호가(DB) — 2026-08-25
|
||||
|
||||
**UH3 없음.** LS 체결=`US3`, 호가=`UH1`. (한투=`H0STCNT0`/`H0STASP0`, 키움=`0B`/`0D`)
|
||||
|
||||
| | RAM (실매 필터가 봄) | DB 호가 (`*_ORDERBOOK_SAVE_MODE=tick` 기본) |
|
||||
|--|----------------------|-----------------------------------------------|
|
||||
| **한투** | H0STASP0 올 때마다 | **H0STCNT0(체결) 1건** → 그때 RAM 1장 → `ws_orderbook` |
|
||||
| **키움** | 0D 올 때마다 | **0B(체결) 1건** → 그때 RAM 1장 → `ws_orderbook` |
|
||||
| **LS** | UH1 올 때마다 | **US3(체결) 1건** → 그때 RAM 1장 → `ls_ws_orderbook` |
|
||||
|
||||
- `MODE=interval` = 호가 메시지(UH1/0D/ASP0) 쪽에서 간격 저장. **세 증권사 공통 스위치**이지 LS 전용 신기능이 아님.
|
||||
- `LS_WS_TICK_SAVE` = `ls_ws_ticks` INSERT. **구독 전체**(영구∪후보∪보유) — 호가와 동일. 봉·VI만 영구.
|
||||
- `BT_TICK_LS_THIRD_FALLBACK`(기본 true) = 백테/옵투나 틱: 같은 초 1·2차 없으면 `ls_ws_ticks` (나이=폴백 3초).
|
||||
- 실매는 DB를 안 보고 **RAM**. DB는 백테/옵투나 재현용 샘플.
|
||||
|
||||
### 2026-08-25 LS `ls_ws_orderbook` 0건 — 원인 (코드)
|
||||
|
||||
의도(US3 틱동기)는 한투·키움과 **같음**. 문제는:
|
||||
|
||||
1. 장중 **Bye ≈ 매분** → OPEN 직후 구독 복구가 `sends≈1`(JIF만)로 **미완료**.
|
||||
2. 서버에 **US3/UH1 REG가 안 붙음** → 체결·호가 수신 없음 → tick 모드라 DB 0.
|
||||
3. 미완료인데도 `recovering=False` 로 풀리던 버그 → 워치독이 틱없음으로 또 끊음 (악순환).
|
||||
|
||||
**수정(동작) 2026-08-27:** `ls_ws.py` + `ls_token.py`
|
||||
|
||||
1. **OPEN마다 `_ws_reconnect_step=0` 리셋 제거** — Bye 플랩 시 1초 연타 원인.
|
||||
2. **조기 CLOSE/Bye 서킷** (`LS_WS_STABLE_OPEN_SEC`/`EARLY_BYE_STREAK`/`BYE_CIRCUIT_SLEEP_SEC`) — streak 도달 시 로컬 토큰 무효화+1회 재발급 후 대기.
|
||||
3. **REG 미완료면 `recovering` 유지** — `reg_ok`일 때만 해제·step/streak 리셋.
|
||||
4. adhoc에서 `fetch_ls_access_token` 강제 발급 **금지** (봇 프로세스 토큰 무효화).
|
||||
|
||||
`LS_WS_ENABLED` / TICK·ORDERBOOK_SAVE / 3차 spill **끄지 않음** (옵션1).
|
||||
|
||||
#### Bye ≈ 매분 — 로그·git으로 좁힌 것 (2026-08-25 journal)
|
||||
|
||||
| 비교 | Aug24 (정상 수집) | Aug25 (DB 0) |
|
||||
|------|-------------------|--------------|
|
||||
| 시간대당 `LSWebSocket.*Bye` | **0** (09~15시) | **~54~59**/시간 (≈매분) |
|
||||
| 같은 시간 `LS WS watchdog` | 드묾(장초 1회 등) | **장중 시간대 0** |
|
||||
| OPEN 복구 | `sends≈15~339` 완료 | 거의 항상 `sends≈1` (JIF만) |
|
||||
|
||||
- Bye 페이로드: `opcode=8` + `\x03\xe8Bye` = WebSocket **정상종료(1000) + 서버가 보낸 Bye**. 우리 워치독 문구(`틱 없음 → 강제 재연결`)와 **무관**.
|
||||
- 패턴: `OPEN(sends≈1)` → 약 **60초** 유지 → `Bye`+`CLOSE` → **같은 초~1초 안**에 다시 `OPEN(sends≈1)`. 침묵 워치독(grace30+silence45≈75초)보다 **먼저** 서버가 끊음.
|
||||
- 05:07 봇 재시작 이후 **07:00부터** 이미 동일 루프(장 시작 전). Aug24 18:37은 `KR=169 sends≈339`로 복구 성공 이력 있음.
|
||||
- `sends≈1` + KR 수백: REG 루프가 JIF 직후 `_opened` 해제되어 abort된 **형태**(가설).
|
||||
검증 키: CLOSE `ws_same=False`가 OPEN/REG 중 끼는지, 복구 로그 `abort_why=opened_cleared`. **미확정**.
|
||||
|
||||
**아직 단정 금지:** 이중세션(조건식 AFR vs 시세)·계정 한도·서버 idle 정책만의 단독 원인. 위는 “워치독 매분 킥”은 **아님**까지 확정.
|
||||
|
||||
---
|
||||
|
||||
## 0-0. 「호가 쌓기」는 설계가 아니다 (헷갈림 방지)
|
||||
|
||||
**DB에 호가 한 장씩 넣는 것(저장)은 이미 돌아가는 수집 기능이다.**
|
||||
@@ -157,7 +207,7 @@ AND라서 하나라도 깨지면 탈락 → 체감이 셈.
|
||||
### 키움 조건 vs LS 조건 (진입·수익구간 호가매도 공통)
|
||||
- `kiwoom_condition` / `condition` → 호가 **키움 0D RAM** · DB `ws_orderbook`
|
||||
- `ls_condition` → 호가 **LS UH1 RAM** · DB `ls_ws_orderbook` (키움으로 메우지 않음)
|
||||
수익구간·손절호가도 같은 스냅샷 API. **2026-08 운영:** 4전략 유니버스는 키움 조건이 본체. LS는 틱/호가 **구독 spill 3차**이지 “LS 전용 종목”이 아님 (`LIVE_OB_PROVIDER=kiwoom`).
|
||||
수익구간·손절호가도 같은 스냅샷 API. **2026-08 운영:** 4전략 유니버스는 키움 조건이 본체. 호가 구독/읽기 체인 **kis(2키 OB 41)→kiwoom→ls(3차)**. LS는 spill 3차지 “LS 전용 종목”이 아님 (`LIVE_OB_PROVIDER=kis`, `WS_OB_SUBSCRIBE_CHAIN=kis,kiwoom,ls`).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user