파트너의 트레이딩 체크가 필요해서, 그녀가 거래를 입력하도록 만든 것을 대신 '그녀의 체결(fills)'을 읽도록 수정했습니다.
요약
본 글은 트레이딩 파트너의 거래 습관을 분석하고 위험을 체크하기 위해 개발된 'tilt-check' 도구에 대한 설명입니다. 이 도구는 체결 내역(fills)과 주문 기록(orders) 등 여러 데이터를 추적하며, 사전에 정의된 규칙들을 기반으로 과도한 거래나 리스크를 감지하여 경고합니다.
핵심 포인트
- 체결 및 주문 파일을 분석하여 트레이딩 패턴을 파악하는 도구입니다.
- 일일 최대 거래 횟수, 손실률 등 다양한 위험 관리 규칙을 적용할 수 있습니다.
- 손실 후 재진입 시점 등을 기록 기반으로 체크하여 과도한 리스크를 방지합니다.
- 규칙 위반 시 알림(토스트/비프음)을 통해 사용자에게 즉각적인 경고를 제공합니다.
지난 주말에 한국에서 밤에 마이크로 선물(micro futures)을 거래하는 제 파트너를 위해 tilt-check를 만들었습니다. 그녀는 거래하기 전에 그것을 입력했고("short 2 MNQ"), 그러면 그와 같은 거래에 대해 그녀 자신의 기록이 무엇이라고 말하는지 보여주었습니다. 저는 이 내용을 여기에 작성했습니다.
그녀가 이 글을 읽고 대략 다음과 같이 말했습니다. 제가 입력해야 할 거래는, 제가 멈춰서 입력하지 않는 바로 그 종류의 거래입니다.
맞습니다. 아무도 서두르면서 자신이 하려는 거래를 설명하기 위해 잠시 멈추지 않습니다. 그래서 이제 체크는 아무것도 입력할 필요가 없습니다. 이것이 어떻게 진행되었는지 알려드리겠습니다.
만약 영상을 보는 것을 선호하신다면: 10월 1일을 도구를 통해 다시 재생하는 내용의 3분짜리 만화와 같은 이야기입니다.
피드(The feed): 듣기만 하는 NinjaTrader 애드온
fills.csv: 시간, 계좌, 상품, 서명된 수량 (+2는 두 개를 매수했을 때, -1은 하나를 매도했을 때), 가격, 체결 IDorders.csv: 주문 ID, 동작(action), 유형(type), 상태(state), 수량, 손절가 및 지정가
타이머가 세 번째 파일인 snapshots.csv를 추가하며 미실현 P&L(P&L), 미결제 포지션, 현금 가치를 2초마다 (포지션이 열려 있을 때) 또는 60초마다 (평탄화되었을 때) 기록합니다.
그게 전부입니다. 절대로 Submit, Change 또는 Cancel를 호출하지 않습니다. 이것은 제가 원래 버전을 만들었을 때 합의했던 첫 번째 사항이며, 이 도구가 스스로 실행됨에 따라 더욱 중요해졌습니다. 그녀의 프로프 펌(prop firm) 역시 완전 자동화된 거래를 금지하고 있기 때문에, NinjaTrader 측에서는
Python 측(python -m tiltcheck watch)은 세 개의 파일을 추적하며 체결 내역(fills)을 기반으로 각 상품별 평균 가격, 규모, 진입 시점을 기록합니다. 모든 체결 내역은 rules.json에 정의된 몇 가지 규칙과 비교하는 과정을 거칩니다:
- 일일 최대 거래 횟수, 최대 계약 수량 (마이크로 및 미니 별도), 달러 또는 손실률(drawdown) 대비 일일 손실 한도
- 손실 종료 후의 휴지기(pause): 여러 번 연속으로 손실을 본 경우 더 긴 휴지기를 갖도록 설정
- 손실 포지션에 추가 진입: 브레이크이븐(breakeven)에서의 스케일인(scale-in)이 발동되지 않도록 최소 거리를 설정
- 해당 상품의 평소 규모보다 N배 이상 큰 규모
- 자신의 기록상 약하다고 판단되는 세션의 진입
- 스톱 체크: 진입 후 몇 초 동안
orders.csv에 해당 포지션에 대한 스톱 주문이 없으면 경고 메시지를 표시합니다.
무언가 규칙 위반이 발생하면 Windows 토스트 알림(PowerShell을 통해, 추가 패키지 없음)을 띄우고 긴급할 경우 비프음이 울립니다. 아무것도 위반되지 않으면, 각 진입 시점마다 조용한 한 줄의 정보가 표시됩니다: 해당 상품 및 방향에 대한 그녀의 중앙값 승리액과 중앙값 손실액(가격 기준). 이는 예측이 아닌 그녀 자신의 수치입니다.
규칙 파일은 선택 사항입니다. 휴지기 규칙이 존재하는 이유는 그녀의 기록 때문입니다: 손실 종료 후 15분 이내 재진입했을 때 50개 거래 동안 -$178.65를 손해 봤고, 더 오래 기다렸을 때는 42개 거래 동안 +$1,395.92를 벌었습니다. 이전에는 이에 대한 서면 규칙이 없었습니다. 이제 이 도구는 단순히 15분이 지났는지 여부만 알려줍니다.
실제 하루를 재현하며 사용하기
12:07:06 fill +1 MGC @ 4194.60
[tilt-check: rule] 손실 종료 ($-28.34). 다음 진입 가능 시간: 12:22.
...
손실을 본 MNQ 숏 포지션에 추가 진입한 두 건 모두 플래그가 지정되었습니다. 이 네 개의 계약은 합쳐서 -$273.16의 손실로 청산되었습니다. 10랏과 20랏 거래는 각각 1분 안에 진입하고 청산되었는데, 그녀는 이를 워밍업(warm-up) 거래라고 부르지만 도구는 그것을 알지 못하므로 규모에 대해 플래그를 지정했습니다. 괜찮습니다. 플래그는 판결이 아니라 질문입니다.
제가 처음에 잘못한 것들
행동(Exit) 기준 위치 계산. NinjaTrader의 거래 내보내기(trade export)는 종료(exit)당 한 행을 사용하기 때문에, 부분 청산된 진입(scaled-out entry)은 여러 행으로 나타나고 거래가 중첩됩니다. 부호가 지정된 체결(signed fills)로부터 포지션을 재구축하는 방식이 이 문제를 해결했으며, 이것이 애드온이 "거래(trades)" 대신 원시 실행(raw executions)을 기록하는 이유이기도 합니다.
PC 시계 대 시장 시계. 한국의 PC에서 13:00은 점심시간처럼 보일 수 있습니다. 하지만 뉴욕 시간으로는 자정입니다. 이제 모든 세션 라벨은 일광 절약 시간제(daylight saving)가 처리된 뉴욕 시간을 기준으로 표시되며, 그 옆에 PC 시간이 함께 표시됩니다.
모든 것에 대한 알림 설정. 초기 버전에서는 진입할 때마다 알림이 발생했습니다. 사용자는 한 시간 만에 이 기능을 음소거했을 것입니다. 이제 규칙별로 이미 알고 있는(하루 초반 몇 번의 거래는 약하다는 것을 아는) mute 목록이 생겼으며, 진입 시의 조용한 라인은 단 두 개의 가격만 표시됩니다.
닫힌 봉(closed bars)에서 가져온 차트 라인
사용자는 EMA와 VWAP 밴드를 관찰하므로, 이제 워처가 분봉(minute bars)도 읽습니다(--bars, 현재는 내보내기용). 또한 클릭했을 때 닫혔던 봉을 통해서만 계산된 사실 한 줄이 각 진입마다 추가됩니다:
CHART: 15m 200 EMA 30695.00, against the trade; VWAP +1.5 sd, fading the stretch.
여기에 세 가지 선택적 규칙이 추가되었습니다: 진입이 15분봉 200 EMA에 역행할 때 경고, VWAP에서 N 표준편차(sd) 이상 추격하는 경우 경고, 첫 번째 밴드 내부의 약세장(사용자 본인의 기록상 가장 취약한 지점이라고 합니다)에서 페이드(fade)가 발생할 때 경고입니다. 이 규칙들을 적용하여 자신의 봉으로 10월 1일을 재현했을 때, 12번의 진입 중 4번에서 추세 역행 경고가 발생했습니다.
다음 계획
실시간 봉(Live bars). 애드온이 체결을 기록하는 방식과 동일하게 닫힌 1분봉을 파일로 작성해야 하므로, 차트 라인이 내보내기 없이 작동할 수 있게 됩니다. 리플레이 모듈은 이미 미래를 예측하지 않도록 설계되어 있지만, 실시간 모듈은 그렇게 할 수 있어야 합니다.
만약 사용자가 거래하고 자신의 역사를 이 시스템으로 돌려보고 싶다면, 애드온이 필요 없고 일반적인 NinjaTrader 거래 내보내기 파일로 작동하는 report 명령어가 저장소에 있습니다:
GitHub logo ssap-pa / tilt-check
선물 트레이더를 위한 사전 거래 점검: TabPFN이 사용자의 NinjaTrader 기록을 학습하고, Gemma가 로컬에서 설명합니다. 주문은 절대 체결하지 않습니다.
tilt-check
사용자 자신의 NinjaTrader 기록으로부터 학습하는 선물 트레이더를 위한 사전 거래 점검 도구입니다.
TabPFN (오픈 웨이트)은 사용자의 과거 거래 내역을 읽습니다. Gemma (오픈 웨이트, Ollama를 통해)는 사용자가 곧 체결하려는 거래에 대해 사용자 자신의 숫자들이 무엇을 말하는지 평이한 언어로 알려줍니다. 모든 것이 사용자의 기기에서 실행됩니다. 주문은 절대 체결하지 않습니다.
저는 마이크로 선물(MNQ, MES, MGC)을 프로프 펌 계정에서 거래하는 파트너를 위해 이 도구를 만들었고, 그녀는 좋지 않은 세션 후에도 계속 같은 질문을 했습니다: 이것은 내가 잘한 거래인가 아니면 잘못한 거래인가?
자신의 수출 파일로 실행하고 문서화하는 것을 원하시나요? 사용자 트레이딩 기록 감사(Your Trading History, Audited): 48시간 이내에 작성된 서면 보고서가 제공됩니다. 지연될 경우 전액 환불됩니다. 샘플은 실제 계정 하나를 기반으로 합니다.
그녀의 계정에 대해 알려준 것
그녀의 숫자가, 그녀의 허가를 받아 공유되었습니다. 2026년 9월 1일부터 10월 2일까지의 하나의 계정:
- 23일 동안 293개의 기록...
또한, 전체 내용을 하나의 문서로 작성하는 새로운 audit-report 명령어가 있습니다: 시장 시간의 세션, 당일 첫 거래, 손실 후 재진입, 규모, 브래킷 리플레이를 통한 청산, 그리고 차트와 비교하여 검토된 사용자의 규칙들입니다. 그녀의 계정에 대해 이것이 생성한 결과는 여기에 렌더링되어 있습니다.
만약 제가 사용자님의 수출 파일로 실행하고 작성해 드리기를 원하신다면, 자세한 내용은 여기에 있습니다: https://ssap-pa.github.io/tilt-check/
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기