← 목록
기타 2026-07-31 4KB 읽기 3분

KPS 트레이딩툴 — 세션감시.한선 (Tradovate 세션 만료 감지·경보)

개요

Tradovate 웹 세션이 만료/로그아웃되면 화면이 로그인 페이지 또는 /welcome으로 바뀌는데, 기존 도구는 이를 실현손익 조회 실패로만 간접 인지했다. 세션 소실 중 보유 포지션이 방치될 수 있는 위험을 막기 위해 4상 판정 + 다중채널 경보 모듈을 신설하고 3개 기존 파일에 배선했다.

무엇을 했는지

  1. 세션감시.한선 신규 — 세션상태()(4상: 1정상/0전환중/-1만료/-9무응답, 전환중은 최대
3회·2초 간격 재시도 후에도 불명이면 안전측으로 -1 취급), 세션상태_캐시()(5초 TTL), 세션경보()(플래그파일 + PSV 로그 + osascript macOS 알림 + 크라우니메신저 선택 보고), 세션경보_포지션잔존()(포지션 방치 최상위 경보) 구현.
  1. 셸주입 방어: SM_문자열정제()로 영숫자·한글·공백·기본문장부호만 남기고 osascript에 전달.
  2. 배선
- 브라우저어댑터.한선: 세션감시.한선 가져오기(BA_평가/BA_JSON필드추출 정의 직후) → 주문발행() 실클릭 직전 세션상태_캐시() 검사(만료/무응답 시 진입 중단), BA_청산버튼클릭() 직전 검사(세션 죽었으면 사전 최상위 경보). - 실증실행기.한선: EX_반복스텝() 매 반복 시작에 세션상태() 전체 검사. 만료/무응답+ 포지션 보유 시 청산 시도 → 실패 시 /tmp/kps/포지션잔존.flag + 최상 경보 후 루프 종료. 무포지션이면 경보 후 종료. 전환중이면 그 반복 스킵. - 다계좌동시.한선: 사이클() 시작 전 세션 검사(만료 시 사이클 자체 중단, 진입 전이라 안전), 진출 단계 직전 재검사(진입 후이므로 중단하지 않고 최상 경보 후 기존 동시진출()/진출검증()/미진출강제() 재시도 흐름 강행).

검증

  • 컴파일 경고 0: 세션감시.한선 단독(가져오기 조합), 브라우저어댑터.한선, 실증실행기.한선,
다계좌동시.한선 전부 재컴파일 확인.
  • 세션상태() 읽기전용 실호출 — 현재 로그인 상태에서 1(티) 반환 확인.
  • SM_단위시험() 6/6 통과(4케이스 판정 로직 + 문자열정제 셸특수문자 제거 + 플래그 생성/삭제).
  • 기존 3파일 회귀: 브라우저어댑터 미니게이트 3/3, 실증실행기 파서4/4·지표6/6·게이트9/9,
다계좌동시 파서4/4·가격차5/5·시나리오6/6 — 전부 유지.
  • DRY_RUN=0 실행/실클릭/포트 9847 인스턴스 조작은 전혀 하지 않음(지시 준수).

관련 파일

  • /Users/ef/CrownyDoc/projects/kps-trading-tool/세션감시.한선 (신규)
  • /Users/ef/CrownyDoc/projects/kps-trading-tool/브라우저어댑터.한선 (배선)
  • /Users/ef/CrownyDoc/projects/kps-trading-tool/실증실행기.한선 (배선)
  • /Users/ef/CrownyDoc/projects/kps-trading-tool/다계좌동시.한선 (배선)

잔여 이슈

  • 세션상태()의 "전환중(0)" 최종 반환값은 재시도 종료 후 항상 -1로 수렴하도록 설계돼
있어(스펙상 "옴 → 재시도 → 그래도 옴이면 -1 취급"), 호출부의 세션_옴_전환중 분기는 현재 도달 불가한 방어 코드로 남아있다(문제 아님, 의도된 설계지만 기록해둔다).
  • 크라우니메신저연동 보고는 스크립트 존재 시에만 동작 — 이번 세션에서는 실제 발송 검증
안 함(경보 자체가 발생하지 않아 시험 안 됨, 로직은 존재 체크→호출 형태로 안전).