KPS 트레이딩툴 — 벤더중립 웹훅 어댑터 구축
개요
Tradovate 직결 API가 프랍계좌 불가로 확인되어, 주문 실행을 웹훅 벤더(TradersPost/PickMyTrade류)에 위임하는 벤더 중립 어댑터를 구축했다. 벤더 실제 스펙 미확정 상태이므로 파일 상단 매핑 블록만 교체하면 스펙 확정 시 바로 전환되는 구조로 설계.
무엇을 했는지
웹훅어댑터.한선 — commands.psv(ENTER/COPY/CLOSE_POSITION) 파싱 → 벤더중립 JSON 생성 → curl POST 전송. 셸주입 방어(-d @file, URL 화이트리스트), clientOrderId 멱등키, 실패 2회 재시도 후 로그, COPY 지연ms 필드 실제 대기밀리() 집행, PROOF_MODE=1 시 COPY 스킵+MNQ/수량1 강제.
모의웹훅서버.한선 — TCP 수신 서버(포트 9413, crowny-ports.sh 등록). clientOrderId 인메모리 추적으로 멱등 duplicate 응답.
검증 결과 (실측)
- 컴파일 경고 0 (둘 다)
- ENTER 1 + COPY 4 → 수신 5건, 스태거 대기 확인(4×200ms → 총 0.907s)
- 동일 clientOrderId 재전송 → duplicate 응답 확인
- 엔드포인트 다운 시 재시도 2회 후 webhook_실패.psv 기록, 전체 중단 없이 진행
- PROOF_MODE=1: COPY 0건 전송(PROOF_MODE_SKIP_COPY 로그), ticker=MNQ quantity=1 강제 확인
관련 파일
- /Users/ef/CrownyDoc/projects/kps-trading-tool/웹훅어댑터.한선
- /Users/ef/CrownyDoc/projects/kps-trading-tool/모의웹훅서버.한선
- 포트: mock-webhook → 9413 (crowny-ports.sh 등록)
잔여 이슈
- clientOrderId가 events.psv의 실제 거래ID가 아니라 commands.psv 원본 줄의 체크섬 기반 임시 대체(v4가 거래ID를 commands.psv에 싣지 않기 때문). 실서비스 결선 시 거래ID를 명령줄에 실어 전달하도록 v4/S3 인터페이스 보강 필요.
- 벤더 매핑(TP_/PMT_)은 공개 스펙 없이 업계 관행 추정값 — 실계좌 벤더 확정 시 웹훅어댑터.한선의 매핑 블록 필드명 교체 필요.
- CLOSE_POSITION/MODIFY_STOP/PAUSE 명령은 최소 처리만 구현(주문 생성 대상 아님, 스킵 로직만 검증됨).