이번에 들어간 내용
한투 호가 = 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:
109
scratch/tick_density_same_stock.py
Normal file
109
scratch/tick_density_same_stock.py
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env python3
|
||||
"""같은 종목·같은 분에 키움 vs 한투 틱 밀도 (스톨 전)."""
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
if str(ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(ROOT))
|
||||
|
||||
from database import TradeDB
|
||||
from kis_trader.utils.env import get_env_from_db, get_env_int
|
||||
|
||||
db = TradeDB()
|
||||
print("LIVE_TICK", get_env_from_db("LIVE_TICK_PROVIDER", ""))
|
||||
print("LIVE_OB", get_env_from_db("LIVE_OB_PROVIDER", ""))
|
||||
print("KW_MAX", get_env_from_db("KIWOOM_WS_MAX_SUBSCRIPTIONS", ""), "def", get_env_int("KIWOOM_WS_MAX_SUBSCRIPTIONS", 100))
|
||||
print("SCOPE", get_env_from_db("WS_TICK_RECORD_SCOPE", ""))
|
||||
print("TICK_SELL", get_env_from_db("TICK_SELL_ENABLED", ""), "BO", get_env_from_db("BREAKOUT_TICK_SELL_ENABLED", ""))
|
||||
|
||||
print("\n== 09:00~09:05 (매도 전) 겹치는 종목 틱수 ==")
|
||||
rows = db.conn.execute(
|
||||
"""
|
||||
SELECT code,
|
||||
SUM(source='kiwoom') n_kw,
|
||||
SUM(source='kis') n_kis
|
||||
FROM ws_ticks
|
||||
WHERE recv_ts >= %s AND recv_ts < %s AND source IN ('kiwoom','kis')
|
||||
GROUP BY code
|
||||
HAVING SUM(source='kiwoom') > 0 AND SUM(source='kis') > 0
|
||||
ORDER BY SUM(source='kis') DESC
|
||||
LIMIT 15
|
||||
""",
|
||||
("2026-08-19 09:00:00", "2026-08-19 09:05:00"),
|
||||
).fetchall()
|
||||
for r in rows:
|
||||
d = dict(r)
|
||||
kw = int(d["n_kw"] or 0)
|
||||
ki = int(d["n_kis"] or 0)
|
||||
d["kis_per_kw"] = round(ki / kw, 2) if kw else None
|
||||
print(d)
|
||||
|
||||
print("\n== 025980 분별 틱수 09:00~09:20 ==")
|
||||
rows = db.conn.execute(
|
||||
"""
|
||||
SELECT DATE_FORMAT(recv_ts, '%%H:%%i') mm,
|
||||
SUM(source='kiwoom') n_kw,
|
||||
SUM(source='kis') n_kis
|
||||
FROM ws_ticks
|
||||
WHERE code=%s AND recv_ts >= %s AND recv_ts < %s AND source IN ('kiwoom','kis')
|
||||
GROUP BY DATE_FORMAT(recv_ts, '%%H:%%i')
|
||||
ORDER BY mm
|
||||
""",
|
||||
("025980", "2026-08-19 09:00:00", "2026-08-19 09:20:00"),
|
||||
).fetchall()
|
||||
for r in rows:
|
||||
print(dict(r))
|
||||
|
||||
print("\n== 같은 초 025980 09:04:50~09:05:06 (건강 구간) ==")
|
||||
rows = db.conn.execute(
|
||||
"""
|
||||
SELECT DATE_FORMAT(recv_ts, '%%H:%%i:%%s') ss,
|
||||
SUM(source='kiwoom') n_kw,
|
||||
SUM(source='kis') n_kis
|
||||
FROM ws_ticks
|
||||
WHERE code=%s AND recv_ts >= %s AND recv_ts <= %s AND source IN ('kiwoom','kis')
|
||||
GROUP BY DATE_FORMAT(recv_ts, '%%H:%%i:%%s')
|
||||
ORDER BY ss
|
||||
""",
|
||||
("025980", "2026-08-19 09:04:50", "2026-08-19 09:05:06"),
|
||||
).fetchall()
|
||||
for r in rows:
|
||||
print(dict(r))
|
||||
|
||||
print("\n== 09:00~09:35 distinct 종목: 키움만 / 한투만 / 둘다 ==")
|
||||
r = db.conn.execute(
|
||||
"""
|
||||
SELECT
|
||||
COUNT(DISTINCT CASE WHEN source='kiwoom' THEN code END) kw,
|
||||
COUNT(DISTINCT CASE WHEN source='kis' THEN code END) kis,
|
||||
COUNT(DISTINCT code) either
|
||||
FROM ws_ticks
|
||||
WHERE recv_ts >= %s AND recv_ts < %s AND source IN ('kiwoom','kis')
|
||||
""",
|
||||
("2026-08-19 09:00:00", "2026-08-19 09:35:00"),
|
||||
).fetchone()
|
||||
print(dict(r))
|
||||
only = db.conn.execute(
|
||||
"""
|
||||
SELECT
|
||||
SUM(srcs='kis') only_kis,
|
||||
SUM(srcs='kiwoom') only_kw,
|
||||
SUM(srcs='both') both_n
|
||||
FROM (
|
||||
SELECT code,
|
||||
CASE
|
||||
WHEN SUM(source='kis')>0 AND SUM(source='kiwoom')>0 THEN 'both'
|
||||
WHEN SUM(source='kis')>0 THEN 'kis'
|
||||
ELSE 'kiwoom'
|
||||
END srcs
|
||||
FROM ws_ticks
|
||||
WHERE recv_ts >= %s AND recv_ts < %s AND source IN ('kiwoom','kis')
|
||||
GROUP BY code
|
||||
) z
|
||||
""",
|
||||
("2026-08-19 09:00:00", "2026-08-19 09:35:00"),
|
||||
).fetchone()
|
||||
print(dict(only))
|
||||
Reference in New Issue
Block a user