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 이고 SKIP 0.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 가격 없음)도 같은 기록에 있습니다.