MAHORAGA 의 `WAIT` 를 채점하는 법 — 확신도 0.88 이 맞았는지 계좌를 안 건드리고 재기
MAHORAGA 가 확신도를 붙여 놓고 아무도 안 재던 관망 네 건을, 그 판정의 반대를 실제로 주문해서 끝까지 따라가 본 절차입니다.
MAHORAGA 의WAIT 를 채점하는 법 — 확신도 0.88 이 맞았는지 계좌를 안 건드리고 재기
이 글의 완료 조건: 독자가 자기 도구의 「사지 마라」 판정 한 건을 골라, 그 반대를 실제로 주문하고, "이 판정이 틀리려면 10분 안에 최소 몇 % 움직였어야 하는가"라는 숫자 하나를 손에 넣으면 성공입니다.
| 하는 일 | MAHORAGA 가 낸 WAIT·SKIP 판정의 반대를 시험 주문으로 실제로 내고, 체결·청산까지 따라가 그 관망의 문턱을 잽니다 |
| 맞는 사람 | 판단 도구를 돌려 봤는데 "사라"는 답보다 "기다려라"는 답을 훨씬 많이 받아 본 사람 |
| 안 맞는 사람 | 지금 당장 수익이 나는 조합을 찾는 사람. 이 절차는 재는 장치이지 버는 장치가 아닙니다 |
| 이 글의 결과물 | 판정·확신도가 붙은 거래 기록 CSV 한 장과, 「그 관망이 틀리려면 필요했던 최소 움직임」 한 숫자 |
| 준비물·비용 | MAHORAGA 설치 무료(MIT) · 모델 비용 실측 $0.19682(71콜) · weltiq pro 계정 |
| 시간·난도 | MAHORAGA 로컬 기동 25분 + 반사실 왕복 15분 · 중 (curl·JSON) |
| 검증 환경·날짜 | 2026-09-28 (KST) · 격리 서버 · 합성 호가 · 커밋 0431b2a9 (5절에 한계를 그대로 적었습니다) |
| 제휴 고지 | 필자는 weltiq 로부터 이 연재의 원고료를 받습니다. 아래 숫자는 전부 필자가 직접 돌린 것이고, 못 잰 것과 빠진 표본도 그대로 적었습니다 |
1. 이 도구가 남기던 빈칸
MAHORAGA(github.com/ygwyg/MAHORAGA · MIT · 별 868)는 Cloudflare 위에서 24시간 도는 에이전트입니다. 커뮤니티 글과 SEC 공시를 모아 종목별 여론 점수를 만들고, 그것을 모델에게 넘겨 BUY/SELL/HOLD 와 확신도를 받습니다.
제가 로컬에서 돌려 기록한 판정이 이렇습니다.
| 종목 | 판정 | 확신도 | entry_quality |
경로 |
|---|---|---|---|---|
| BTC/USD | WAIT | 0.88 | poor | 크립토 |
| BTC/USD | WAIT | 0.90 | poor | 크립토 |
| BTC/USD | WAIT | 0.89 | poor | 크립토 |
| BTC/USD | SKIP | 0.20 | — | 크립토 (모델만 openai/gpt-4o-mini 로 바꾼 대조군) |
| GME | WAIT | 0.88 | poor | 주식 |
| BB | WAIT | 0.89 | poor | 주식 |
| BONK.X | WAIT | 0.95 | poor | 주식 |
여기 「사라」가 한 건도 없습니다. 기록된 판정이 전부 무주문입니다. 그리고 전부 확신도가 붙어 있습니다.
한 줄 미리 정정해 둡니다. 제가 앞선 이관 검증에서 이 도구의 WAIT 셋을 0.88·0.89·0.95 로 적었는데, 그 셋은 주식 경로(GME·BB·BONK.X)의 값입니다. 크립토 경로(BTC/USD)의 3회 일관성 표는 0.88·0.90·0.89 이고
SKIP0.20 도 크립토 경로입니다. 이 글은 둘을 나눠 다룹니다.
이 도구가 GME 에 대해 쓴 근거 원문입니다 (그 도구의 출력).
"At the supplied $23.49 price, there is insufficient evidence of an attractive entry. … Confidence reflects the case for waiting, not a prediction of a price decline."
마지막 문장을 봐 두세요. "이 확신도는 기다리자는 판단에 대한 것이지 가격 하락 예측이 아니다." 이 한 줄이 3절에서 제가 숏을 내지 않은 이유가 됩니다.
MAHORAGA 대시보드 — 종목별 판정과 근거가 들어온 화면
이 도구가 일하는 화면입니다. 왼쪽 위가 알파카 페이퍼 계좌, 아래가 이번에 수집된 신호 29건, 오른쪽 아래가 모델이 각 종목에 대해 쓴 판단과 근거입니다. 거기 WAIT 와 확신도 숫자가 나란히 찍혀 있는 자리를 보십시오 — 이 글은 그 숫자 하나를 채점하려는 것입니다.
계정 없이 여기까지 — 로컬 기동과 벽의 위치
Cloudflare 계정 없이 되는 구간(초록)과 안 되는 구간(빨강)이 한 화면에 있습니다. Ready on http://127.0.0.1:8787 까지가 무료 구간입니다 — 아래 절차는 전부 이 초록 구간 안에서 돕니다. 배포하지 않아도 판정은 받을 수 있습니다.
이 도구는 레벨을 내지 않습니다. 손절 5%·익절 10% 는 설정 상수(stop_loss_pct, take_profit_pct)이지 판단이 아닙니다. 그러니 이 도구가 내놓는 유일한 정량 산출은 확신도입니다. 그런데 그 확신도가 맞았는지는 아무도 재지 않았습니다.
2. 왜 지금까지 못 쟀나
성적표는 지금까지 산 것에만 남았습니다. 사면 체결·수수료·손익이 남으니까요. 안 산 것은 아무 기록도 남기지 않습니다.
그런데 WAIT 는 빈칸이 아닙니다. "지금 들어가는 것보다 안 들어가는 게 낫다"는 검증 가능한 주장입니다. 확신도 0.88 까지 붙어 있으면 더 그렇습니다.
왜 그동안 비어 있었나 — 여기가 핵심입니다. 안 사기로 한 결정을 재려면 그걸 실제로 사 봐야 하는데, 사는 순간 계좌가 움직입니다. 자본이 묶이고, 손실 한도를 갉아먹고, 성과 집계에 섞입니다. 재는 행위가 재려는 대상을 망가뜨립니다. 그래서 안 쟀습니다.
시험 주문은 그 자리를 비켜 갑니다. 잔고·손익·한도·성과 집계 어디에도 들어가지 않는 별도 원장에서 그 판단을 청산까지 끌고 갑니다.
사지 않기로 한 판단도 성적표가 남습니다. 계좌를 건드리지 않고요.
이게 「남들은 못 하는 기술」이라는 말이 아닙니다. 원리상 백테스트로도 흉내 낼 수 있습니다. 다만 백테스트는 과거 재생이라 그 판정이 난 그 시각·그 호가를 못 잡고, 실계좌로 하면 위의 파괴가 일어납니다. 그 사이에 자리가 하나 비어 있었고, 이 글은 그 자리를 실제로 써 본 기록입니다.
3. 레시피 — 그대로 도는 것
3.1 먼저 MAHORAGA 에서 판정을 받습니다
이 도구는 워커와 화면이 따로입니다. wrangler dev 가 띄우는 것은 API 워커이고, 화면은 저장소 안의 별도 앱입니다.
| 띄우는 명령 | cd MAHORAGA/dashboard && npm install && npm run dev (워커는 따로 npx wrangler dev) |
| 주소 | 대시보드 http://localhost:3000 · 워커 http://127.0.0.1:8787. 포트를 바꾸려면 npm run dev -- --port 9321, 워커 포트를 옮겼으면 MAHORAGA_API_URL=http://localhost:9320 npm run dev |
| 로그인 | Cloudflare 계정은 필요 없습니다. 대신 .dev.vars 에 직접 정한 MAHORAGA_API_TOKEN 을 화면 안 설정 칸에 한 번 넣습니다(브라우저에만 저장됩니다). 그 토큰 없이 보이는 것은 아무것도 없습니다 |
| 처음 열면 | 워커를 안 띄웠으면 빨간 OFFLINE 화면 하나뿐입니다. 워커를 띄우고 /agent/enable 을 한 번 때리면 채워집니다. 여기서 막혔다고 계정을 만들지 마십시오 — 계정 문제가 아니라 순서 문제입니다 |
판정만 콕 집어 받으려면 두 줄이면 됩니다.
curl -H "Authorization: Bearer $TOKEN" localhost:8787/agent/trigger
curl -H "Authorization: Bearer $TOKEN" localhost:8787/agent/status
signalResearch 안에 verdict·confidence·entry_quality·reasoning 이 들어 있습니다. 여기까지가 도구의 몫이고, 아래부터가 채점입니다.
3.2 그 판정의 반대를 실제로 냅니다
레시피 전문은 03-trial-order-mahoraga-wait.sh 에 있습니다. 심장부만 옮깁니다.
curl -sS -X POST "$WELTIQ_BASE_URL/v1/trial-buys" \
-H "Authorization: Bearer $WELTIQ_API_KEY" -H 'Content-Type: application/json' \
-d '{
"venue": "binance-spot", "symbol": "BTCUSDT",
"client_order_id": "mahoraga-wait-1-wait-088",
"side": "long",
"exit_plan": {"close_after_seconds": 600},
"client_tracking_id": "mahoraga-wait-1",
"tags": ["counterfactual", "part-29A"],
"metadata": {"verdict": "WAIT", "confidence": "0.88",
"source": "reports/a/29-account-walls/RUN-LOG.md:148"}
}'
세 가지를 정해 놓고 들어갑니다.
① 방향은 롱입니다. WAIT·SKIP 은 둘 다 "사지 마라"이고, 그 반대는 사는 것입니다. 숏은 내지 않았습니다 — 1절의 그 문장 때문입니다. 하락을 시사하지 않은 판정에 숏을 붙이면 그건 반사실이 아니라 창작입니다.
② 청산 조건은 시한만입니다. 이 도구는 레벨을 내지 않으니 가격 조건을 지어내지 않았습니다. close_after_seconds: 600 하나뿐입니다.
③ 확신도는 문자열로 싣습니다. "confidence": 0.88 처럼 숫자로 보내면 500 입니다. 계약 본문이 해시되는데 결정론 규칙이 float 를 거부합니다. 제 1차 시도에서 8건이 전부 500 이 났고, 문자열로 바꿔 통과시켰습니다.
그리고 판정과 확신도는 서버가 해석하지 않습니다. 의도는 도구가 갖고, 우리는 집행 기록을 갖습니다. 둘을 잇는 것은 client_tracking_id 하나입니다.
3.3 되찾아 옵니다 — 호출 두 번
curl -sS "$WELTIQ_BASE_URL/v1/forward-tests?tracking=mahoraga-wait-1&limit=200" \
-H "Authorization: Bearer $WELTIQ_API_KEY"
curl -sS "$WELTIQ_BASE_URL/v1/forward-tests/orders?tracking=mahoraga-wait-1&format=csv" \
-H "Authorization: Bearer $WELTIQ_API_KEY"
두 번째 줄이 2026-09-28 에 생긴 계정 전체 엔드포인트입니다. 시험을 먼저 고르지 않습니다 — 종전에는 「목록 1회 + 시험마다 내보내기 1회」였고, 월 한도를 다 쓴 달이면 1,001번이었습니다. 지금은 한 번입니다.
자동 청산 주문도 추적 ID·태그를 물려받습니다. 그래서 진입만 심어도 이 CSV 에 청산 줄이 같이 옵니다 — 왕복 비용이 거기서 나옵니다.
조인할 때 awk 를 쓰지 마십시오. CSV 의 metadata·exit_plan 칸에 인용된 쉼표가 들어 있어 필드 구분자로 자르면 열이 조용히 밀립니다. 레시피는 인라인 python3 의 csv 모듈로만 조인하고, 그 이유를 주석에 적어 뒀습니다.
환경 고지: 아래 숫자는 격리 서버·합성 호가에서 나왔습니다. 운영이 아니고, 손익은 시장 사실이 아닙니다 — 재는 것은 배선과 판정 틀이지 그 도구가 옳았다는 증거가 아닙니다.
4. 돌려 본 결과
BTC/USD 네 건이 전부 201 → 체결 → 600초 시한 청산까지 갔습니다.
| 케이스 | 확신도 | 진입가 | 청산가 | close_reason |
수수료 | 순손익 | 손익분기 |
|---|---|---|---|---|---|---|---|
| WAIT | 0.88 | 85474.04645 | 85454.95355 | close_after |
0.01367432 | −0.0152017520 | 0.2223% |
| WAIT | 0.90 | 85474.04645 | 85454.95355 | close_after |
0.01367432 | −0.0152017520 | 0.2223% |
| WAIT | 0.89 | 85474.04645 | 85454.95355 | close_after |
0.01367432 | −0.0152017520 | 0.2223% |
| SKIP | 0.20 | 85474.04645 | 85454.95355 | close_after |
0.01367432 | −0.0152017520 | 0.2223% |
진입 금액 6.8379237160 USDT · 수량 0.00008 BTC. exit_trigger_px 는 null 입니다 — 시한으로 닫힌 거래에는 발동 호가가 없고, 있는 척 채워 넣지 않습니다.
주식 경로(GME·BB)는 201 로 접수됐지만 배치에서 rejected:market_closed 로 돌아왔습니다. 체결이 없으니 손익이 없고, 그쪽의 「관망이 옳았나」는 이 회차에서 미판정입니다. 시각을 속여 돌리지 않았습니다.
4.1 이 표에서 읽어야 할 숫자 하나
손익분기 0.2223%. 뜻은 이렇습니다 — 그 시점에 들어갔다면 10분 안에 BTC 가 최소 0.2223% 는 올랐어야 본전이었습니다. 안 올랐으니 그 관망은 옳았습니다. 단 조건부입니다: "가격이 그 10분 동안 0.2223% 넘게 오르지 않았다면".
뒤집어 말하면 이게 이 도구의 문턱입니다. 이 판정이 틀리려면 10분 안에 최소 0.2223% 올랐어야 했다.
4.2 예상과 달랐던 것 — 확신도가 결과를 전혀 안 갈랐습니다
네 건의 순손익이 소수점 끝까지 같습니다. −0.0152017520. 확신도 0.88 과 0.20 이 같은 값입니다.
이유는 명백합니다. 네 건을 같은 시각에 같은 호가로 냈기 때문입니다. 고정 시장에서 손익은 확신도가 아니라 왕복 비용이 결정합니다.
이건 실패가 아니라 틀이 서면서 드러난 조건이고, 다음 회차 설계를 통째로 정합니다.
확신도-결과 상관을 재려면 반사실을 「판정이 난 그 시각·그 가격」에 내야 합니다. 나중에 한 회차로 몰아서 재생하면 확신도는 사라지고 비용만 남습니다.
즉 이 기능이 값을 내려면 도구가 관망을 낸 순간에 자동으로 반사실 주문이 나가야 합니다. 사후 배치 재현으로는 아무것도 안 나옵니다.
시험 매수 상세 — 반사실 한 건의 계획과 발동 근거
우리 쪽 화면입니다. 표의 한 행을 펼치면 방향·청산 계획·효과적 종료 예정 시각과 그 근거·발동 조건과 그 호가가 나옵니다. exit_trigger가 close_after 이고 exit_trigger_px 가 비어 있는 자리를 보십시오 — 시한으로 닫힌 거래에는 발동 호가가 없다는 것이 화면에도 그대로 나옵니다.
5. 이 조합의 한계
① 표본 하나로는 아무 말도 못 합니다. 관망 한 건이 손실로 끝났다고 그 관망이 옳았던 게 아닙니다 — 분포가 필요합니다. 이 회차의 크립토 표본은 네 건이고, 그 넷이 서로 구별되지도 않았습니다(4.2절). 통계를 내려면 월 1,000회를 판정 시각마다 흘려야 합니다.
② 반사실은 한쪽만 잽니다. "샀으면 어땠나"는 쟀지만 "안 사서 무엇을 아꼈나"는 여전히 판단입니다. 이 표가 주는 것은 문턱이지 값어치가 아닙니다.
③ 우리는 그 도구가 옳다/틀리다를 말하지 않습니다. 재고 기록할 뿐입니다. 위의 「옳았다」도 기준에 따른 판정이고 조건부입니다.
④ 가장 확신했던 관망이 표본에서 빠졌습니다. BONK.X 의 확신도 0.95 가 이 회차 최고값인데 돌리지 못했습니다. 도구 원문이 "A displayed price of $0 is likely rounded or invalid and cannot establish an entry valuation" 이라고 적었습니다 — 기록에 쓸 가격이 없습니다. 임의 가격을 넣으면 반사실이 아니라 창작입니다.
⑤ 확신도 자체가 도구의 값이 아닙니다. 같은 시장·같은 프롬프트에서 같은 결론("사지 마라")을 내면서 확신도가 0.88~0.90 대 0.20 으로 갈렸습니다. 그 차이는 도구가 아니라 모델의 성질입니다. 반사실로 재도 이 오염은 그대로 넘어옵니다 — 회차마다 모델을 고정하고 기록해야 합니다.
⑥ 관망의 값어치는 거래소가 정합니다. 이게 이 회차의 가장 실용적인 발견입니다.
| 거래소 | 왕복 비용(실측) | 그 관망이 틀리려면 필요했던 10분 움직임 |
|---|---|---|
binance-spot (taker 0.1% × 2) |
0.2223~0.2224% | 약 0.222% |
us-equity (수수료 0 · 매도세 0.00206%) |
이 회차 미측정(폐장) | 크립토보다 두 자릿수 작다 |
크립토에서 10분짜리 관망은 0.22% 만 움직이면 틀립니다. 비트코인 10분 변동으로 0.22% 는 드물지 않습니다 — 이 도구의 관망은 비용으로 보호받는 폭이 매우 얇습니다. 반대로 미국 주식은 왕복 비용이 거의 0이라 거기서의 「기다림」은 비용으로는 정당화되지 않고 가격이 실제로 눌렸는지로만 정당화됩니다.
⑦ 합성 호가입니다. 위 손익은 격리 서버의 고정 호가에서 나온 모형 결과입니다. 확인된 것은 배선과 판정 틀이고, 거래소 성능이나 실제 수수료 실증이 아닙니다.
6. 언제 쓰고 언제 쓰지 마라
쓰십시오 — 확신도를 문턱으로 쓰고 있다면. MAHORAGA 의 기본 문턱은 min_analyst_confidence 0.6 입니다. 그 숫자로 무언가를 거르고 있다면, 그 숫자가 결과와 관계있는지를 재 본 적은 없을 겁니다. 이 절차가 그 첫 표본을 만듭니다. 단 4.2절의 조건을 지켜야 합니다 — 판정이 난 그 순간에 내야 합니다.
쓰십시오 — 레벨을 안 내는 도구라면. 이 도구처럼 방향과 확신도만 내는 도구는 이관 관점에서는 「필수 칸이 빈」 도구입니다. 반사실 관점에서는 다릅니다 — 방향을 넣는 것은 지어내는 것이 아니라 반사실을 정의하는 것이고, 그래서 이 도구는 오히려 좋은 표본입니다.
쓰지 마십시오 — 비중이 산출의 핵심이라면. 수량을 서버가 정하므로 "자본의 10%"가 최소 단위로 접힙니다. 규모와 무관한 지표를 쓰는 도구는 손해가 없지만, 비중 자체가 답인 도구는 절반을 잃습니다.
쓰지 마십시오 — 도구의 지평이 긴데 짧은 창으로 재려 한다면. 시험 주문의 수명 상한은 168시간입니다. 3개월짜리 판단을 7일로 자르면 재는 것이 그 도구의 판단이 아닙니다. 이 도구는 시한을 안 내므로 여기 안 걸리지만, 다음 편들은 걸립니다.
쓰지 마십시오 — 하락을 시사하지 않은 판정에 숏을 붙이려 한다면. 그건 반사실이 아니라 창작입니다. 원문이 무엇을 주장했는지가 방향을 정합니다.
이 글의 증거: A축 반사실 측정 기록 · 케이스별 요청·응답 원문 · 이 편의 레시피 · 도구 쪽 실행 기록. 위 숫자는 전부 그 기록에서 가져왔고, 못 잰 것(GME·BB 폐장 · BONK.X 가격 없음)도 같은 기록에 있습니다.