KPS 트레이딩툴 — 세션감시.한선 (Tradovate 세션 만료 감지·경보)
개요
Tradovate 웹 세션이 만료/로그아웃되면 화면이 로그인 페이지 또는 /welcome으로 바뀌는데,
기존 도구는 이를 실현손익 조회 실패로만 간접 인지했다. 세션 소실 중 보유 포지션이
방치될 수 있는 위험을 막기 위해 4상 판정 + 다중채널 경보 모듈을 신설하고 3개 기존
파일에 배선했다.
무엇을 했는지
세션감시.한선 신규 — 세션상태()(4상: 1정상/0전환중/-1만료/-9무응답, 전환중은 최대
3회·2초 간격 재시도 후에도 불명이면 안전측으로 -1 취급),
세션상태_캐시()(5초 TTL),
세션경보()(플래그파일 + PSV 로그 + osascript macOS 알림 + 크라우니메신저 선택 보고),
세션경보_포지션잔존()(포지션 방치 최상위 경보) 구현.
- 셸주입 방어:
SM_문자열정제()로 영숫자·한글·공백·기본문장부호만 남기고 osascript에 전달.
- 배선
-
브라우저어댑터.한선: 세션감시.한선 가져오기(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 취급"), 호출부의
세션_옴_전환중 분기는
현재 도달 불가한 방어 코드로 남아있다(문제 아님, 의도된 설계지만 기록해둔다).
- 크라우니메신저연동 보고는 스크립트 존재 시에만 동작 — 이번 세션에서는 실제 발송 검증
안 함(경보 자체가 발생하지 않아 시험 안 됨, 로직은 존재 체크→호출 형태로 안전).