모의 트레이딩 하네스
코스피 · 나스닥 · 코인 현물과 무기한 선물을 한 계좌에서. 실시간 순위표는 여기.
한 줄 요약
- 가입하면 1억 원(KRW)을 받는다. 그게 전부다.
- 코스피는 KRW, 나스닥은 USD, 코인은 USDT로만 거래된다. 다른 시장에 가려면 환전해야 하고, 환전에는 수수료가 붙는다.
- 순위는 시장 구분 없이 원화로 환산한 총자산 하나로 매긴다.
- 시세는 전부 진짜다. 환율도 진짜고, 선물 청산도 바이낸스 실제 유지증거금 테이블을 그대로 쓴다.
연결하기
조교에게 받은 토큰이 있어야 한다. 토큰은 한 번만 발급되니 잃어버리면 재발급을 요청해라.
방법 1 — MCP (권장)
에이전트가 도구로 직접 쓴다. 터미널에서 한 줄:
claude mcp add --transport http paper \
https://ssu-vibecoding-pnl-rank.lazzy.chat/mcp \
--header "Authorization: Bearer 여기에_네_토큰"
붙었으면 에이전트에게 그냥 말하면 된다 — "지금 내 포트폴리오 보여줘", "비트코인 0.1개 사줘",
"5천만 원을 USDT로 바꿔줘". 규칙을 모르면 에이전트가 get_rules부터 읽는다.
토큰은 비밀이다. 이 토큰 하나로 네 계좌의 모든 주문을 넣을 수 있다. 코드에 하드코딩해서 깃허브에 올리지 마라 — 남이 네 계좌를 청산시킬 수 있다.
방법 2 — HTTP API
직접 짜고 싶으면 REST도 열려 있다. 모든 경로에 Authorization: Bearer <토큰>이 필요하다.
BASE=https://ssu-vibecoding-pnl-rank.lazzy.chat
curl -s $BASE/api/me -H "Authorization: Bearer $TOKEN"
curl -s -X POST $BASE/api/signal -H "Authorization: Bearer $TOKEN" \
-H 'content-type: application/json' \
-d '{"symbol":"BTCUSDT","side":"buy","qty":0.1}'
도구 / 엔드포인트
| MCP 도구 | HTTP | 하는 일 |
|---|---|---|
get_rules | GET /api/rules | 수수료·장 시간·선물 사양 등 규칙 전부 |
get_quotes | GET /api/quotes | 현물 시세 (갱신 후 경과 초 포함) |
get_fx | GET /api/fx | 환율 3종 + 업비트 참고가 |
get_portfolio | GET /api/me | 지갑·포지션·평가액·수익률 |
convert | POST /api/convert | 환전 (dryRun으로 견적만도 가능) |
place_order | POST /api/signal | 현물 주문 |
get_futures | GET /api/futures | 선물 지갑·포지션·청산가 |
get_futures_marks | — | 마크가격·펀딩비 |
futures_transfer | POST /api/futures/transfer | 현물 ⇄ 선물 증거금 이체 |
futures_order | POST /api/futures/order | 선물 주문 |
get_leaderboard | GET /api/leaderboard | 전체 순위 |
get_history | — | 체결·환전·거부·청산 기록 |
종목 코드
코드 모양으로 시장이 자동 판별된다.
| 모양 | 시장 | 예 | 결제통화 |
|---|---|---|---|
| 숫자 6자리 | 코스피 | 005930 삼성전자 | KRW |
| 알파벳 | 나스닥 | NVDA AAPL | USD |
| …USDT | 코인 현물 | BTCUSDT ETHUSDT | USDT |
| ….P | USD-M 무기한 | BTCUSDT.P | USDT 증거금 |
| …_PERP | COIN-M 무기한 | BTCUSD_PERP | 코인 증거금 |
현물 BTCUSDT와 선물 BTCUSDT.P는 다른 종목이다.
바이낸스는 둘 다 "BTCUSDT"라고 부르지만, 여기선 한 계좌에 두 장부가 있어서 구분해야 한다.
돈이 움직이는 순서
환전(수수료) 이체
1억 KRW ─────────────▶ USDT ─────────────▶ USD-M 증거금 (USDT)
│ │
│ 환전 │ 이체 = 코인 매수(수수료 0.1%)
▼ ▼
USD COIN-M 증거금 (BTC/ETH)
(나스닥)
COIN-M을 하려면 그 코인을 실제로 갖고 있어야 한다. futures_transfer로
asset:"BTC"를 넣으면 USDT로 BTC를 사서 증거금 지갑에 넣어준다. 역방향 계약은
코인으로 증거금을 넣고 코인으로 정산받는 계약이라 그렇다.
자주 보게 될 거부 메시지
거부는 실패가 아니라 설명이다. 그대로 읽고 고쳐서 다시 보내면 된다. 모든 거부는 기록에 남으니
get_history로 확인할 수 있다.
| 메시지 | 뜻 |
|---|---|
| 코스피 장이 닫혀 있습니다 | 코스피 09:00–15:30, 나스닥 23:30–06:00(한국시각, 서머타임에 따라 이동), 코인은 24시간. |
| USDT 잔고가 부족합니다 … 환전(convert)으로 … | 그 시장의 통화가 없다. 먼저 환전해라. |
| … 시세가 N초 지났습니다 (체결 보류) | 120초 넘은 시세로는 체결하지 않는다. 잠시 뒤 다시. |
| 한도를 넘습니다 … | 현물은 레버리지가 없다. 총 포지션이 총자산을 넘을 수 없다. |
| 코스피는 공매도 불가입니다 | 개인 공매도는 현실적으로 불가능하므로 규칙으로도 막는다. |
| 레버리지는 1~N배입니다 | 상한은 포지션 크기 구간마다 다르다. 크게 잡을수록 낮아진다. |
| 교차 증거금이 부족합니다 … | 교차도 개시증거금이 필요하다. 버킷 전체 기준으로 계산된다. |
알아둘 것 세 가지
1. 환전은 공짜가 아니고, 왕복은 더 비싸다
KRW↔USD 편도 0.90%, USD↔USDT 편도 0.15%. KRW↔USDT는 두 다리를 다 건너므로 1.05%다. USD를 거쳐 손으로 돌려도 결과는 소수점까지 똑같다 — 경로로 아낄 수 있는 건 없다. 1억을 한 바퀴 돌리면 약 2%가 사라진다. 시장을 자주 갈아타는 전략은 그 비용을 이겨야 한다.
업비트 실거래가는 왜 표시만 하냐? 대시보드에 업비트 KRW-USDT 시세와 우리 환율의 괴리(김치프리미엄)가 보이는데, 그건 참고용이고 환전 상대가 아니다. 환전 환율은 독립 소스 두 개(한투 USD/KRW, 크라켄 USDT/USD)에서만 만들고 나머지는 그 곱으로 유도한다. 그래서 어떤 경로로 환전을 돌려도 수수료 전에는 정확히 1배이고, 무위험 차익이 수학적으로 존재하지 않는다. 찾느라 시간 쓰지 마라.
1-2. 환전한 돈은 즉시 도착하지 않는다
주문 낼 때 "잔고 부족"이 뜨는 가장 흔한 이유가 이거다. 환전은 실제 정산 시간을 그대로 따른다.
- KRW ↔ USD — T+1 영업일. 다음 영업일 09:00 KST에 들어온다. 금요일 오후에 환전하면 월요일 아침이다 (65시간). 주말·공휴일은 건너뛴다.
- USD ↔ USDT — 거래소 출금 처리 + 온체인 컨펌. 체인은 트론(TRC-20) 19컨펌 × 3초 = 57초로 거의 고정이다. 정작 기다리는 건 거래소 쪽 출금 처리고, 보통 3분, 스무 번에 한 번은 15분, 최대 30분이다.
- KRW → USDT는 두 다리를 순서대로 탄다. 먼저 T+1을 기다리고, 그 다음에 USDT 다리를 탄다. 금요일에 걸면 월요일 09시 몇 분이다.
왜 컨펌타임만 넣지 않았나. 재봤더니 체인은 1분짜리였다 — USDT 송금이 느리게 느껴지는 진짜 이유가 아니다. 실제로 기다리게 만드는 건 거래소의 출금 처리(리스크 심사, 배치 전송)고 그게 분에서 수십 분 단위다. 컨펌타임만 반영했으면 "USDT 환전 1분"이 돼서 현실과 정반대의 감각을 갖게 됐을 것이다.
매번 다르게 걸린다. 고정값이 아니라 분포에서 뽑고, 그 값은 환전을 실행하는 순간 정해져서 바뀌지 않는다.
다시 굴릴 수 없다. 평균 3분만 보고 계획하면 15분 걸린 그 한 번에 진입 타이밍을 놓친다 — 그게 이 설계의 요점이다.
견적(dryRun)에 보이는 시간은 대표값이지 네가 받을 값이 아니다.
운송 중인 돈은 쓸 수 없지만 평가액에는 들어간다 — 도착할 통화 기준으로. 그래서 기다리는 동안 환율이 움직이면 그대로 손익이 된다. 환전은 "수수료만 내는 행위"가 아니라 그 시간만큼 환율 리스크를 지는 행위다. 급하다고 또 환전하면 수수료를 두 번 낼 뿐 먼저 도착하지 않는다.
2. 청산은 체결가가 아니라 마크가격으로 판정한다
격리(isolated)는 그 포지션에 넣은 증거금만 잃는다. 교차(cross)는 같은 증거금 자산을 쓰는 포지션이
한꺼번에 청산된다 — BTC가 1달러도 안 움직였어도 같은 버킷의 ETH가 무너지면 BTC도 같이 간다.
청산되면 그 시점의 마크가격·유지증거금·증거금잔고·적용 티어가 전부 기록에 남으니,
왜 청산됐는지는 get_history로 직접 검증할 수 있다.
3. 펀딩비는 명목가 기준이다
8시간마다 정산되고, 양수면 롱이 숏에게 낸다. 증거금이 아니라 명목가에 붙기 때문에 레버리지가 높을수록 증거금 대비 부담이 기하급수적으로 커진다. 방향을 맞혀도 펀딩비로 녹을 수 있다.
해보기 좋은 것
- 아무것도 하지 않고 하루 두면 순위가 어떻게 되는지. (아무 일도 안 일어난다 — 그게 기준선이다.)
- 1억을 USDT로 바꿨다가 도로 KRW로 바꿔보기. 얼마가 사라지는지 직접 보기.
- 같은 크기 포지션을
BTCUSDT.P(선형)와BTCUSD_PERP(역방향)로 동시에 열고, 가격이 10% 오를 때와 10% 내릴 때 손익이 어떻게 다른지 비교하기. - 격리 20배와 교차 20배를 같이 열어놓고 어느 쪽이 먼저 죽는지 보기. 일부러 청산당해보는 게 가장 싸게 배우는 방법이다.
문제가 있으면 조교에게. 서버 상태는 /api/health.