40개의 Kalshi 탭을 계속 지켜보는 게 지겨워져서, 셀프 호스팅 신호 모니터(self-hosted signal monitor)를 직접
요약
예측 시장 플랫폼 Kalshi의 실시간 데이터를 모니터링하고 유의미한 신호를 탐지하는 셀프 호스팅 시스템 'Trade Hunter'의 개발 과정을 다룹니다. WebSocket 피드를 분석하여 노이즈를 제거하고, Claude와 같은 LLM을 활용해 신호의 신뢰도와 근거를 분석하는 2단계 판독 구조를 설명합니다.
핵심 포인트
- Kalshi의 실시간 WebSocket 피드를 활용한 데이터 모니터링 시스템 구축
- 단순 데이터 나열을 넘어 유의미한 움직임을 포착하는 신호 탐지 계층 설계
- LLM(Claude, OpenAI 등)을 활용한 2단계 신호 분석 및 노이즈 필터링
- 신호의 방향성, 신뢰 수준, 근거를 제공하는 AI 분석가 기능 구현
Kalshi에 대한 이야기를 계속 들었습니다. 광고, 언급들, 그러다 어느 날 아침 CNN에서는 Kalshi의 예측 확률(prediction odds)을 마치 일기예보처럼 이야기하고 있었습니다. 그래서 직접 찾아봤습니다. 하지만 제가 무엇을 보고 있는지 전혀 알 수 없었습니다.
Kalshi는 처음 접할 때 정말 이해하기 어렵습니다. 마켓(markets), 계약(contracts), 확률이기도 한 가격(prices), 거래량(volume), 변동성(movement) 등이 등장하지만, 그중 무엇이 실제로 주의를 기울일 가치가 있는지는 전혀 알려주지 않습니다. 저는 제가 보고 있는 것을 이해할 수 있는 무언가로, 이상적으로는 행동으로 옮길 수 있는 무언가로 번역해 줄 도구가 필요했습니다. 그것이 원래의 전체 목표였습니다. 즉, 쏟아지는 정보(firehose)를 읽기 쉽게 만드는 것이었습니다.
그러다 당연하게도 기능들을 계속 추가하게 되었습니다. 흐름을 읽을 수 있게 되면 그 안에서 우위(edge)를 점하고 싶어지기 때문입니다. 누구나 그렇듯이 말이죠. 그래서 Trade Hunter는 단순한 번역 계층(translation layer)에서, 그 위에 탐지(detection) 기능이 추가된 번역 계층으로 성장했습니다. 이 글은 그것이 어떤 모습이 되었는지, 왜 제가 그런 설계 선택(design choices)을 했는지, 그리고 여전히 확신이 서지 않는 부분들에 대한 기록입니다. 나중에 어려운 방식으로 시스템의 중단점(breakpoints)을 발견하기보다는, 지금 여러분이 허점을 찾아내 주셨으면 합니다. 만약 여기서 내린 결정이 틀렸다고 생각하신다면 꼭 알려주세요. 댓글은 부차적인 것이 아니라 이 포스트의 핵심입니다.
시작 배경
기본적으로, 저는 Kalshi를 읽을 수 없었고, 읽고 싶었습니다. Trade Hunter는 저 자신을 위해 그 문제를 해결하고자 만든 최초의 도구이며, 제가 실시간 뷰를 보고 싶을 때 여전히 실행하고 있는 도구입니다. 따라서 이것은 어떤 것에 대한 다듬어진 속편이 아닙니다. 결함과 설계상의 도박(design bets)을 포함하여, 제가 존재하기를 원했기에 만든 것이며, 그 모습 그대로를 여러분께 직접 보여드리고 싶었습니다.
기능을 계속 쌓아 올리면서도 핵심 아이디어는 변하지 않았습니다. Kalshi의 실시간 WebSocket 피드(feeds)를 관찰하고, 사후에 읽거나 다음 날 아침 CNN에서 소식을 듣는 대신, 움직임이 일어나는 도중에 비정상적인 움직임을 표면화(surface)하는 것입니다.
실제로 하는 일
신호들은 대략 "눈에 띄는" 수준부터 "이것은 한 번에 모든 관문을 통과했다"는 수준까지 계층(tiers)별로 분류됩니다. 제가 가장 신경 쓰는 계층은 최상위 계층으로, 점수(score), 가격(price), 거래량(volume) 조건이 하나씩 발생하는 것이 아니라 동시에 모두 충족되는 경우입니다.
그 부분은 지루한 부분입니다. 제가 실제로 피드백을 받고 싶은 부분은 다음과 같습니다.
2단계 판독 (The two-layer read)
가공되지 않은 스파이크 탐지기(raw spike detector)는 많은 노이즈를 생성합니다. 별 의미 없는 이유로 거래량(volume)이 끊임없이 급증하기 때문입니다. 그래서 탐지기 상단에 두 단계의 AI 패스(AI passes)를 배치했습니다.
첫 번째 계층은 신호별 분석가(per-signal analyst)입니다. 모든 스파이크에 대해 즉각적인 판독을 수행합니다: 신호(signal), 노이즈(noise), 또는 불확실(uncertain) 여부를 구분하며, 방향성, 신뢰 수준(confidence level), 그리고 왜 흐름이 그렇게 보이는지에 대한 평이한 영어식 근거(rationale)를 제공합니다. 이 기능은 기본적으로 Claude에서 실행되며, OpenAI/ChatGPT, Gemini, Perplexity 또는 XAI/Grok으로 자동 폴백(fallback)됩니다. 사용자가 직접 API 키를 가져와야 합니다. 만약 아무것도 설정하지 않더라도 탐지기는 여전히 작동하지만, 설명이 포함된 판독 결과는 받지 못하게 됩니다.
두 번째 계층은 튜닝 어드바이저(tuning advisor)입니다. 이 부분은 제가 가장 애착을 느끼면서도 동시에 가장 확신이 없는 부분입니다. 이 계층은 최근 분석가가 라벨링한 신호들을 전체적으로 살펴보고, 오탐(false positives)에서 패턴을 찾아내어, 클릭 한 번으로 적용할 수 있는 구체적인 임계값(threshold) 변경 사항을 제안합니다. 제가 솔직하게 주의를 기울여 말씀드리고 싶은 점은, 기반 모델이 재학습(retrain)되는 것은 아니라는 사실입니다. LLM 자체가 더 똑똑해지는 것은 아닙니다. 개선되는 것은 사용자가 관찰하는 특정 시장에 맞춰, 축적된 신호 이력을 사용하여 튜닝된 '탐지기 설정(detector configuration)'입니다. 이는 신경망(neural net)이 학습하는 방식이 아니라, 좋은 휴리스틱(heuristics)이 담긴 스프레드시트가 쌓여가는 것과 같은 복리 효과를 의미합니다. 과장해서 포장하기보다는 차라리 낮게 평가하는 편을 택하겠습니다.
제가 자랑스럽게 생각하는 단 하나의 탐지기 규칙
고래 클러스터링(Whale clustering)입니다. 단일 대규모 거래는 그리 흥미롭지 않습니다. 대규모 거래는 언제든 일어날 수 있기 때문입니다. 흥미로운 점은 여러 개의 대규모 거래가 우연이라고 보기 어려울 정도로 뭉쳐서 발생하는 경우입니다. 따라서 '고래-클러스터(whale-cluster)' 플래그는 상위 1% 거래량(99th-percentile volume)에 해당하는 거래가 최소 3개 이상 120초의 시간 범위(window) 안에 들어올 때 작동하며, 이때 포아송 모델(Poisson model)은 이러한 클러스터링이 우연히 발생할 확률을 1% 미만으로 계산합니다. 이것이 제가 '조직된 흐름(coordinated flow)'이라고 라벨링하기에 적절하다고 느낀 가장 근접한 개념입니다. 만약 이 임계값이 너무 단순하다면 말씀해 주세요.
실행하고 떠나기
제가 아마도 과소평가하고 있는 기능이 하나 있습니다. Trade Hunter는 웹훅 (webhooks)을 통해 Discord로 신호를 전송하며, 주제별 채널 라우팅 (per-topic channel routing)을 지원하여 서로 다른 시장이 각각 다른 채널로 전달됩니다. 이는 실제 사용 방식을 완전히 바꿔 놓습니다. 대시보드 앞에 계속 앉아 있을 필요가 없습니다. 프로그램을 실행해 두고 내버려 두면, 분석 결과가 여러분에게 찾아옵니다. 신호, 티어 (tier), 그리고 쉬운 영어로 풀이된 해석이 여러분이 어디에 있든 Discord로 전달됩니다. 그런 다음 휴대폰으로 Kalshi에서 즉시 대응하면 됩니다.
움직임이 일어나고 있는 도중에 그 움직임을 포착하는 것이 도구의 유일한 목적이라면, 책상을 떠나 있으면서도 기회를 놓치지 않을 수 있다는 점이 이 도구의 핵심입니다. 대시보드는 제가 컴퓨터 앞에 있을 때 확인하는 용도이고, Discord는 제가 컴퓨터 앞에 있지 않아도 되는 이유입니다.
여러분이 의문을 가질 만한 결정들
누군가 질문하기 전에 제가 먼저 이 문제들을 제기하겠습니다.
셀프 호스팅 (self-hosted) 방식이며, 이는 의도된 설계입니다. 제가 찾은 다른 모든 Kalshi 모니터는 호스팅형 SaaS (Software as a Service)였습니다. 여러분의 데이터는 그들의 서버에 저장되고, 그들의 모델은 그들의 이익을 위해 개선되며, 결제를 중단하는 순간 아무것도 남지 않게 됩니다. Trade Hunter는 여러분의 기기에서 실행되며, 7일의 보관 기간을 가진 로컬 SQLite 데이터베이스에 저장되고, 소스 코드는 여러분이 읽고 수정할 수 있습니다. 저는 낮에는 정보 보안 (information security) 분야에서 일하는데, "여러분의 시장 포지션과 API 자격 증명이 여러분의 기기를 떠나 다른 누군가의 서버에 머문다"는 것은 제가 감수하고 싶지 않은, 혹은 다른 누구에게도 요구하고 싶지 않은 트레이드오프 (tradeoff)입니다.
라이브 모드 (Live mode)는 여러분의 Kalshi 개인 키 (private key)에 접근하며, 이에 대해 의구심을 갖는 것이 당연합니다. 이것은 정직하게 신뢰를 요구하는 부분입니다. 라이브 모드를 사용하려면 프로그램 옆에 .env 파일과 Kalshi 개인 키를 두어야 하며, 프로그램이 직접 피드 구독 (feed subscriptions)에 서명합니다. 인터넷상의 낯선 사람이 만든 소프트웨어에 이런 것을 넘겨주는 것은 실제로 매우 민감한 문제입니다. 저의 답변은 "나를 믿으라"가 아닙니다. 저의 답변은 전체 Python 소스 코드가 함께 제공되며, 키는 절대 여러분의 기기를 떠나지 않고, 외부로 정보를 전송할 서버도 존재하지 않는다는 것입니다. 만약 이것으로도 충분하지 않다면, 그것은 매우 합리적인 입장이며, 저는 여러분이 제 말을 믿기보다 직접 소스 코드를 검사하는 것을 권장합니다.
실행 파일(.exe)과 전체 소스 코드가 모두 제공됩니다. .exe 파일은 신호를 원하지만 Python을 작성하지 않는 사람이 더블 클릭만으로 바로 사용할 수 있도록 준비한 것이지만, 이 편의성은 Windows에서만 가능합니다. 소스 코드는 Python을 작성하는 사람이 제 선택에 얽매이지 않도록 제공하며, Python 3.11+가 실행되는 곳이라면 어디든(Windows, Mac, 또는 Linux) 실행할 수 있습니다. 단, Mac과 Linux에서는 약간의 추가 설정이 필요합니다. 만약 자격 증명(credentials)을 다루는 도구로서 바이너리(binary)를 배포하는 것 자체가 잘못되었다고 느껴진다면, 그 논거를 듣고 싶습니다. 저 또한 이 결정을 내리기까지 고민을 많이 했기 때문입니다.
제가 의도적으로 주장하지 않는 것들
이 도구는 거래를 수행하지 않습니다. 오직 정보 제공용입니다. 여러분이 검토할 수 있도록 정보를 표면화하며, Kalshi에서 무엇을 할지는 여러분이 결정합니다. 이것은 금융 조언이 아니며, 결과를 보장하지도 않습니다. 솔직히 말해서 대상 독자층은 좁습니다. Kalshi에서 거래를 하며 로컬 소프트웨어를 실행하는 데 거부감이 없는 사람들입니다. 저는 이것이 모든 사람을 위한 것이라고 가장하지 않겠습니다.
저를 전혀 믿지 않고도 테스트해 보세요
시뮬레이션 모드(Simulation mode)가 이 섹션의 핵심입니다. 이 모드는 자격 증명, API 키, Kalshi 계정 없이 합성 데이터(synthetic data)만으로 대시보드 전체를 실행합니다. 약 60초 안에 탐지(detection), 티어(tiers), 그리고 2단계 읽기(two-layer read)가 어떻게 보이는지 정확히 확인할 수 있으며, 돈이나 신뢰가 개입하기 전에 이 도구가 유용한지 스스로 판단할 수 있습니다.
여러분께 바라는 점
제가 무엇을 잘못했을까요? 포아송 임계값(Poisson threshold), "재학습을 하지 않는다"는 솔직함, 바이너리와 자격 증명을 함께 제공하기로 한 결정, 셀프 호스팅(self-hosted)이라는 전제 자체, 아니면 다른 무엇인가요? 저는 이것이 존재하기를 원했고 저 스스로도 사용하기 위해 이것을 만들었지만, 너무 오랫동안 혼자서만 들여다보고 있었습니다. 이 도구에서 불편하거나 신경 쓰이는 점이 있나요? 저에게 말씀해 주세요.
만약 시뮬레이션 (sim) 버전을 실행해 본 후, 실제 Kalshi 시장 흐름 (market flows)을 추적하고 싶다고 결정하신다면, 그것이 바로 상용 버전 (commercial build)입니다. 동일한 대시보드, 라이브 피드 (live feed), 전체 Python 소스 코드, 사용자의 키 (keys)를 사용하여 모두 사용자의 기기에서 실행됩니다. 현재 tradehunter.site에서 출시 기념 할인 가격으로 제공되고 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기