orallexa 설치부터 실제 체결까지 — 화면의 확신도 50.8%가 무슨 뜻인지 끝까지 따라가 봤습니다

Platt 보정·Brier 로그·편향 추적까지 갖춘 드문 도구입니다. 그런데 16종목을 돌렸더니 확신도는 세 값밖에 안 나왔고, 「CLAUDE AI OVERLAY」 버튼은 눌러도 LLM 을 안 부릅니다.

34편. orallexa — 「확신 80%」가 정말 80%인지 재 봤습니다

이 글의 완료 조건: 독자는 이 도구가 화면에 띄우는 확신도가 어떤 식으로 만들어지는지 자기 손으로 확인하고, 그 숫자를 우리 슬롯에 올려 실제 체결까지 받아 보면 성공입니다.

하는 일 미국 주식·크립토 티커 하나를 기술지표로 채점하고, 거기에 Claude 판단을 얹어 BUY/SELL/WAIT + 확신도 + 상승·중립·하락 확률을 냅니다. 주문은 알파카 페이퍼로 나갑니다
맞는 사람 확신도·보정·Brier 같은 계측 장치가 코드에 어떻게 들어가는지 보고 싶은 사람 · 판단만 받아서 자기 실행 층에 붙일 사람
안 맞는 사람 README 의 「8소스 융합·Bull/Bear/Judge 토론」을 쓰려는 사람(§2.2 에서 안 돌아갑니다) · 손절을 도구에 맡기려는 사람(§4.3)
이 글의 결과물 16종목 판단 16건, 확신도 원값과 화면값의 대조표, 알파카로 나가는 주문 인자 원문, 그리고 그 판단을 weltiq 로 옮겨 받은 왕복 체결 1회
준비물·비용 코드 0원(MIT) · 자료 무료(yfinance) · LLM 토큰만 — 성공 호출 1회 $0.002834 실측, 이 글 전체 41회 $0.093519
시간·난도 의존성 설치 163초 · 판단 1건 평균 4.096초 · 난도 중
weltiq 와의 관계 붙었습니다. 도구가 낸 BTC 판단을 슬롯에 올려 36초 뒤 체결, 2분 뒤 청산. §5 가 그 기록입니다
검증 환경·날짜 macOS · Python 3.11.16 · 커밋 794a2ec · 2026-09-24 · LLM 은 OpenRouter 경유 claude-sonnet-4-6 고정
고지 필자는 weltiq 와 제휴를 맺고 기고합니다. 이 글의 모든 명령과 숫자는 위 환경에서 실제로 돌려 얻은 실측이고, 주문은 전부 모의입니다. 이 도구가 내는 BUY·확신도·확률은 전부 그 도구의 출력이며 필자의 의견이 아닙니다

원문 로그와 원자료: reports/a/34-orallexa/

사람 쪽 문장은 실제로 친 명령을 대화로 옮긴 것이고, 출력은 실측이며 숫자는 손대지 않았습니다.


1. 이게 뭔가요

alex-jb/orallexa-ai-trading-agent 는 티커 하나를 기술지표로 채점하고 그 위에 Claude 판단을 얹는 시스템입니다.

항목 값 확인 방법
주소 github.com/alex-jb/orallexa-ai-trading-agent
라이선스 MIT LICENSE · GitHub API
별 수 ★67 · 포크 21 (관측일 2026-09-24) GitHub API
만들어진 날 / 마지막 푸시 2026-04-01 / 2026-07-12 GitHub API
이 글이 돌린 커밋 794a2ec0ce0b1271b468814eee47c2cd4edde147 git log -1
코드 크기 본체 51,130줄 · 테스트 18,112줄 / 83파일 wc -l 실측
브로커 알파카 페이퍼 하드코딩 (bot/alpaca_executor.py:32,61)

이 도구를 이 자리에 세운 이유가 있습니다. 이 연재에서 지금까지 본 도구 중 확신도를 재는 설비가 가장 많이 들어 있습니다. Platt 보정(engine/platt_calibration.py), Brier 감사와 신뢰도 다이어그램(markets/auto/brier_audit.py), 편향 추적(engine/bias_tracker.py), 소스별 정확도(engine/source_accuracy.py), 결정 로그(engine/decision_log.py). 논문 인용까지 붙어 있습니다.

그래서 이 편의 질문은 하나입니다. 화면에 뜨는 「확신도 50.8%」가 무슨 뜻인가.

orallexa 자체 UI. MSFT 를 SWING·1D 로 돌리고 「CLAUDE AI OVERLAY」를 켠 화면입니다. 가운데 아래 세 칸을 보세요 — SIGNAL Strong 79/100, **CONFIDENCE Low 48%**, RISK Low. 그런데 그 바로 위에는 **73% UPSIDE PROBABILITY** 가 큼직하게 떠 있습니다. 「얼마나 확신하나」로 읽히는 숫자가 한 화면에 둘 있고 **25포인트 벌어져 있습니다.** 맨 위 BREAKING 줄은 직전 판단(55%)과 비교해 +18% 움직였다고 알려 줍니다

이 도구의 뼈대

scripts/run_daily_pilot.py          ← 자율 진입점 (launchd 로 매일 09:35 ET)
    ↓
core/brain.run_prediction           ← use_debate 기본값 False
    ↓
skills/prediction.py                기술지표 채점 → Claude 호출 1회
    ↓  confidence = scale_confidence(LLM 원값)
engine/decision_log.py              memory_data/decision_log.json 에 적재
    ↓
bot/alpaca_executor.py              확신도 게이트 → 알파카 주문

옆에 다른 진입점이 셋 더 있습니다 — app.py(Streamlit)·api_server.py(FastAPI, 이 글의 UI 가 쓰는 것)·core/loop.py. 같은 티커에 다른 경로가 붙고 결과가 다릅니다. 이 글은 자율 진입점 run_daily_pilot.py 로 못 박고 쟀습니다.


2. 설치하기

파이썬 3.11 이상이면 됩니다. 필자는 3.11.16 으로 돌렸습니다.

git clone https://github.com/alex-jb/orallexa-ai-trading-agent.git
cd orallexa-ai-trading-agent
python3.11 -m venv .venv
.venv/bin/pip install -r requirements.txt     # 163초

.env 는 이렇게 채웁니다. 키는 Anthropic 키 하나면 판단이 돌고, 알파카 키는 주문을 낼 때만 필요합니다.

ANTHROPIC_API_KEY=...
ALPACA_API_KEY=...          # 페이퍼 (무료)
ALPACA_SECRET_KEY=...

필자는 Anthropic 직접 호출 대신 OpenRouter 를 썼습니다. SDK 를 그대로 두고 ANTHROPIC_BASE_URL=https://openrouter.ai/api 만 넣으면 통합니다.

2.1 막힌 자리 — 자율 진입점은 .env 를 안 읽습니다

README 는 .env 에 키를 넣으라고 합니다. 그런데 load_dotenv 를 부르는 파일은 api_server.py 와 desktop_agent/main.py 둘뿐입니다. scripts/run_daily_pilot.py 로 바로 돌리면 키가 안 잡힙니다.

그리고 이 실패가 조용합니다. 필자는 이걸 모르고 첫 판을 돌렸는데, 401 이 떨어졌는데도 결과물은 멀쩡한 모양으로 나왔습니다 — WAIT · 확신도 32.8% · "Claude overlay applied". LLM 이 401 을 받아도 근거 줄에 「Claude overlay applied」가 찍힙니다. 호출 실패 시 llm/ui_analysis.py:229 가 기본값(WAIT·40%)을 조용히 돌려주고, 위층은 그걸 정상 응답으로 받기 때문입니다. 0.5초 만에 끝나는 것 말고는 티가 안 납니다.

우회는 한 줄입니다.

set -a; source ./.env; set +a          # 먼저 export 하고
PYTHONPATH=. .venv/bin/python scripts/run_daily_pilot.py --tickers NVDA --dry-run

막혔는지 확인하는 법: 판단 하나가 4초쯤 걸리면 LLM 이 돈 것이고, 0.5초 만에 끝나면 안 돈 것입니다. 시간이 제일 정직한 지표입니다.

2.2 잠복한 것 하나 — 오늘 새로 깔면 LLM 경로 3분의 2가 죽어 있습니다

requirements.txt:2 는 버전 없이 anthropic 한 줄입니다. 오늘 새로 깔면 1.8.0 이 오는데, 그 SDK 의 Messages.create() 에는 temperature 인자가 없습니다.

「CLAUDE AI OVERLAY」를 켜고 끈 두 호출이 **한 글자도 다르지 않습니다.** 서버 로그에는 Claude overlay failed: Messages.create() got an unexpected keyword argument 'temperature' 가 매번 찍히는데, 응답은 200 OK 로 정상값처럼 돌아옵니다. temperature 를 넘기는 호출은 33곳 중 22곳입니다

22곳이 무엇인지가 중요합니다 — llm/debate.py(Bull/Bear/Judge)·llm/debate_graph.py· engine/multi_agent_analysis.py·engine/daily_intel.py·engine/scenario_sim.py· llm/perspective_panel.py. 저장소 설명에 적힌 「8소스 신호 융합, Claude Opus 4.7 위의 Bull/Bear/Judge 토론」이 전부 이 목록 안에 있습니다.

살아 있는 11곳에 자율 진입점이 쓰는 prediction_decision_report 가 들어 있습니다. 그래서 파일럿은 돕니다. 테스트 83파일 18,112줄이 이걸 못 잡는 이유는 전부 클라이언트를 가짜로 바꿔 놓고 돌기 때문입니다 — 진짜 SDK 의 시그니처를 아무도 확인하지 않습니다. 고치는 건 한 줄인데(의존성에 상한을 박으면 됩니다), 받은 그대로는 안 돕니다.


3. 설치했으니 일단 한 번 돌려봅시다

3.1 첫 판단

이렇게 말합니다

NVDA 를 스윙으로 한 번 봐 줘. 주문은 내지 말고.

그러면 이런 게 돌아옵니다

PILOT_START tickers=['NVDA'] confidence_gate=60.0% dry_run=True
HTTP Request: POST https://openrouter.ai/api/v1/messages "HTTP/1.1 200 OK"
DECISION NVDA decision=WAIT confidence=42.6% risk=MEDIUM elapsed=5.0s
PILOT_DONE trades=0 decisions=1
직접 치고 싶다면
set -a; source ./.env; set +a
PYTHONPATH=. .venv/bin/python scripts/run_daily_pilot.py --tickers NVDA --dry-run

이렇게 나오면 성공입니다. 200 OK 와 4~5초가 함께 보이면 LLM 이 실제로 답한 것입니다.

3.2 대시보드 띄우기

이 도구의 대시보드는 백엔드와 프런트 두 개를 따로 띄웁니다.

# 터미널 1 — API
set -a; source ./.env; set +a
.venv/bin/python api_server.py            # → http://localhost:8002

# 터미널 2 — UI
cd orallexa-ui && npm install && npm run dev   # → http://localhost:3000
  1. 주소: UI 는 http://localhost:3000, API 는 http://localhost:8002. README 에 포트가 안 적혀 있습니다 — api_server.py:1578 에 있습니다. 바꾸려면 그 줄을 고칩니다
  2. 로그인은 없습니다. 계정 없이 그대로 열립니다
  3. 처음 열면 왼쪽에 티커 입력칸, 가운데에 STANDBY. 티커를 넣고 RUN SIGNAL 을 눌러야 화면이 찹니다. 데모 모드도 있어 키 없이 눌러 볼 수 있습니다
  4. 막힌 자리: README 의 따라치기 블록 한가운데에 면책 문구가 끼어 있어 그대로 복사하면 깨집니다. npm install 은 6초, Next 기동은 129ms 로 빨랐습니다

3.3 초보자가 막히는 자리 넷

증상 원인 우회
판단이 0.5초 만에 끝나고 늘 WAIT 40% .env 를 안 읽는다 (§2.1) set -a; source ./.env; set +a
오버레이를 켜도 숫자가 안 변한다 anthropic 1.8.0 + temperature (§2.2) SDK 버전 고정
대시보드가 「PAPER TRADING · NOT CONNECTED」 아래 §4.5 키 문제가 아니다
BTC-USD 로 주문이 400 분석은 BTC-USD, 알파카 크립토는 BTC/USD §5 의 매핑

4. 본격적으로 — 실전 시나리오

4.1 시나리오 D. 「확신 80%」가 정말 80%인가 (= S4)

이 도구의 확신도는 상한 82% 라고 코드에 적혀 있습니다(models/confidence.py:23). 그래서 16종목을 한 번씩 돌리고, 화면에 뜨는 값과 LLM 이 실제로 쓴 원값을 같이 잡았습니다.

16종목 전부에 대해 LLM 이 쓴 확신도 원값이 **52 · 58 · 62 세 개뿐**입니다. 화면에 뜬 값도 42.6% · 47.6% · 50.8% 셋. 제일 높은 것과 낮은 것의 차이가 **8.2포인트**입니다. 82% 상한 근처는 한 번도 나오지 않았습니다. 반면 같은 판단이 함께 내는 p_up(상승 확률)은 **0.15에서 0.57까지** 벌어집니다

세 줄 요약

  1. 16종목에서 확신도는 세 값뿐이었고 폭은 8.2포인트였습니다. 같은 종목 NVDA 를 5회 반복했을 때도 원값이 5/5 전부 52.0 이었습니다
  2. 화면값 = 원값 × 0.82 입니다. scale_confidence() 는 이름과 문서 설명("capped at 82%")과 달리 상한을 씌우는 게 아니라 모든 값에 0.82를 곱합니다. 52 → 42.6, 62 → 50.8
  3. 80%는 구조적으로 안 나옵니다. LLM 이 최고로 쓴 62가 화면에서는 50.8%가 됩니다

그래서 화면의 50.8% 는 확률이 아닙니다. 이 도구가 스스로 인용하는 논문(Prophet Arena, arxiv 2510.17638)이 지적하는 「LLM 이 중간 구간으로 몰린다」는 현상이 그대로 관측된 것이고, 거기에 0.82 곱하기가 한 번 더 얹힌 값입니다.

한 술 더 뜨는 자리가 있습니다. LLM 호출이 안 붙는 경로에서는 확신도가 아예 수식입니다 — |기술점수 − 50| × 2 × 0.82. §1 의 화면에서 본 48% 가 정확히 이것입니다(기술점수 79 → |79−50|×2 = 58 → 58 × 0.82 = 47.6). 화면에 「CLAUDE AI OVERLAY」가 켜져 있었는데도 그렇습니다(§2.2). 반면 같은 카드의 73% UPSIDE 는 확률 모델이 낸 별개 숫자입니다.

4.2 Brier 로그가 쌓이나 (시나리오 D-2)

이 도구에는 자기 확신도를 채점하는 감사가 있습니다. markets/auto/brier_audit.py 는 결정 로그를 읽어 Brier 점수·신뢰도 다이어그램·ECE 를 내고, Platt 보정을 했으면 얼마나 좋아졌을지까지 계산합니다. 돌려 봤습니다.

받은 그대로 돌리면 loaded 0 historical decisions 입니다 — 결정 로그 경로가 **저자 맥의 바탕화면으로 하드코딩**돼 있습니다(brier_audit.py:189-190). 보고서 출력 경로도 마찬가지라, 제 맥에 ~/Desktop/Interview-Prep/Projects/alex-brain/… 폴더가 새로 생겼습니다. 경로를 실제 로그로 바꿔 끼우면 20행을 읽는데, 그중 채점 가능한 것은 **1행**입니다

세 줄 요약

  1. 로그는 쌓입니다. 파일럿은 판단마다 decision_log.json 에 한 줄을 남깁니다. 오늘 20행이 됐습니다
  2. 그런데 채점되는 것은 1행이었습니다. 감사는 WAIT 을 건너뛰는데(방향 주장이 없으니 맞습니다) 20행 중 11행이 WAIT 입니다. 남은 9행 중 하루 이상 지난 것이 1행뿐이었고, 그 한 줄의 Brier 는 0.2704 였습니다(forecast_p 0.52, 실제 −2.26% → actual 0)
  3. Platt 은 못 돌았습니다. 최소 30관측이 필요한데 1개입니다 — _Skipped: Need at least 30 observations, got 1._

그리고 제일 중요한 것: 감사가 채점하는 숫자는 confidence 가 아니라 probabilities.up 입니다(brier_audit.py:301). 화면에 뜨는 확신도 50.8% 는 이 감사에 한 번도 들어가지 않습니다. 재는 장치는 있는데, 사람이 보는 숫자를 안 잽니다.

Platt 은 주식 판단에 붙어 있지 않습니다. engine/platt_calibration.py 를 임포트하는 곳은 자기 테스트와 이 감사 하나뿐이고, 감사 안에서도 「했다면 얼마나 좋아졌을까」 보고서 한 문단입니다. 저자 자신이 그 함수 독스트링에 적어 뒀습니다 — "before flipping the live wire-up flag on polymarket_daily.py / stock decision path". 즉 아직 안 이었습니다.

로그의 목적도 미달입니다. run_daily_pilot.py 의 독스트링은 이 스크립트가 존재하는 이유를 "100 eligible production debate rows" 를 모으기 위해서라고 적어 뒀습니다. 그런데 파일럿은 use_debate 기본값 False 로 부릅니다. 20행 중 토론이 들어 있는 행은 0개이고 entry_price 도 20행 전부 0.0 입니다.

4.3 시나리오 S5·S7. 자율 경로는 손절을 안 넘깁니다

브래킷 주문(진입 + 손절 + 익절을 한 묶음으로) 코드는 진짜로 있습니다. alpaca_executor.py:176-186 이 OrderClass.BRACKET 을 만듭니다. 조건이 하나 붙어 있습니다 — if stop_loss > 0 and take_profit > 0.

그래서 알파카로 실제로 나가는 인자를 가로채 두 경로를 나란히 놓았습니다.

같은 execute_signal() 을 같은 계좌로 부르는데, **자율 경로는 order_class: null · stop_loss: null** 이고 사람이 레벨을 채우는 경로는 order_class: "bracket" 입니다. 다른 것은 인자 두 개뿐입니다. run_daily_pilot.py:134-139 는 그 둘을 넘기지 않습니다

실제 주문으로도 확인했습니다. 게이트를 45로 내리고 MSFT 를 한 번 냈습니다.

Order submitted: BUY 9 MSFT @ $500.40 (conf=51%, stop=$0.00, target=$0.00)

도구 자신의 로그가 stop=$0.00 이라고 적습니다. 알파카 쪽 주문 기록도 order_class: "simple", legs: 0 이었습니다(주문 69e14508-…, 확인 뒤 취소).

세 줄 요약

  1. 브래킷은 사람 경로 전용입니다. 24시간 돌리는 경로에서는 한 번도 안 켜집니다
  2. 진입 뒤를 보는 것이 없습니다. 손절 이동·부분 청산·재평가 루프가 코드에 0건이고, close_position 은 사람이 누르는 HTTP 엔드포인트입니다
  3. 기본 설정으로는 아예 주문이 안 나갑니다. 파일럿 기본 게이트는 60%인데 이 도구가 낸 최고 확신도가 50.8% 였습니다 — SKIP MSFT — confidence 50.8% below gate 60.0%. 0.82 곱하기가 게이트 의미까지 바꿔 놓은 셈입니다(화면 60% = LLM 원값 73.2)

33편 예고를 여기서 정정합니다. 지난 편 말미에 이 도구를 「확신도를 크기에 반영하는 설비가 가장 잘 갖춰진 도구」라고 적었습니다. 설비가 많다는 건 맞고, 크기에 반영한다는 건 틀렸습니다. 확신도는 게이트로만 쓰입니다(< 40 이면 건너뜀, --confidence 미만이면 건너뜀). 크기는 자율 경로에서 상수 DEFAULT_POSITION_PCT = 5.0, 사람 경로에서는 risk_level(LOW/MEDIUM/HIGH)로 정해집니다. 확신도가 주수를 깎는 자리는 어느 경로에도 없습니다.

4.4 시나리오 S5-b. 실패한 주문이 성공으로 집계됩니다

BTC-USD 로 게이트를 45까지 내려 주문을 내 봤습니다.

Order failed for BTC-USD: {"message":"code=400, message=invalid symbol: BTC-USD"}
TRADE BTC-USD decision=BUY result=?
PILOT_DONE trades=1 decisions=1

브로커가 400으로 거절했는데 일일 요약은 trades: 1, 상태는 "traded" 입니다 (run_daily_pilot.py:141이 execute_signal 의 반환값을 안 보고 성공으로 적습니다). launchd 로 매일 돌려 놓고 grep TRADE 로 확인하는 사람은 나가지 않은 주문을 나간 걸로 셉니다.

4.5 대시보드는 「연결 안 됨」인데 같은 키로 주문이 나갑니다

/api/alpaca/account 는 null 을 돌려주는데 /api/alpaca/positions 는 실제 포지션을 제대로 읽습니다. 원인은 한 줄 — alpaca_executor.py:86 의 int(account.daytrade_count) 가 알파카에서 온 None 을 받습니다. 그 결과 대시보드에는 「NOT CONNECTED — Set ALPACA_API_KEY … in .env」가 뜹니다. **키는 이미 들어 있고, 같은 프로세스가 주문도 냅니다**

4.6 돌리지 않은 시나리오


5. weltiq 와 연결하기

5-1. 옮긴 것과 우리가 채운 것

도구가 낸 것은 이만큼입니다(BTC-USD, 자율 경로 실측).

도구가 낸 것 값
방향 BUY
확신도 50.8% (LLM 원값 62)
risk_level MEDIUM
확률 up 0.55 / neutral 0.25 / down 0.20
근거 "BTC is trading well above both MA20 and MA50 with strong ADX trend strength and positive MACD momentum, though an RSI near 64 and BB% near 0.86 suggest price is approaching overbought territory, warranting moderate conviction on the upside continuation."
진입가·손절·목표·수량 없음 — models/decision.py 에 칸 자체가 없습니다

빈칸이 둘입니다. 그런데 그 둘을 채우는 코드가 이 저장소 안에 있습니다 — skills/risk_management.py. 자율 진입점만 이 모듈을 안 부릅니다. 그래서 도구 자신의 모듈에 도구 자신의 판단을 넣어 레벨과 수량을 받았습니다. 숫자는 하나도 만들지 않았습니다.

값 출처
손절 기준가 −2.5% _STOP_PCT["MEDIUM"]
목표 기준가 +5.0% _TARGET_PCT["MEDIUM"]
수량 0.02 BTC 위험 $100 ÷ 손절거리, 계좌 20% 상한에 걸려 잘림

여기서 하나 더 드러납니다. 레벨과 크기를 정하는 것은 risk_level(MEDIUM)이고 확신도는 이 계산에 한 번도 안 들어갑니다. 50.8%든 82%든 같은 크기가 나옵니다.

가격 기준만 우리 것을 썼습니다. 도구는 yfinance BTC-USD(84138.4609375)로 값을 매기고 우리는 binance-spot BTCUSDT(84120.005)에서 체결합니다. 절대가를 그대로 옮기면 두 시장의 차이가 같이 넘어오므로 도구의 비율을 우리 호가에 적용했습니다 → 손절 82015.05 · 목표 88323.91.

직접 치고 싶다면
POST /v1/strategy-rules   → doc_hash 128ed65d…
POST /v1/ai/thesis        → {doc_hash, text}   # 근거 없는 규칙은 안 받습니다
POST /v1/containers       → {source:"ai", doc_hash, venue:"binance-spot",
                             symbols:["BTCUSDT"], tf:"1m", balance:"10000",
                             stop_max_loss:"150", stop_after_hours:2}
전체 스크립트는 [`reports/a/34-orallexa/to_weltiq.py`](/news-assets/evidence/a/34-orallexa/to_weltiq.py).

5-2. 체결됐습니다, 그리고 손절이 같이 걸렸습니다 (= S5·S6)

슬롯 상세. ORDERS 칸을 보세요 — buy market 0.02 가 filled 이고, **그 위에 sell (close) stop_market 0.02 가 acked** 로 같이 걸려 있습니다. §4.3 에서 도구가 못 붙인 바로 그것입니다. FILLS 칸의 체결가 84094.41860050, 수수료 1.68188837 USDT

슬롯을 만들고 36초 뒤 체결이 났고, 정지를 걸어 2분 뒤 청산했습니다.

진입 청산
시각 10:49:00.068401 10:51:00.052882
수량·가격 buy 0.02 @ 84094.41860050 sell 0.02 @ 84056.09354950
기대가 84086.01 84064.50
미끄러짐 +8.4086 (1.00bp, 불리) −8.4065 (1.00bp, 불리)
수수료 1.68188837 USDT 1.68112187 USDT

실현손익 −0.7665, 수수료 합계 3.36301024, 잔고 10,000 → 9995.87048874 (−0.0413%). 원장 대사는 matched: true, 고아 인텐트 0.

한 판의 손익은 아무 의미가 없습니다. 여기서 볼 것은 숫자가 아니라 칸이 채워졌다는 사실입니다.

5-3. 이 조합이 해 주는 것과 안 해 주는 것

이 도구 weltiq
방향·근거 냅니다 안 냅니다
손절 레벨 risk_management.py 에 있는데 자율 경로가 안 씀 규칙 문서에 없으면 거절
자율 경로에 브래킷 안 붙습니다 진입과 함께 stop_market 자동
크립토 주문 안 됩니다 (알파카 주식 전용) 24시간
확신도가 크기를 깎나 아니오 아니오 — 옮겨진 수량 그대로입니다
실패한 주문 집계 성공으로 셉니다(§4.4) 거절 사유가 원장에 남습니다

제일 잘 쓰는 법은 이겁니다. 도구를 --dry-run 으로만 돌려 판단 생산기로 쓰고, 레벨·크기·손절 감시·크립토 매핑을 슬롯에 맡깁니다. 알파카 경로는 §4.3·§4.4 를 고치기 전에는 켜 둘 이유가 없습니다.

이 조합이 해 주지 않는 것: 확신도를 크기에 반영하지 않습니다 — 양쪽 다 안 합니다. 그리고 판단을 더 잘 맞히게 해 주지도 않습니다.

실행 구간을 꿰는 실은 이번에도 그대로였습니다. 규칙 문서의 doc_hash 가 백테스트· 페이퍼를 같은 몸으로 지나갑니다. 실전 구간은 아직 열려 있지 않습니다 — 「같은 문서가 그대로 간다」까지가 사실이고 그 뒤는 예정이며, 승격 사다리가 관문입니다.

정리 기록: 슬롯은 정지했고 포지션은 청산해 비었습니다(status: stopped, positions: null). 삭제는 안 됐습니다 — 포지션이 비었는데도 DELETE 가 409 positions_open 을 돌려줍니다. 우리 쪽 알려진 결함이라 억지로 지우지 않고 그대로 남깁니다. 도구 쪽 알파카 주문은 취소했고 계좌에 이 글이 만든 포지션은 없습니다.


6. 써 보니

좋았던 것

아쉬웠던 것

이런 사람에게 맞다 / 안 맞다

맞다 — 확신도·보정 같은 계측 장치를 어떻게 코드로 짜는지 보고 싶은 사람. platt_calibration.py 와 brier_audit.py 는 붙어 있지 않을 뿐 잘 쓰인 코드입니다. 그리고 판단만 받아 자기 실행 층에 붙일 사람.

안 맞다 — README 의 8소스·토론·멀티에이전트를 쓰려는 사람(§2.2). 손절을 도구에 맡기려는 사람(§4.3). 크립토를 거래하려는 사람(주문 경로가 없습니다).


7. 다음 편 예고

다음은 achaljhawar/1rok 입니다. 이 편이 「같은 화면에 확신도가 둘 있고 25포인트 다르다」는 이야기였다면, 다음 편은 「같은 도구 표면이라는 말이 반만 사실인」 물건입니다 — 프롬프트가 모델의 구조화 출력 능력에 따라 세 갈래로 갈립니다. 이번 편에서 진입점 넷이 같은 종목에 다른 답을 내는 것을 봤으니, 그 다음 질문으로 이어집니다.