Changes: - Added a new API endpoint for managing permanent subscriptions, allowing users to enable or disable subscriptions dynamically. - Implemented a function to fill candle data from Kiwoom, ensuring that only relevant data is inserted into the database. - Introduced a mechanism to handle master subscription states, improving the management of subscription statuses. - Updated the database schema to include new fields for managing subscription states and order book filtering. Impact: - These enhancements improve the flexibility and reliability of the trading system, allowing for better management of subscriptions and order book data, while reducing the risk of data inconsistencies. 히스토리 align 제거 븅신같은 초기설계 아예 제거 진입모드에 구멍메움 호가진입을 켜도 호가가 안들어올때 호가 안보고 그냥 사버림
24 lines
48 KiB
JSON
24 lines
48 KiB
JSON
{"role":"user","message":{"content":[{"type":"text","text":"<timestamp>Friday, Aug 14, 2026, 9:56 AM (UTC+9)</timestamp>\n<user_query>\n\nkis_alert_bot\nBOT\n오전 9:26\n\n🟢 [매도체결:MOMENTUM] 네오오토(212560)\n12,010원 × 25주\n손절호가 · 수익률 -1.78%\n실현 +295원 · ODNO=0000009597\n시세: kiwoom\n📊 MOMENTUM 당일 +295원 · 청산 2건\n\n━━━━━━━━━━━━━━━━━━━━\n💼 계좌\n예수금 471,997,465원\n총자산 477,987,576원 · 보유 15종목\n\n📊 손익 (당일)\n🤖 봇 실현 -1,932원 · 청산 3건\n📈 계좌평가 +1,172원 (+0.00%)\n\n💰 누적 (입금 대비)\n-22,012,424원 (-4.40%)\n\n이건 왜 마이너스인데 녹색으로 나오지? \n\nkis_alert_bot\nBOT\n오후 2:49\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-13 14:49:03\n유닛: kis_trader_main.service\n2026-08-13T14:49:02+09:00 ubuntu2404 python[1446832]: [14:49:02] [kis_trader.main] ℹ️ condition 소스 쓰는 전략 없음 → 조건검색 매니저 비활성\nkis_alert_bot\nBOT\n오후 2:49\n\n🚨 [오류감시] 유닛 복구 (active)\n\n시각: 2026-08-13 14:49:34\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → active\nkis_alert_bot\nBOT\n오후 2:49\n\n🚀 kis_trader 통합 봇 시작\n활성 전략: SCALP, SHORT, MOMENTUM, US_MOMENTUM, BREAKOUT\n\n【유니버스】\nSCALP: kiwoom_condition\n └ kiwoom_cond · scalp_re(seq=3)\nSHORT: kiwoom_condition\n └ kiwoom_cond · tail(seq=1)\nMOMENTUM: kiwoom_condition\n └ kiwoom_cond · momentum(seq=2)\nBREAKOUT: kiwoom_condition\n └ kiwoom_cond · breakout(seq=4)\n\n📡 [시세웹소켓] 키움(실전), KIS(실전)\n\n✅ [기동 계좌] 계좌[모의] 501***45-01 | 보유 20종목 / 총자산 477,932,316원 | cash_basis=dnca | 예수금 468,155,952 / D+2 460,604,246 / 주문가능 458,301,224 / 사용기준 468,155,952\n\nkis_alert_bot\nBOT\n오후 2:51\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-13 14:51:24\n상세: history=kiwoom 교집합 제외 1\n\nkis_alert_bot\nBOT\n오후 3:01\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 전량탈락 10→0\n\n코드: universe_wipe\n시각: 2026-08-13 15:01:16\n상세: history=kiwoom 교집합 제외 10\nkis_alert_bot\nBOT\n오후 3:01\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-13 15:01:16\n유닛: kis_trader_main.service\n2026-08-13T15:01:16+09:00 ubuntu2404 python[1446832]: [15:01:16] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=SCALP 유니버스 전량탈락 10→0\nkis_alert_bot\nBOT\n오후 3:04\n\n🚨 [오류감시] 유닛 비활성 (deactivating)\n\n시각: 2026-08-13 15:04:39\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → deactivating\nkis_alert_bot\nBOT\n오후 3:04\n\n🛑 kis_trader 종료\n━━━━━━━━━━━━━━━━━━━━\n\n🕒 종료 시각: 2026-08-13 15:04:31\n🤖 당일 봇 실현: +11,313원 (청산 9건)\n계좌: 모의 501***45-01\n현재 자산: 477,862,027원\n보유 종목: 22개\n예수금(선택기준:dnca): 468,155,952원 | 주문가능금액: 457,501,434원 | 예수금총액: 468,155,952원 | D+2예수금: 459,800,437원\n━━━━━━━━━━━━━━━━━━━━\n\nkis_alert_bot\nBOT\n오후 3:05\n\n🚨 [오류감시] 유닛 복구 (active)\n\n시각: 2026-08-13 15:05:40\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → active\nkis_alert_bot\nBOT\n오후 3:05\n\n🚀 kis_trader 통합 봇 시작\n활성 전략: SCALP, SHORT, MOMENTUM, US_MOMENTUM, BREAKOUT\n\n【유니버스】\nSCALP: kiwoom_condition\n └ kiwoom_cond · scalp_re(seq=3)\nSHORT: kiwoom_condition\n └ kiwoom_cond · tail(seq=1)\nMOMENTUM: kiwoom_condition\n └ kiwoom_cond · momentum(seq=2)\nBREAKOUT: kiwoom_condition\n └ kiwoom_cond · breakout(seq=4)\n\n📡 [시세웹소켓] 키움(실전), KIS(실전)\n\n✅ [기동 계좌] 계좌[모의] 501***45-01 | 보유 22종목 / 총자산 477,836,987원 | cash_basis=dnca | 예수금 468,155,952 / D+2 459,800,437 / 주문가능 457,501,434 / 사용기준 468,155,952\n\nkis_alert_bot\nBOT\n오후 3:07\n\n🚨 [운영알림/CRITICAL] MOMENTUM 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-13 15:07:54\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오후 3:07\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-13 15:07:54\n유닛: kis_trader_main.service\n2026-08-13T15:07:54+09:00 ubuntu2404 python[1460347]: [15:07:54] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=MOMENTUM 유니버스 전량탈락 1→0\nkis_alert_bot\nBOT\n오후 3:08\n\n🧩 [Pre-EOD 고아복구]\n\n복구: 8종목\n계좌동기화: 2종목\n청산후스킵: 3종목\n청산후유령정리: 0종목\n유령삭제: 0종목\n실패: 0건 · 블루콤(033560) [SHORT] 450주 · 팅크웨어(084730) [MOMENTUM] 88주 · 빅솔론(093190) [MOMENTUM] 130주 · 한솔아이원스(114810) [SCALP] 24주 · 한라캐스트(125490) [MOMENTUM] 27주 · 지투파워(388050) [MOMENTUM] 33주 · 394420(394420) [MOMENTUM] 50주 · 엔알비(475230) [MOMENTUM] 64주 ⏭스킵 우리넷(115440) 장마감청산@2026-08-07 15:25:45 ⏭스킵 위메이드플레이(123420) 장마감청산@2026-08-11 15:26:26 ⏭스킵 엔에프씨(265740) 장마감청산@2026-08-06 15:23:17 🔄동기화 원일티엔아이(136150) [MOMENTUM] 36➔504주 (8,195➔8,269원) 🔄동기화 범한퓨얼셀(382900) [MOMENTUM] 15➔45주 (19,150➔19,150원)\nkis_alert_bot\nBOT\n오후 3:10\n\n🚨 [오류감시] 유닛 비활성 (deactivating)\n\n시각: 2026-08-13 15:10:41\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → deactivating\nkis_alert_bot\nBOT\n오후 3:11\n\n🚨 [오류감시] 프로세스 종료\n\n시각: 2026-08-13 15:11:45\n유닛: kis_trader_main.service\n2026-08-13T15:11:43+09:00 ubuntu2404 systemd[1]: kis_trader_main.service: Main process exited, code=killed, status=9/KILL\nkis_alert_bot\nBOT\n오후 3:12\n\n🚨 [오류감시] 유닛 복구 (active)\n\n시각: 2026-08-13 15:12:42\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → active\nkis_alert_bot\nBOT\n오후 3:13\n\n🚀 kis_trader 통합 봇 시작\n활성 전략: SCALP, SHORT, MOMENTUM, US_MOMENTUM, BREAKOUT\n\n【유니버스】\nSCALP: kiwoom_condition\n └ kiwoom_cond · scalp_re(seq=3)\nSHORT: kiwoom_condition\n └ kiwoom_cond · tail(seq=1)\nMOMENTUM: kiwoom_condition\n └ kiwoom_cond · momentum(seq=2)\nBREAKOUT: kiwoom_condition\n └ kiwoom_cond · breakout(seq=4)\n\n📡 [시세웹소켓] 키움(실전), KIS(실전)\n\n✅ [기동 계좌] 계좌[모의] 501***45-01 | 보유 21종목 / 총자산 477,882,378원 | cash_basis=dnca | 예수금 468,155,952 / D+2 460,084,408 / 주문가능 457,783,985 / 사용기준 468,155,952\n\nkis_alert_bot\nBOT\n오후 3:16\n\n📈 [장마감 전 현황 - 15:15]\n\n🤖 봇 실현: +24,333원 (청산 15건)\n📈 계좌평가: -267,852원 (-0.06%)\n현재 자산: 477,894,583원\n보유 종목: 19개\n계좌: 모의 501***45-01\n예수금(선택기준:dnca): 468,155,952원 | 주문가능금액: 460,298,435원 | 예수금총액: 468,155,952원 | D+2예수금: 462,611,493원\nkis_alert_bot\nBOT\n오후 3:19\n\n🚨 [운영알림/CRITICAL] MOMENTUM 유니버스 0 지속 204초\n\n코드: universe_zero\n시각: 2026-08-13 15:19:25\n상세: source=kiwoom_condition kw=0 ls=-1\nkis_alert_bot\nBOT\n오후 3:21\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 전량탈락 5→0\n\n코드: universe_wipe\n시각: 2026-08-13 15:21:24\n상세: history=kiwoom 교집합 제외 5\n\nkis_alert_bot\nBOT\n오후 3:34\n\n🏁 [장마감 최종 보고 - 15:35]\n━━━━━━━━━━━━━━━━━━━━\n📅 당일 손익\n\n🤖 봇 실현: -43,935원 (청산 31건)\n📈 계좌평가: -178,231원 (-0.04%)\n시작 총자산: 478,162,435원\n종료 총자산: 477,984,204원\n💰 누적 (입금 대비)\n\n총 입금: 500,000,000원\n현재 자산: 477,984,204원\n누적 손익: -22,015,796원 (-4.40%)\n📊 거래 현황\n\n오늘 매매: 31건\n보유 종목: 8개\n계좌: 모의 501***45-01\n예수금(선택기준:dnca): 468,155,952원 | 주문가능금액: 466,785,398원 | 예수금총액: 468,155,952원 | D+2예수금: 469,168,834원\n━━━━━━━━━━━━━━━━━━━━\n\nkis_alert_bot\nBOT\n오후 3:35\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 0 지속 180초\n\n코드: universe_zero\n시각: 2026-08-13 15:35:16\n상세: source=kiwoom_condition kw=0 ls=-1\nkis_alert_bot\nBOT\n오후 3:36\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-13 15:36:16\n유닛: kis_trader_main.service\n2026-08-13T15:35:16+09:00 ubuntu2404 python[1466728]: [15:35:16] [kis_trader.ops_alert] [ops_alert] sent code=universe_zero ok_mm=True title=SCALP 유니버스 0 지속 180초\nkis_alert_bot\nBOT\n오후 3:36\n\n🧩 [장마감 고아복구]\n\n복구: 0종목\n계좌동기화: 0종목\n청산후스킵: 4종목\n청산후유령정리: 0종목\n유령삭제: 0종목\n실패: 0건 ⏭스킵 우리넷(115440) 장마감청산@2026-08-07 15:25:45 ⏭스킵 위메이드플레이(123420) 장마감청산@2026-08-11 15:26:26 ⏭스킵 원일티엔아이(136150) 장마감청산@2026-08-13 15:22:57 ⏭스킵 엔에프씨(265740) 장마감청산@2026-08-06 15:23:17\n\nkis_alert_bot\nBOT\n오후 11:35\n\n🚨 [오류감시] 유닛 비활성 (deactivating)\n\n시각: 2026-08-13 23:35:59\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → deactivating\nkis_alert_bot\nBOT\n오후 11:36\n\n🛑 kis_trader 종료\n━━━━━━━━━━━━━━━━━━━━\n\n🕒 종료 시각: 2026-08-13 23:36:19\n🤖 당일 봇 실현: -43,935원 (청산 31건)\n계좌: 모의 501***45-01\n현재 자산: 477,984,204원\n보유 종목: 8개\n예수금(선택기준:dnca): 471,997,465원 | 주문가능금액: 466,822,989원 | 예수금총액: 471,997,465원 | D+2예수금: 469,168,834원\n━━━━━━━━━━━━━━━━━━━━\n\nkis_alert_bot\nBOT\n오후 11:36\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-13 23:36:22\n유닛: kis_trader_main.service\n2026-08-13T23:36:22+09:00 ubuntu2404 python[1887217]: [23:36:22] [kis_trader.main] ℹ️ condition 소스 쓰는 전략 없음 → 조건검색 매니저 비활성\nkis_alert_bot\nBOT\n오후 11:36\n\n🚀 kis_trader 통합 봇 시작\n활성 전략: SCALP, SHORT, MOMENTUM, US_MOMENTUM, BREAKOUT\n\n【유니버스】\nSCALP: kiwoom_condition\n └ kiwoom_cond · scalp_re(seq=3)\nSHORT: kiwoom_condition\n └ kiwoom_cond · tail(seq=1)\nMOMENTUM: kiwoom_condition\n └ kiwoom_cond · momentum(seq=2)\nBREAKOUT: kiwoom_condition\n └ kiwoom_cond · breakout(seq=4)\n\n📡 [시세웹소켓] 키움(실전), KIS(실전)\n\n✅ [기동 계좌] 계좌[모의] 501***45-01 | 보유 8종목 / 총자산 477,984,204원 | cash_basis=dnca | 예수금 471,997,465 / D+2 469,168,834 / 주문가능 466,822,989 / 사용기준 471,997,465\n\nkis_alert_bot\nBOT\n오후 11:37\n\n🚨 [오류감시] 유닛 복구 (active)\n\n시각: 2026-08-13 23:36:59\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → active\n오늘\n\nkis_alert_bot\nBOT\n오전 1:17\n\n🚨 [오류감시] 유닛 비활성 (deactivating)\n\n시각: 2026-08-14 01:17:28\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → deactivating\nkis_alert_bot\nBOT\n오전 1:17\n\n🛑 kis_trader 종료\n━━━━━━━━━━━━━━━━━━━━\n\n🕒 종료 시각: 2026-08-14 01:17:46\n🤖 당일 봇 실현: +0원 (청산 0건)\n계좌: 모의 501***45-01\n현재 자산: 477,984,204원\n보유 종목: 8개\n예수금(선택기준:dnca): 471,997,465원 | 주문가능금액: 466,822,989원 | 예수금총액: 471,997,465원 | D+2예수금: 469,168,834원\n━━━━━━━━━━━━━━━━━━━━\n\nkis_alert_bot\nBOT\n오전 1:17\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 01:17:48\n유닛: kis_trader_main.service\n2026-08-14T01:17:48+09:00 ubuntu2404 python[1986742]: [01:17:48] [kis_trader.main] ℹ️ condition 소스 쓰는 전략 없음 → 조건검색 매니저 비활성\nkis_alert_bot\nBOT\n오전 1:17\n\n🚀 kis_trader 통합 봇 시작\n활성 전략: SCALP, SHORT, MOMENTUM, US_MOMENTUM, BREAKOUT\n\n【유니버스】\nSCALP: kiwoom_condition\n └ kiwoom_cond · scalp_re(seq=3)\nSHORT: kiwoom_condition\n └ kiwoom_cond · tail(seq=1)\nMOMENTUM: kiwoom_condition\n └ kiwoom_cond · momentum(seq=2)\nBREAKOUT: kiwoom_condition\n └ kiwoom_cond · breakout(seq=4)\n\n📡 [시세웹소켓] 키움(실전), KIS(실전)\n\n✅ [기동 계좌] 계좌[모의] 501***45-01 | 보유 8종목 / 총자산 477,984,204원 | cash_basis=dnca | 예수금 471,997,465 / D+2 469,168,834 / 주문가능 466,822,989 / 사용기준 471,997,465\n\nkis_alert_bot\nBOT\n오전 1:18\n\n🚨 [오류감시] 유닛 복구 (active)\n\n시각: 2026-08-14 01:18:28\n유닛: kis_trader_main.service\nsystemctl is-active kis_trader_main.service → active\n\nkis_alert_bot\nBOT\n오전 9:00\n\n🌅 [장 시작 알림 - 09:00]\n━━━━━━━━━━━━━━━━━━━━\n\n🤖 활성 전략: SCALP, SHORT, MOMENTUM, US_MOMENTUM, BREAKOUT\n계좌: 모의 501***45-01\n현재 자산: 478,019,804원\n보유 종목: 8개\n예수금(선택기준:dnca): 471,997,465원 | 주문가능금액: 466,822,989원 | 예수금총액: 471,997,465원 | D+2예수금: 469,168,834원\n━━━━━━━━━━━━━━━━━━━━\n📈 오늘도 안전 매매! 손절 라인 준수.\n\nkis_alert_bot\nBOT\n오전 9:01\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:01:41\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:01\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:01:42\n유닛: kis_trader_main.service\n2026-08-14T09:01:41+09:00 ubuntu2404 python[1986742]: [09:01:41] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:03\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 0 지속 181초\n\n코드: universe_zero\n시각: 2026-08-14 09:03:42\n상세: source=kiwoom_condition kw=0 ls=-1\nkis_alert_bot\nBOT\n오전 9:03\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:03:43\n유닛: kis_trader_main.service\n2026-08-14T09:03:42+09:00 ubuntu2404 python[1986742]: [09:03:42] [kis_trader.ops_alert] [ops_alert] sent code=universe_zero ok_mm=True title=SCALP 유니버스 0 지속 181초\nkis_alert_bot\nBOT\n오전 9:06\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:06:45\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:06\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:06:46\n유닛: kis_trader_main.service\n2026-08-14T09:06:46+09:00 ubuntu2404 python[1986742]: [09:06:46] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:07\n\n🚨 [운영알림/CRITICAL] MOMENTUM 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:07:17\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오전 9:07\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:07:18\n유닛: kis_trader_main.service\n2026-08-14T09:07:17+09:00 ubuntu2404 python[1986742]: [09:07:17] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=MOMENTUM 유니버스 전량탈락 1→0\n\nhjhvkej1\n상태 업데이트\n오전 9:08\n\n!봇로그\n\n답장 3개\n지켜보는 중\n마지막 댓글 47분 전\n\nkis_alert_bot\nBOT\n오전 9:11\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:11:47\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:11\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:11:48\n유닛: kis_trader_main.service\n2026-08-14T09:11:47+09:00 ubuntu2404 python[1986742]: [09:11:47] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:12\n\n🚨 [운영알림/CRITICAL] BREAKOUT 유니버스 전량탈락 10→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:12:25\n상세: history=kiwoom 교집합 제외 10\nkis_alert_bot\nBOT\n오전 9:12\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:12:26\n유닛: kis_trader_main.service\n2026-08-14T09:12:25+09:00 ubuntu2404 python[1986742]: [09:12:25] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=BREAKOUT 유니버스 전량탈락 10→0\nkis_alert_bot\nBOT\n오전 9:14\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 0 지속 181초\n\n코드: universe_zero\n시각: 2026-08-14 09:14:49\n상세: source=kiwoom_condition kw=0 ls=-1\nkis_alert_bot\nBOT\n오전 9:14\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:14:49\n유닛: kis_trader_main.service\n2026-08-14T09:14:49+09:00 ubuntu2404 python[1986742]: [09:14:49] [kis_trader.ops_alert] [ops_alert] sent code=universe_zero ok_mm=True title=SCALP 유니버스 0 지속 181초\nkis_alert_bot\nBOT\n오전 9:16\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:16:32\n유닛: kis_trader_main.service\n2026-08-14T09:16:32+09:00 ubuntu2404 python[1986742]: [09:16:32] [kis_trader.strategy.SHORT] 🔍 [T:kiwoom|O:kiwoom|유니버스슬롯] SHORT 후보 1→0 (history=kiwoom 교집합, 제외 1)\nkis_alert_bot\nBOT\n오전 9:16\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:16:54\n상세: 장중 LS 소켓 미연결 64초+\nkis_alert_bot\nBOT\n오전 9:16\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:16:54\n유닛: kis_trader_main.service\n2026-08-14T09:16:54+09:00 ubuntu2404 python[1986742]: [09:16:54] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:17\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:17:42\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오전 9:17\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:17:42\n유닛: kis_trader_main.service\n2026-08-14T09:17:42+09:00 ubuntu2404 python[1986742]: [09:17:42] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=SCALP 유니버스 전량탈락 1→0\n새로운 메시지\nkis_alert_bot\nBOT\n오전 9:19\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:19:22\n유닛: kis_trader_main.service\n2026-08-14T09:19:22+09:00 ubuntu2404 python[1986742]: [09:19:22] [kis_trader.strategy.SHORT] 🔍 [T:kiwoom|O:kiwoom|유니버스슬롯] SHORT 후보 1→0 (history=kiwoom 교집합, 제외 1)\nkis_alert_bot\nBOT\n오전 9:20\n\n🚨 [운영알림/CRITICAL] SHORT 유니버스 0 지속 216초\n\n코드: universe_zero\n시각: 2026-08-14 09:20:31\n상세: source=kiwoom_condition kw=0 ls=-1\nkis_alert_bot\nBOT\n오전 9:20\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:20:31\n유닛: kis_trader_main.service\n2026-08-14T09:20:31+09:00 ubuntu2404 python[1986742]: [09:20:31] [kis_trader.ops_alert] [ops_alert] sent code=universe_zero ok_mm=True title=SHORT 유니버스 0 지속 216초\nkis_alert_bot\nBOT\n오전 9:21\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:21:42\n유닛: kis_trader_main.service\n2026-08-14T09:21:42+09:00 ubuntu2404 python[1986742]: [09:21:42] [kis_trader.strategy.SCALP] 🔍 [T:kiwoom|O:kiwoom|유니버스슬롯] SCALP 후보 1→0 (history=kiwoom 교집합, 제외 1)\nkis_alert_bot\nBOT\n오전 9:22\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:22:33\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:22\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:22:33\n유닛: kis_trader_main.service\n2026-08-14T09:22:33+09:00 ubuntu2404 python[1986742]: [09:22:33] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:24\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:24:39\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오전 9:24\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:24:40\n유닛: kis_trader_main.service\n2026-08-14T09:24:39+09:00 ubuntu2404 python[1986742]: [09:24:39] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=SCALP 유니버스 전량탈락 1→0\nkis_alert_bot\nBOT\n오전 9:27\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:27:21\n유닛: kis_trader_main.service\n2026-08-14T09:27:21+09:00 ubuntu2404 python[1986742]: [09:27:21] [kis_trader.strategy.SCALP] 🔍 [T:kiwoom|O:kiwoom|유니버스슬롯] SCALP 후보 1→0 (history=kiwoom 교집합, 제외 1)\nkis_alert_bot\nBOT\n오전 9:27\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:27:35\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:29\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:29:18\n유닛: kis_trader_main.service\n2026-08-14T09:29:18+09:00 ubuntu2404 python[1986742]: [09:29:18] [kis_trader.strategy.SHORT] 🔍 [T:kiwoom|O:kiwoom|유니버스슬롯] SHORT 후보 1→0 (history=kiwoom 교집합, 제외 1)\nkis_alert_bot\nBOT\n오전 9:32\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:32:51\n상세: 장중 LS 소켓 미연결 117초+\nkis_alert_bot\nBOT\n오전 9:32\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:32:51\n유닛: kis_trader_main.service\n2026-08-14T09:32:51+09:00 ubuntu2404 python[1986742]: [09:32:51] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:34\n\n🚨 [운영알림/CRITICAL] SCALP 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:34:28\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오전 9:34\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:34:29\n유닛: kis_trader_main.service\n2026-08-14T09:34:28+09:00 ubuntu2404 python[1986742]: [09:34:28] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=SCALP 유니버스 전량탈락 1→0\nkis_alert_bot\nBOT\n오전 9:37\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:37:55\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:37\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:37:56\n유닛: kis_trader_main.service\n2026-08-14T09:37:55+09:00 ubuntu2404 python[1986742]: [09:37:55] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:42\n\n🚨 [운영알림/CRITICAL] MOMENTUM 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:42:26\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오전 9:42\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:42:27\n유닛: kis_trader_main.service\n2026-08-14T09:42:27+09:00 ubuntu2404 python[1986742]: [09:42:27] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=MOMENTUM 유니버스 전량탈락 1→0\nkis_alert_bot\nBOT\n오전 9:43\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:43:35\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:43\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:43:36\n유닛: kis_trader_main.service\n2026-08-14T09:43:35+09:00 ubuntu2404 python[1986742]: [09:43:35] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\nkis_alert_bot\nBOT\n오전 9:48\n\n🚨 [운영알림/CRITICAL] MOMENTUM 유니버스 전량탈락 1→0\n\n코드: universe_wipe\n시각: 2026-08-14 09:48:07\n상세: history=kiwoom 교집합 제외 1\nkis_alert_bot\nBOT\n오전 9:48\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:48:08\n유닛: kis_trader_main.service\n2026-08-14T09:48:07+09:00 ubuntu2404 python[1986742]: [09:48:07] [kis_trader.ops_alert] [ops_alert] sent code=universe_wipe ok_mm=True title=MOMENTUM 유니버스 전량탈락 1→0\nkis_alert_bot\nBOT\n오전 9:49\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:49:25\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:49\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:49:26\n유닛: kis_trader_main.service\n2026-08-14T09:49:25+09:00 ubuntu2404 python[1986742]: [09:49:25] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\n\nkis_alert_bot\nBOT\n오전 9:54\n\n🚨 [운영알림/CRITICAL] LS 시세 WS 미OPEN\n\n코드: ws_ls_down\n시각: 2026-08-14 09:54:27\n상세: 장중 LS 소켓 미연결 60초+\nkis_alert_bot\nBOT\n오전 9:54\n\n🚨 [오류감시] 로그 오류 매칭\n\n시각: 2026-08-14 09:54:28\n유닛: kis_trader_main.service\n2026-08-14T09:54:27+09:00 ubuntu2404 python[1986742]: [09:54:27] [kis_trader.ops_alert] [ops_alert] sent code=ws_ls_down ok_mm=True title=LS 시세 WS 미OPEN\n\n 그리고 오늘일자 오류야 ㅁ무슨 오류인지 파악해서 명명ㅂ맥백히 근본원인을 읆어줘\n</user_query>"}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"text","text":"매도 알림이 손실인데 녹색인 이유와 오늘 오류 알림의 근본원인을 코드·로그에서 먼저 확인하겠습니다."},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/docs/like_mcp.md/MODIFICATION_GUIDE.md","limit":120}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"매도체결","glob":"*.{py,js}","head_limit":40}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"🟢","glob":"*.py","head_limit":40}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"universe_wipe|ws_ls_down|universe_zero","glob":"*.py","head_limit":50}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"로그 오류 매칭|condition 소스 쓰는 전략","glob":"*.py","head_limit":40}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"text","text":"녹색 이모지는 `realized_pnl` 기준으로 보입니다. 손익 계산과 오류 감시 매칭을 이어서 확인합니다."},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/execution/order_manager.py","offset":780,"limit":120}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/scripts/kis_error_watch_mm.py","limit":150}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/main.py","offset":1480,"limit":180}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/strategies/base.py","offset":1640,"limit":100}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/utils/ops_alert.py","limit":80}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/execution/order_manager.py","pattern":"realized_pnl","glob":"*.py"}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/scripts/kis_error_watch_mm.py","offset":150,"limit":250}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/utils/live_portfolio_common.py","limit":150}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"ls_ws|_opened","glob":"*.py","head_limit":40}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Read","input":{"limit":80,"offset":680,"path":"/home/hoon/kis_bot/kis_trader/execution/order_manager.py"}},{"type":"tool_use","name":"Grep","input":{"glob":"*.py","head_limit":30,"path":"/home/hoon/kis_bot/kis_trader","pattern":"profit_pct"}},{"type":"tool_use","name":"Grep","input":{"glob":"*.py","head_limit":40,"path":"/home/hoon/kis_bot/kis_trader","pattern":"self\\.ls_ws\\s*="}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"ERROR_WATCH_","glob":"*.{py,md,sql}","head_limit":40}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"glob":"*.py","head_limit":35,"path":"/home/hoon/kis_bot/kis_trader/strategies","pattern":"\"profit_pct\"|buy_price="}},{"type":"tool_use","name":"Read","input":{"limit":80,"offset":1100,"path":"/home/hoon/kis_bot/kis_trader/main.py"}},{"type":"tool_use","name":"Read","input":{"limit":80,"offset":1170,"path":"/home/hoon/kis_bot/kis_trader/strategies/base.py"}},{"type":"tool_use","name":"Grep","input":{"glob":"*.py","head_limit":25,"path":"/home/hoon/kis_bot","pattern":"LIVE_UNIVERSE_SLOT_ALIGN"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/strategies/momentum.py","offset":330,"limit":60}},{"type":"tool_use","name":"Grep","input":{"glob":"**/momentum*.py","head_limit":40,"path":"/home/hoon/kis_bot/kis_trader","pattern":"profit_pct|buy_price","glob_pattern":"*.py"}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/main.py","offset":1040,"limit":70}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Read","input":{"limit":50,"offset":270,"path":"/home/hoon/kis_bot/kis_trader/strategies/momentum.py"}},{"type":"tool_use","name":"Grep","input":{"glob":"*.py","head_limit":30,"path":"/home/hoon/kis_bot/kis_trader","pattern":"손절호가"}},{"type":"tool_use","name":"Glob","input":{"glob_pattern":"**/ls_ws.py","target_directory":"/home/hoon/kis_bot"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/ws","pattern":"_opened","glob":"*.py","head_limit":40}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/utils/live_portfolio_common.py","pattern":"def filter_candidates_by_history_universe","-A":80}},{"type":"tool_use","name":"Read","input":{"limit":80,"offset":1280,"path":"/home/hoon/kis_bot/kis_trader/ws/ls_ws.py"}},{"type":"tool_use","name":"Read","input":{"limit":50,"offset":880,"path":"/home/hoon/kis_bot/kis_trader/main.py"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/database.py","pattern":"def classify_config_key|ENV_CONFIG","head_limit":30}},{"type":"tool_use","name":"Glob","input":{"glob_pattern":"**/*.{service,timer}","target_directory":"/home/hoon/kis_bot/deploy"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/database.py","pattern":"def get_env_from_db|def classify_config_key","head_limit":20}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/utils/env.py","limit":80}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Write","input":{"path":"/home/hoon/kis_bot/logs/_adhoc_alert_diag.py","contents":"#!/usr/bin/env python3\n\"\"\"adhoc: env 키 조회 (스키마 확인 후).\"\"\"\nfrom database import TradeDB\n\ndb = TradeDB()\ncols = [r[\"Field\"] for r in db.conn.execute(\"SHOW COLUMNS FROM env_config\").fetchall()]\nkeys = [\n \"LIVE_UNIVERSE_SLOT_ALIGN\",\n \"ERROR_WATCH_MATCH_REGEX\",\n \"ERROR_WATCH_IGNORE_REGEX\",\n \"ERROR_WATCH_ENABLED\",\n \"LS_WS_ENABLED\",\n \"LS_WS_VALIDATION_ENABLED\",\n \"LS_CONDITION_HISTORY_ENABLED\",\n \"LS_WS_FOLLOW_CONDITION_UNIVERSE\",\n \"OPS_ALERT_COOLDOWN_SEC\",\n \"OPS_ALERT_WS_DOWN_HOLD_SEC\",\n \"OPS_ALERT_UNIVERSE_ZERO_SEC\",\n \"SCALP_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"MOMENTUM_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"BREAKOUT_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"SHORT_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"LIVE_UNIVERSE_HISTORY_SOURCE\",\n]\npresent = [k for k in keys if k in cols]\nmissing = [k for k in keys if k not in cols]\nprint(\"missing_cols\", missing)\nif present:\n sel = \", \".join(f\"`{k}`\" for k in present)\n row = db.conn.execute(\n f\"SELECT {sel} FROM env_config ORDER BY id DESC LIMIT 1\"\n ).fetchone()\n d = dict(row) if row else {}\n for k in present:\n v = d.get(k)\n s = \"\" if v is None else str(v)\n if len(s) > 180:\n s = s[:180] + \"...(len=%d)\" % len(str(v))\n print(f\"{k}={s!r}\")\n"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"python3 -m py_compile /home/hoon/kis_bot/logs/_adhoc_alert_diag.py && python3 /home/hoon/kis_bot/logs/_adhoc_alert_diag.py","description":"Compile and query env_config keys"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/utils/live_portfolio_common.py","pattern":"def history_universe_codes_at"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"kis_trader_main","glob":"*.{service,timer,conf}"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"cd /home/hoon/kis_bot && python3 -m py_compile logs/_adhoc_alert_diag.py && python3 logs/_adhoc_alert_diag.py","description":"Run env query from repo root"}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/kis_trader/utils/live_portfolio_common.py","offset":262,"limit":120}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"cd /home/hoon/kis_bot && ls -d .venv 2>/dev/null; PYTHONPATH=/home/hoon/kis_bot python3 logs/_adhoc_alert_diag.py","description":"Query env_config with PYTHONPATH"}},{"type":"tool_use","name":"Read","input":{"limit":80,"offset":380,"path":"/home/hoon/kis_bot/kis_trader/utils/live_portfolio_common.py"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"head_limit":25,"path":"/home/hoon/kis_bot/database.py","pattern":"env_config_ext|LIVE_UNIVERSE_SLOT_ALIGN"}},{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/deploy/kis_error_watch_mm.service"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/database.py","pattern":"LIVE_UNIVERSE_SLOT_ALIGN|LS_WS_ENABLED|OPS_ALERT_"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Read","input":{"path":"/home/hoon/kis_bot/database.py","offset":1265,"limit":50}},{"type":"tool_use","name":"Write","input":{"contents":"#!/usr/bin/env python3\nfrom database import TradeDB\n\ndb = TradeDB()\next_cols = [r[\"Field\"] for r in db.conn.execute(\"SHOW COLUMNS FROM env_config_ext\").fetchall()]\nprint(\"ext_cols\", ext_cols)\nkeys = (\n \"LIVE_UNIVERSE_SLOT_ALIGN\",\n \"LS_WS_ENABLED\",\n \"LS_WS_VALIDATION_ENABLED\",\n \"LS_CONDITION_HISTORY_ENABLED\",\n \"LS_WS_FOLLOW_CONDITION_UNIVERSE\",\n \"OPS_ALERT_COOLDOWN_SEC\",\n \"OPS_ALERT_WS_DOWN_HOLD_SEC\",\n \"OPS_ALERT_UNIVERSE_ZERO_SEC\",\n \"SCALP_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"MOMENTUM_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"BREAKOUT_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"SHORT_LIVE_UNIVERSE_SLOT_ALIGN\",\n \"LIVE_UNIVERSE_HISTORY_SOURCE\",\n \"ERROR_WATCH_MATCH_REGEX\",\n \"ERROR_WATCH_IGNORE_REGEX\",\n)\nph = \",\".join([\"%s\"] * len(keys))\nrows = db.conn.execute(\n f\"SELECT env_key, env_value FROM env_config_ext WHERE env_key IN ({ph})\",\n keys,\n).fetchall()\nprint(\"ext_hits\", len(rows))\nfor r in rows:\n d = dict(r)\n v = str(d.get(\"env_value\") or \"\")\n if len(v) > 160:\n v = v[:160] + \"...\"\n print(d.get(\"env_key\"), \"=\", repr(v))\n\nfrom kis_trader.utils.env import get_env_from_db, get_env_bool, get_env_int\nprint(\"--- get_env ---\")\nfor k in keys:\n print(k, \"=\", repr(get_env_from_db(k, \"\")))\nprint(\"LIVE_UNIVERSE_SLOT_ALIGN bool\", get_env_bool(\"LIVE_UNIVERSE_SLOT_ALIGN\", False))\nprint(\"LS_WS_ENABLED bool\", get_env_bool(\"LS_WS_ENABLED\", False))\nprint(\"LS_WS_VALIDATION_ENABLED\", get_env_bool(\"LS_WS_VALIDATION_ENABLED\", False))\nprint(\"LS_CONDITION_HISTORY_ENABLED\", get_env_bool(\"LS_CONDITION_HISTORY_ENABLED\", False))\nprint(\"LS_WS_FOLLOW_CONDITION_UNIVERSE\", get_env_bool(\"LS_WS_FOLLOW_CONDITION_UNIVERSE\", True))\n","path":"/home/hoon/kis_bot/logs/_adhoc_alert_diag2.py"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"cd /home/hoon/kis_bot && python3 -m py_compile logs/_adhoc_alert_diag2.py && PYTHONPATH=/home/hoon/kis_bot python3 logs/_adhoc_alert_diag2.py","description":"Query ext env and get_env values"}},{"type":"tool_use","name":"Shell","input":{"command":"systemctl is-active kis_error_watch_mm.service kis_trader_main.service; echo '---'; systemctl show kis_error_watch_mm.service -p ActiveEnterTimestamp -p MainPID -p FragmentPath --no-pager; echo '---'; ps -o lstart,pid,cmd -p $(systemctl show -p MainPID --value kis_error_watch_mm.service) 2>/dev/null; echo '---LS logs---'; journalctl -u kis_trader_main.service --since '2026-08-14 08:55:00' --until '2026-08-14 09:55:00' --no-pager 2>/dev/null | grep -E 'LS WS|ls_ws|미OPEN|_opened|watchdog|universe_wipe|유니버스슬롯|condition 소스' | head -80","description":"Check watch service and today's LS logs"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/ws/ls_ws.py","pattern":"LS_WS_PING_INTERVAL"}},{"type":"tool_use","name":"Read","input":{"limit":90,"offset":1385,"path":"/home/hoon/kis_bot/kis_trader/ws/ls_ws.py"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/main.py","pattern":"_ops_health_tick"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot","pattern":"resolve_live_scan_interval_min","glob":"*.py","head_limit":20}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Read","input":{"limit":80,"offset":1880,"path":"/home/hoon/kis_bot/kis_trader/main.py"}},{"type":"tool_use","name":"Read","input":{"limit":40,"offset":156,"path":"/home/hoon/kis_bot/kis_trader/utils/live_portfolio_common.py"}},{"type":"tool_use","name":"Read","input":{"limit":40,"offset":290,"path":"/home/hoon/kis_bot/kis_trader/ws/ls_ws.py"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/database.py","pattern":"LS_WS_PING_INTERVAL"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Write","input":{"contents":"#!/usr/bin/env python3\nfrom database import TradeDB\nfrom kis_trader.utils.env import get_env_from_db, get_env_int\n\ndb = TradeDB()\ncols = [r[\"Field\"] for r in db.conn.execute(\"SHOW COLUMNS FROM env_config_ext\").fetchall()]\nprint(\"ok\", cols)\nkeys = (\n \"LS_WS_PING_INTERVAL_SEC\",\n \"LS_WS_PING_TIMEOUT_SEC\",\n \"LS_WS_WATCHDOG_ENABLED\",\n \"LS_WS_WATCHDOG_SILENCE_SEC\",\n \"SCAN_INTERVAL_MIN\",\n \"SCALP_SCAN_INTERVAL_MIN\",\n \"MOMENTUM_SCAN_INTERVAL_MIN\",\n \"BREAKOUT_SCAN_INTERVAL_MIN\",\n \"SHORT_SCAN_INTERVAL_MIN\",\n \"TAIL_SCAN_INTERVAL_MIN\",\n \"OPS_ALERT_COOLDOWN_SEC\",\n \"OPS_ALERT_COOLDOWN_WS_LS_DOWN_SEC\",\n)\nph = \",\".join([\"%s\"] * len(keys))\nrows = db.conn.execute(\n \"SELECT env_key, env_value FROM env_config_ext WHERE env_key IN (\" + ph + \")\",\n keys,\n).fetchall()\nprint(\"ext\", [(dict(r)[\"env_key\"], dict(r)[\"env_value\"]) for r in rows])\nprint(\"---\")\nfor k in keys:\n print(k, repr(get_env_from_db(k, \"\")), \"int\", get_env_int(k, -1))\n","path":"/home/hoon/kis_bot/logs/_adhoc_alert_diag3.py"}},{"type":"tool_use","name":"Shell","input":{"command":"ps aux | grep -E 'kis_error_watch|error_watch' | grep -v grep; echo '---units---'; systemctl list-units --all '*error*' --no-pager; echo '---kill---'; journalctl -u kis_trader_main.service --since '2026-08-13 15:00:00' --until '2026-08-13 15:15:00' --no-pager | grep -iE 'kill|oom|restart|signal|Stopped|deactivat' | head -40; echo '---watch log---'; ls -la /home/hoon/kis_bot/logs/kis_error_watch_mm.log 2>/dev/null; tail -20 /home/hoon/kis_bot/logs/kis_error_watch_mm.log 2>/dev/null","description":"Find error-watch process and SIGKILL cause"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"cd /home/hoon/kis_bot && python3 -m py_compile logs/_adhoc_alert_diag3.py && PYTHONPATH=/home/hoon/kis_bot python3 logs/_adhoc_alert_diag3.py","description":"Query ping and scan interval env"}},{"type":"tool_use","name":"Shell","input":{"command":"journalctl -u kis_trader_main.service --since '2026-08-13 15:04:00' --until '2026-08-13 15:13:00' --no-pager | grep -E 'systemd|Killed|SIGKILL|oom|Stopping|Started' | head -50; echo '==== 23:35 ===='; journalctl -u kis_trader_main.service --since '2026-08-13 23:34:00' --until '2026-08-14 01:20:00' --no-pager | grep -E 'systemd|Stopping|Started|Killed' | head -40","description":"Find systemd restart/kill reasons"}},{"type":"tool_use","name":"Grep","input":{"path":"/home/hoon/kis_bot/kis_trader/execution/order_manager.py","pattern":"손절호가","glob":"*.py"}},{"type":"tool_use","name":"Read","input":{"limit":40,"offset":348,"path":"/home/hoon/kis_bot/kis_trader/engine/momentum_hts_logic.py"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"journalctl -u kis_trader_main.service -t systemd --since '2026-08-13 14:45:00' --until '2026-08-13 15:15:00' --no-pager; echo '===='; journalctl --since '2026-08-13 15:10:00' --until '2026-08-13 15:12:00' --no-pager | grep -iE 'oom|killed|kis_trader' | head -20","description":"Systemd-only lines for 8/13 afternoon kill"}},{"type":"tool_use","name":"Delete","input":{"path":"/home/hoon/kis_bot/logs/_adhoc_alert_diag.py"}},{"type":"tool_use","name":"Delete","input":{"path":"/home/hoon/kis_bot/logs/_adhoc_alert_diag2.py"}},{"type":"tool_use","name":"Delete","input":{"path":"/home/hoon/kis_bot/logs/_adhoc_alert_diag3.py"}}]}}
|
||
{"role":"assistant","message":{"content":[{"type":"text","text":"결론부터 말하면, **손실인데 녹색**은 매매 실패가 아니라 **알림 색과 수익률 줄이 서로 다른 숫자**를 보고 있어서입니다. 오늘 장중 빨간 알림은 **진짜 장애 1개 + 오탐이 여러 겹**입니다.\n\n---\n\n## 1. 네오오토 매도가 마이너스인데 🟢인 이유\n\n알림은 이렇게 나뉩니다.\n\n| 줄 | 기준 | 그날 값 |\n|---|---|---|\n| 수익률 **-1.78%** | 매도 **신호 당시 현재가** vs 매수가 | 손절호가 트리거 시점 시세 |\n| 실현 **+295원** · 🟢 | **실제 체결가** 12,010원 − 매수가 − 수수료/세금 | 체결 손익 |\n\n색은 수익률이 아니라 **실현손익**만 봅니다.\n\n```842:848:kis_trader/execution/order_manager.py\n emoji = \"🟢\" if (realized_pnl is None or realized_pnl >= 0) else \"🔴\"\n pnl_str = f\"{realized_pnl:+,.0f}원\" if realized_pnl is not None else \"-\"\n disp = _strategy_display(req.strategy_id)\n header = (\n f\"{emoji} **[매도체결:{disp}]** {req.name}({req.code})\\n\"\n f\"{sell_price:,.0f}원 × {delta_qty}주\\n\"\n f\"{req.reason} · 수익률 {req.profit_pct*100:+.2f}%\\n\"\n```\n\n손절호가는 **호가 OR이 무너지고, 그때 현재가가 이미 매수가보다 아래**일 때 발동합니다. 그 시점 시세로 **-1.78%**가 찍힙니다. \n주문은 지정가(호가)라 **체결가 12,010원**이 트리거 시세보다 나을 수 있고, 그 체결 기준으로는 **소폭 플러스(+295원)** 가 됩니다.\n\n그래서 사람은 “손절·마이너스”를 보고, 봇은 “체결 손익 플러스”로 초록을 붙입니다. \n추가로 `realized_pnl is None`(매수가 없음)이어도 초록입니다. 그건 별도 구멍입니다.\n\n**영향:** 실매 알림 UX만. 백테/파람 숫자와 무관합니다. \n고치려면 색을 **수익률 또는 `min(실현, 수익률)`** 기준으로 바꾸면 됩니다. 원하시면 그때 수정하겠습니다.\n\n---\n\n## 2. 오늘(8/14) 오류 — 원인별로 정리\n\n운영 유니버스는 **전부 키움 조건검색**입니다. 시세 주력도 키움입니다. LS는 `LS_WS_ENABLED=true` 때문에 **그림자 소켓**으로 떠 있습니다.\n\n### A. 진짜 원인 — `LS 시세 WS 미OPEN` (`ws_ls_down`)\n\n**이름:** LS 핑 꺼짐 → 서버가 60초마다 연결 끊음 \n\nDB: `LS_WS_PING_INTERVAL_SEC=0` → 로그에도 `ping=off`. \n저널: 약 1분마다 `opcode=8 data=b'\\x03\\xe8Bye'` (정상 종료 코드 1000) 후 바로 재OPEN.\n\nLS 서버는 핑이 없으면 유휴 연결을 끊습니다. 봇이 다시 붙고, 또 끊깁니다.\n\n알림이 더 과장되는 이유: `_ops_health_tick`이 **하트비트 60초마다** `_opened`만 봅니다. 끊기는 순간에 걸리면 “60초+ 미OPEN”으로 나갑니다. 실제로는 대부분 바로 다시 붙습니다.\n\n국장 매매 본체(키움 조건·키움/KIS 시세)와는 **별 경로**입니다. 다만 LS를 호가/검증/3차 spill에 쓰면 그 구간은 흔들립니다.\n\n### B. 운영 설정 — `universe_wipe` / `universe_zero` / `후보 1→0`\n\n**이름:** 유니버스 슬롯 교집합 전량탈락 \n\nDB: `LIVE_UNIVERSE_SLOT_ALIGN=true` (코드 기본은 **False**, 켜져 있음).\n\n동작: 키움 HTS **지금 후보** ∩ **history 스냅샷**. 스냅샷에 없는 종목은 버립니다. 오늘 로그처럼 `10→0`, `1→0`은 “HTS가 죽었다”가 아니라 **실시간 목록과 history가 안 겹침**입니다.\n\n`universe_zero` (`kw=0 ls=-1`): 키움 매니저 유니버스가 0이 180초 이상. 장초·조건식 공백이거나, 위 교집합으로 전략 쪽 후보가 비는 것과 겹칩니다. LS 매니저는 없어서 `ls=-1`인 것이 정상입니다.\n\n### C. 오탐 — `🚨 로그 오류 매칭` (운영알림과 이중 울림)\n\n오류감시 프로세스(`kis_error_watch_mm.py`)가 **8/3부터 재시작 없이** 떠 있습니다. systemd 유닛은 없고, nohup입니다. **기동 때 읽은 정규식**을 그대로 씁니다.\n\n매칭이 넓습니다.\n\n- `[ops_alert]` → 이미 보낸 운영알림 로그를 다시 “오류”로 올림 \n- `유니버스슬롯.*→0` → INFO `후보 1→0`까지 오류로 올림 \n- `조건검색 매니저 비활성` → 재시작 INFO (`condition` 소스 안 씀 → KIS 조건검색 OFF)를 오류로 올림 \n\n저장소 쪽 ignore에는 일부 빼는 규칙이 있지만, **8/3 프로세스는 그 코드를 안 읽고 있습니다.**\n\n### D. 어제 재시작 / SIGKILL — 크래시가 아님\n\n| 시각 | 실제 |\n|---|---|\n| 8/13 14:48, 15:04, 23:35, 8/14 01:17 | `systemctl stop/start` (배포·수동 재시작) |\n| 8/13 15:11 SIGKILL | 종료 시 SIGTERM이 안 끝나 **TimeoutSec 초과 → systemd가 KILL** (`Failed with result 'timeout'`). OOM 아님 |\n\n재시작 직후 `condition 소스 쓰는 전략 없음`은 **한투(KIS) 조건검색을 안 써서 매니저를 끈다**는 INFO입니다. 키움 조건검색은 기동 알림에 정상 등록돼 있습니다.\n\n---\n\n## 한 줄로\n\n- **초록:** 손절 **시세**는 마이너스, **체결 손익**은 +295원 → 색이 체결만 봄. \n- **오늘 빨간 알림:** 본체는 **LS 핑 0으로 1분마다 Bye**. 유니버스 전량탈락은 **슬롯 정합 ON**. 나머지는 **오류감시가 운영로그를 다시 울리는 오탐**.\n\n원하시면 승인 받고 이 순서로 손대면 됩니다. (실매 영향은 1·2번)\n\n1. 매도 알림 색 = 수익률/실현 중 손실이면 빨강 \n2. `LS_WS_PING_INTERVAL_SEC`를 기본 20으로 (또는 LS가 필요 없으면 WS 기동 OFF) \n3. 오류감시 재시작 + `[ops_alert]`/INFO 유니버스슬롯 매칭 제거 \n4. `LIVE_UNIVERSE_SLOT_ALIGN`은 백테 정합용이라 **끄기 전에 한 번 더 확인**"}]}} |