사지 않기로 한 판단도 성적표가 남습니다 — 도구 열 개로 확인한 시험 주문의 두 가지 쓰임

도구가 내는 판정의 상당수는 「사지 마라」인데 그 절반의 성적표가 통째로 비어 있었습니다. 열 개를 실제로 돌려 왜 비어 있었는지와 무엇을 채울 수 있는지를 잰 기록입니다.

사지 않기로 한 판단도 성적표가 남습니다 — 도구 열 개로 확인한 시험 주문의 두 가지 쓰임

이 글의 완료 조건: 독자가 자기 도구의 「안 사기로 한 판단」 하나를 골라, 계좌를 건드리지 않고 그 판단의 성적표를 받을 수 있으면 성공입니다.

하는 일 열 개 도구의 실제 판정을 시험 주문에 올려 두 가지 쓰임을 잽니다 — 안 낸 결정 재기, 한 칸만 바꾼 대조군
맞는 사람 도구를 여러 개 돌려 봤고, 그중 「관망」이 맞았는지 한 번도 못 재 본 사람
안 맞는 사람 도구 하나를 그대로 믿고 쓰는 사람. 이 글은 재는 이야기지 고르는 이야기가 아닙니다
이 글의 결과물 두 쓰임의 레시피, 그리고 열 개 중 어느 도구에 어느 쓰임이 맞는지의 표
준비물·비용 코드 0원 · 모델 비용 0원 · weltiq pro 계정
시간·난도 읽는 데 20분 · 개별 편의 레시피는 편당 30분
검증 환경·날짜 2026-09-28 (KST) · 격리 서버 · 합성 호가 (6절에 한계를 그대로 적었습니다)
제휴 고지 필자는 weltiq 로부터 이 연재의 원고료를 받습니다. 아래에는 안 된 것이 된 것보다 많습니다. 그대로 적었습니다

0. 재는 것과 안 재는 것

잽니다: 그 판정이 시험 주문의 칸에 들어가는가 · 들어가면 끝까지 평가되는가 · 계좌가 정말 안 움직이는가 · 나중에 되찾아 채점할 수 있는가.

안 잽니다: 그 도구가 옳은가. 수익률. 어느 도구가 더 나은가.

이 구분이 이 연재의 전부입니다. 저는 주장하는 쪽이 아니라 재는 쪽입니다.


1. 한눈에 — 비어 있던 절반

투자 판단 도구를 서른 개쯤 돌려 보면 성적표가 산 것에만 남는다는 게 보입니다.

도구가 WAIT·HOLD·관망·AVOID 를 내면 그건 "지금 들어가는 것보다 안 들어가는 게 낫다"는 검증 가능한 주장입니다. 그런데 아무도 채점하지 않습니다.

얼마나 많이 비어 있나 — 이번에 고른 열 개 중 여섯 개에 무주문 판정이 기록으로 실재했습니다. 그중 하나는 극단적입니다: 기록된 판정 네 건이 전부 무주문이었고(WAIT 0.88 · 0.90 · 0.89 + SKIP 0.20), 확신도까지 붙여 놓고 그 확신이 맞았는지는 아무도 안 쟀습니다.

왜 비어 있었나 — 이 글의 핵심 한 줄

"백테스트로 재면 되잖아"가 바로 나옵니다. 원리적으로는 맞습니다. 진짜로 막고 있던 건 다른 것입니다.

안 사기로 한 결정을 재려면 그걸 실제로 사 봐야 합니다. 그런데 사는 순간 계좌가 움직입니다 — 자본이 묶이고, 손실 한도를 갉아먹고, 성과 집계에 섞입니다. 재는 행위가 재려는 대상을 망가뜨립니다.

그래서 안 쟀습니다. 시험 주문은 잔고·손익·한도·성과 집계 어디에도 들어가지 않는 별도 원장에서 그 판단을 끝까지 끌고 갑니다.

계좌가 정말 안 움직이는지는 믿지 않고 셌습니다 — 실행 전후로 계좌 관련 표 아홉 개를 전량 비교해 완전히 동일했습니다. 네 번의 검증에서 모두요.

시험 매수 화면 — 이번 달 사용량과 등록 폼 화면 맨 위가 이번 달 사용량입니다(8 / 1000 건). 그 아래 등록 폼에 수량 칸이 없다는 것을 보세요 — 수량은 종목 규칙에서 나오고 여기서 바꿀 수 없습니다. 이게 도구끼리 비교가 되는 이유입니다.


2. 설치 비용 — 없습니다

이 연재의 다른 글과 달리 새로 설치할 것이 없습니다. 도구는 이미 깔려 있다고 보고, weltiq 쪽은 pro 계정과 run-forward-tests 스코프가 붙은 API 키 하나면 됩니다.

대신 예산이 있습니다: pro 월 1,000회, 하루 33건. 도구 서른한 개를 하루 한 바퀴 돌릴 수 있는 크기입니다. 차감은 승인된 신규 진입 1건 = 1회이고 청산·조회·내보내기·같은 본문 재전송은 0회입니다.


3. 두 가지 쓰임 — 이 기능을 만든 이유

쓰임 ① 「안 낸 결정」을 잰다

도구가 관망한 그 종목·그 시점에 반사실을 냅니다. "그때 샀다면 어땠나."

여기서 방향을 넣는 것은 값을 지어내는 게 아닙니다 — 반사실을 정의하는 것입니다. 이 구분이 중요합니다. 저는 앞선 이관 검증에서 이 관점이 없어서, 관망만 내는 도구를 "방향이 없다"며 탈락시켰습니다. 그 판정이 뒤집힙니다.

쓰임 ② 한 칸만 바꿔 같은 시각에

실제 주문(또는 기준안)을 내면서 한 칸만 바꾼 비교군을 같은 호가에 함께 냅니다. 같은 호가를 보므로 차이가 그 한 칸에서만 나옵니다.

잔고를 안 건드리니 비교군을 몇 개든 낼 수 있습니다. 실측: 6건을 한꺼번에 던져 6/6 접수, 0.02초, 막히는 것 없음. 다만 N팔 = N회 차감입니다.


4. 열 개를 어디에 쓰나

도구 쓰임 무엇이 재지는가 개별 편
29A MAHORAGA ① WAIT 에 확신도가 붙어 있다 — 이 연재에서 가장 값어치 큰 표본 3편
12 TradingAgents ① 「계속 들고 있을까」를 재판정하는 유일한 도구 4편
27 AI Trading Analyst ① 진입가가 3/3 회 종가 아래인 눌림 대기 5편
31 AlpacaTradingAgent ① HOLD 인데 레벨은 다 낸다 — 변환·창작 0 6편
34 orallexa ① 확률 0.55 가 게이트 60% 에 막혔다 — 확신도 보정과 직결 7편
25 daily_stock_analysis ① 관망. KR 을 자기 경로로 다루는 유일한 편 8편
04 freqtrade ② 손절 폭만 바꾼 대조 — 열 개 중 가장 깨끗 9편
15 Moss ② 수수료 되먹임으로 바뀐 값 vs 원래 값 10편
14 QuantDinger ② 격자 최적점 둘 — 대조를 못 세웠다 11편
23 crypto-trading-arena ② 요율 — 저쪽은 문장 하나로 체결 12→43건 12편

5. 맞물리는 자리 — 실제로 재 보니

환경 고지: 아래는 전부 격리 서버·합성 호가입니다. 확인되는 것은 배선과 판정 틀이고 손익은 시장 사실이 아닙니다.

5.1 관망은 옳았습니다 — 조건부로

네 건이 체결·청산까지 갔고 전부 같은 답을 냈습니다: 손익분기 0.2223~0.2224%.

그 시점에 들어갔다면 0.22% 넘게 움직여야 본전이었습니다. 안 움직였으니 관망이 옳았습니다.

반사실 상세 — 진입부터 자동 청산까지 29A 의 WAIT 0.88 과 12 의 Hold 를 반사실로 낸 회차입니다. 「조건 발동: 상대 시간 도달」 과 그 아래 청산 행의 추적 ID: tool-a-run-42 를 보세요 — 자동 청산이 진입의 추적 ID 를 물려받습니다.

5.2 그런데 더 중요한 게 나왔습니다

확신도와 결과가 안 갈렸고, 갈릴 수가 없었습니다.

네 건을 같은 시각·같은 호가로 내면 손익은 확신도가 아니라 왕복 비용이 정합니다 — 소수점 끝까지 같은 값이 나왔습니다.

그래서 이 기능의 설계 요건이 드러났습니다:

반사실은 판정이 난 그 시각·그 가격에 자동으로 나가야 합니다.

나중에 몰아서 재생하면 아무것도 안 나옵니다. 도구가 WAIT 를 내는 그 순간 시험 주문이 함께 나가야 합니다. 개별 편의 레시피가 전부 이 모양인 이유입니다.

5.3 관망의 값어치는 거래소가 정합니다

크립토는 0.22%만 움직이면 관망이 틀립니다. 미국 주식은 왕복 비용이 거의 0이라 「기다림」이 비용으로는 전혀 정당화되지 않습니다.

같은 판정도 시장에 따라 값이 다릅니다. 이건 도구의 문제가 아니라 시장 구조입니다.

5.4 한 칸만 바꾸면 무엇이 갈리나

04 freqtrade 가 가장 깨끗했습니다. 손절 폭 3팔이 같은 호가에서 같은 가격에 동시 체결됐고, 기록된 실제 최저가가 −0.05% 선만 뚫었습니다 → 2.9초 stop_loss vs 46초 close_after.

그 한 칸이 「왜·언제 닫혔나」를 갈랐습니다. 손익은 안 갈렸습니다(호가가 고정이라서요) — 대조군이 재는 것은 손익이 아니라 경로라는 걸 이 한 줄이 말해 줍니다.

15 Moss 에서는 역설이 나왔습니다. 수수료를 보고 올린 목표 배수가, 정작 그 근거였던 거래를 목표가로 못 닫습니다.

23 arena 는 부호가 뒤집혔습니다. 같은 체결가·같은 청산가에서 총손익은 고정인데 순손익이 −7.03 / +2.98 / +1.98 / −7.03bp. 다만 거래소를 바꾸면 로트·최소금액도 바뀌어 수량이 13배 갈립니다 — 「요율만」 격리는 우리 쪽에서 불가능합니다.

14 QuantDinger 는 대조를 못 세웠습니다. 격자 두 줄에 거래별 레벨이 아예 없어서입니다. 못 세운 이유와 무엇이 있어야 서는지가 11편의 본론입니다.

대조군 두 팔 한 칸만 다른 두 팔이 같은 목록에 나란히 있습니다. 각 팔의 추적 ID 가 같고 메모가 어느 팔인지 말합니다 — 나중에 이 둘을 한 실험으로 묶는 열쇠입니다.

5.5 되찾아 채점하기 — 왕복

심은 것을 나중에 가져와야 채점이 됩니다. 12건을 심어 재 봤습니다.

단계 실측
심기 12건. 판정·확신도·이유가 요청 본문에 한 번도 안 실렸습니다
회수 (하나씩) 추적 ID 로 8건, 호출 9회
회수 (전체 CSV) 헤더 전수 동일, 커서로 쪼개 읽어도 중복 0·누락 0
조인 16행 중 12 조인 / 4 실패

의도는 도구가 갖고 우리는 집행 기록을 갖습니다. 둘을 잇는 것은 추적 ID 하나입니다.

실패한 4행은 전부 서버가 만든 자동 청산이었고, 실현 손익이 거기 붙습니다. 즉 회수가 진입만 가져오고 손익을 빼놓고 있었습니다. 고쳐졌습니다 — 5.1 절 캡처에 그 결과가 찍혀 있습니다.

내보내기 CSV 내보내기·JSON 내보내기 와 그 아래 주문·체결 표입니다. 내 기록 칸의 태그·메모·추적 ID 를 보세요 — 보낸 그대로 돌아옵니다.


6. 이 연재가 보인 것 — 그리고 안 되는 것

6.1 열 개 중 손 안 대고 들어온 건 하나였습니다

앞선 이관 검증에서 서른한 개의 기록된 산출물을 그대로 밀어 넣어 봤습니다. 아무것도 안 고치고 들어온 도구는 하나였고, 걸리는 건 언제나 청산 시한이었습니다. 시한을 기록한 여덟 편도 전부 못 씁니다 — 절대 시각은 과거이고 기간은 7일 상한을 넘습니다.

6.2 7일 상한이 도구의 판단을 자릅니다

어떤 도구가 "3~6개월"을 냈는데 그 자리에 7일을 넣으면, 재는 것은 그 도구의 판단이 아닙니다. 반올림은 값을 보정하고, 절단은 판단을 바꿉니다. 자른 회차의 성적표를 그 도구의 성적표로 읽으면 안 되는데, 지금 기록에 「잘렸다」는 표시가 없습니다.

6.3 반드시 같이 읽어야 하는 단서 셋

  1. 표본 하나로는 아무 말도 못 합니다. 관망 한 건이 손실로 끝났다고 그 관망이 옳았던 게 아닙니다. 분포가 필요하고, 그래서 월 1,000건이 붙습니다.
  2. 반사실은 한쪽만 잽니다. "샀으면 어땠나"는 재지만 "안 사서 무엇을 아꼈나"는 여전히 판단입니다.
  3. 우리는 그 도구가 옳다/틀리다를 말하지 않습니다. 재고 기록할 뿐입니다.

6.4 아직 안 되는 것

시한 없이 등록하면 목표가만 넣고 시한을 비운 채 등록하면 이렇게 막힙니다. 입력값이 그대로 남아 있는 것도 보세요 — 다시 타이핑하지 않아도 됩니다.


7. 손대지 않은 칸

이 연재가 아무도 안 해 본 것들입니다. 다음 글의 빈칸 지도입니다.


8. 무엇부터 쓸까

관망이 많은 도구를 쓰고 있다면 ①번부터. 29A 처럼 확신도가 붙어 있으면 더 좋습니다 — 확신도와 결과를 나란히 놓을 수 있는 건 드뭅니다.

파라미터를 만지고 있다면 ②번부터. 04 편이 가장 따라 하기 쉽습니다. 손절 폭 하나만 바꿔 두 팔을 같은 시각에 던지면 됩니다.

둘 다 아니면 아직입니다. 시한을 낼 수 없는 도구는 이 경로에 안 맞고, 억지로 시한을 지어 넣는 순간 도구가 하지 않은 판단이 생깁니다.


이 글의 증거: 반사실 실측 · 대조군 실측 · 왕복 실측 · 31종 이관 검증 — 위 숫자는 전부 이 기록에서 가져왔고, 못 한 것도 같은 기록에 있습니다.