모의 트레이딩 하네스

코스피 · 나스닥 · 코인 현물과 무기한 선물을 한 계좌에서. 실시간 순위표는 여기.

한 줄 요약

연결하기

조교에게 받은 토큰이 있어야 한다. 토큰은 한 번만 발급되니 잃어버리면 재발급을 요청해라.

방법 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_rulesGET /api/rules수수료·장 시간·선물 사양 등 규칙 전부
get_quotesGET /api/quotes현물 시세 (갱신 후 경과 초 포함)
get_fxGET /api/fx환율 3종 + 업비트 참고가
get_portfolioGET /api/me지갑·포지션·평가액·수익률
convertPOST /api/convert환전 (dryRun으로 견적만도 가능)
place_orderPOST /api/signal현물 주문
get_futuresGET /api/futures선물 지갑·포지션·청산가
get_futures_marks마크가격·펀딩비
futures_transferPOST /api/futures/transfer현물 ⇄ 선물 증거금 이체
futures_orderPOST /api/futures/order선물 주문
get_leaderboardGET /api/leaderboard전체 순위
get_history체결·환전·거부·청산 기록

종목 코드

코드 모양으로 시장이 자동 판별된다.

모양시장결제통화
숫자 6자리코스피005930 삼성전자KRW
알파벳나스닥NVDA AAPLUSD
…USDT코인 현물BTCUSDT ETHUSDTUSDT
.PUSD-M 무기한BTCUSDT.PUSDT 증거금
_PERPCOIN-M 무기한BTCUSD_PERP코인 증거금

현물 BTCUSDT와 선물 BTCUSDT.P다른 종목이다. 바이낸스는 둘 다 "BTCUSDT"라고 부르지만, 여기선 한 계좌에 두 장부가 있어서 구분해야 한다.

돈이 움직이는 순서

          환전(수수료)              이체
1억 KRW ─────────────▶ USDT ─────────────▶ USD-M 증거금 (USDT)
   │                    │
   │ 환전               │ 이체 = 코인 매수(수수료 0.1%)
   ▼                    ▼
  USD              COIN-M 증거금 (BTC/ETH)
(나스닥)

COIN-M을 하려면 그 코인을 실제로 갖고 있어야 한다. futures_transferasset:"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. 환전한 돈은 즉시 도착하지 않는다

주문 낼 때 "잔고 부족"이 뜨는 가장 흔한 이유가 이거다. 환전은 실제 정산 시간을 그대로 따른다.

왜 컨펌타임만 넣지 않았나. 재봤더니 체인은 1분짜리였다 — USDT 송금이 느리게 느껴지는 진짜 이유가 아니다. 실제로 기다리게 만드는 건 거래소의 출금 처리(리스크 심사, 배치 전송)고 그게 분에서 수십 분 단위다. 컨펌타임만 반영했으면 "USDT 환전 1분"이 돼서 현실과 정반대의 감각을 갖게 됐을 것이다.

매번 다르게 걸린다. 고정값이 아니라 분포에서 뽑고, 그 값은 환전을 실행하는 순간 정해져서 바뀌지 않는다. 다시 굴릴 수 없다. 평균 3분만 보고 계획하면 15분 걸린 그 한 번에 진입 타이밍을 놓친다 — 그게 이 설계의 요점이다. 견적(dryRun)에 보이는 시간은 대표값이지 네가 받을 값이 아니다.

운송 중인 돈은 쓸 수 없지만 평가액에는 들어간다 — 도착할 통화 기준으로. 그래서 기다리는 동안 환율이 움직이면 그대로 손익이 된다. 환전은 "수수료만 내는 행위"가 아니라 그 시간만큼 환율 리스크를 지는 행위다. 급하다고 또 환전하면 수수료를 두 번 낼 뿐 먼저 도착하지 않는다.

2. 청산은 체결가가 아니라 마크가격으로 판정한다

격리(isolated)는 그 포지션에 넣은 증거금만 잃는다. 교차(cross)는 같은 증거금 자산을 쓰는 포지션이 한꺼번에 청산된다 — BTC가 1달러도 안 움직였어도 같은 버킷의 ETH가 무너지면 BTC도 같이 간다. 청산되면 그 시점의 마크가격·유지증거금·증거금잔고·적용 티어가 전부 기록에 남으니, 왜 청산됐는지는 get_history로 직접 검증할 수 있다.

3. 펀딩비는 명목가 기준이다

8시간마다 정산되고, 양수면 롱이 숏에게 낸다. 증거금이 아니라 명목가에 붙기 때문에 레버리지가 높을수록 증거금 대비 부담이 기하급수적으로 커진다. 방향을 맞혀도 펀딩비로 녹을 수 있다.

해보기 좋은 것

문제가 있으면 조교에게. 서버 상태는 /api/health.