Platform · 암호화폐 (해외)

비트겟 자동매매 봇 제작

비트겟(Bitget)은 USDT 선물·현물·카피트레이딩에 강점이 있는 글로벌 거래소입니다. Bybit·바이낸스와 유사한 REST + WebSocket 구조로, 알고랩 표준 코드베이스를 그대로 활용해 빠르게 봇을 제작할 수 있습니다.

한 줄 요약

Bitget API v2에서 봇이 실제로 막히는 지점은 셋입니다.인증 헤더가 4개ACCESS-KEY·ACCESS-SIGN·ACCESS-TIMESTAMP·ACCESS-PASSPHRASE(바이낸스·바이비트에는 없는 Passphrase가 추가로 필요). ② 서명은 Base64timestamp + METHOD + requestPath + queryString + bodyHMAC-SHA256으로 만든 뒤 hex가 아니라 Base64로 인코딩합니다. 여기서 틀리면 40009(sign signature error)가 뜹니다. ③ HTTP 200이어도 실패일 수 있습니다 — 응답의 code"00000"일 때만 성공이므로 상태코드만 보고 넘어가면 주문이 안 들어간 걸 모릅니다.

비트겟 자동매매 주요 유형

기술 구조

항목사양
API 문서공식 www.bitget.com/api-doc (v2). 구 bitgetlimited.github.io/apidoc는 v1 문서
인증API Key + Secret + Passphrase + HMAC-SHA256 서명 (Base64 인코딩)
언어Python 3.10+ 64bit, requests / websockets / aiohttp
상품USDT-M 선물, Coin-M 선물, 현물, 카피트레이딩
Rate Limit엔드포인트별 상이 (주문 초당 10~20회 안팎)
WebSocketPublic: 시세·호가·체결 / Private: 주문·체결·잔고
테스트넷demo trading 환경 제공

비트겟 고유 특징 — Passphrase 인증: 비트겟 API는 일반적인 API Key + Secret 외에 Passphrase가 추가로 필요합니다. 알고랩은 이를 안전하게 환경변수로 분리해 운영합니다.

핵심 기능 구성 요소

Bitget API v2는 실제로 어떻게 호출하나

비트겟 봇 제작에서 시간을 가장 많이 잡아먹는 구간은 전략이 아니라 첫 인증입니다. 바이낸스·바이비트를 다뤄 본 사람도 여기서 한 번은 막힙니다. 아래는 실제로 무엇이 다른지입니다.

① 인증 헤더는 4개다 — Passphrase가 추가된다

바이낸스는 X-MBX-APIKEY 하나, 바이비트는 키·타임스탬프·서명 조합이면 되지만, 비트겟은 OKX 계열이라 API Key 생성 시 직접 정한 Passphrase가 헤더로 함께 들어갑니다. 이 값을 잃어버리면 키를 다시 만드는 수밖에 없습니다. 키·시크릿·Passphrase 세 값의 보관 원칙은 API 키 보안과 계좌 보호를 참고하십시오.

헤더
ACCESS-KEYAPI Key
ACCESS-SIGN서명 — Base64 문자열
ACCESS-TIMESTAMP밀리초 단위 유닉스 시각
ACCESS-PASSPHRASE키 생성 시 정한 문구
Content-Typeapplication/json

② 서명은 hex가 아니라 Base64다

공식 문서 기준 서명 대상 문자열은 timestamp + method.toUpperCase() + requestPath + "?" + queryString + body이고, 이것을 secretKeyHMAC-SHA256한 뒤 Base64로 인코딩합니다. 바이비트처럼 hexdigest()를 쓰면 그대로 서명 오류가 납니다.

import base64, hashlib, hmac, json, time, requests

BASE = "https://api.bitget.com"

def sign(secret, timestamp, method, request_path, query="", body=""):
    prehash = timestamp + method.upper() + request_path
    if query:
        prehash += "?" + query
    prehash += body
    mac = hmac.new(secret.encode(), prehash.encode(), hashlib.sha256)
    return base64.b64encode(mac.digest()).decode()      # ★ hex 아님

def headers(api_key, secret, passphrase, method, path, query="", body=""):
    ts = str(int(time.time() * 1000))                    # ★ 밀리초
    return {
        "ACCESS-KEY": api_key,
        "ACCESS-SIGN": sign(secret, ts, method, path, query, body),
        "ACCESS-TIMESTAMP": ts,
        "ACCESS-PASSPHRASE": passphrase,
        "Content-Type": "application/json",
        "locale": "en-US",
    }

함정 — 본문을 두 번 직렬화하면 서명이 어긋납니다. 서명에 넣은 body 문자열과 실제로 전송하는 본문이 한 글자라도 다르면 40009가 납니다. json.dumps()를 서명용으로 한 번, 전송용으로 또 한 번 부르면 공백·키 순서가 달라질 수 있습니다. 문자열을 한 번만 만들어 두 곳에 같은 값을 쓰십시오.

body = json.dumps(payload)            # ★ 한 번만 만든다
h = headers(KEY, SECRET, PASSPHRASE, "POST", path, body=body)
res = requests.post(BASE + path, headers=h, data=body, timeout=10)   # data=body

③ 잔고 조회 — 요청과 응답 실물

path = "/api/v2/mix/account/accounts"
query = "productType=USDT-FUTURES"
h = headers(KEY, SECRET, PASSPHRASE, "GET", path, query=query)
res = requests.get(f"{BASE}{path}?{query}", headers=h, timeout=10)
print(res.json())
{
  "code": "00000",
  "msg": "success",
  "requestTime": 1754700000000,
  "data": [
    { "marginCoin": "USDT", "available": "1000.00", "locked": "0",
      "crossedMaxAvailable": "1000.00", "unrealizedPL": "0" }
  ]
}

④ 선물 주문 — productType을 빼먹지 말 것

path = "/api/v2/mix/order/place-order"
payload = {
    "symbol": "BTCUSDT",
    "productType": "USDT-FUTURES",   # ★ v2에서 필수
    "marginMode": "isolated",
    "marginCoin": "USDT",
    "size": "0.001",
    "side": "buy",
    "orderType": "limit",
    "price": "60000",
    "force": "gtc",
}
body = json.dumps(payload)
h = headers(KEY, SECRET, PASSPHRASE, "POST", path, body=body)
res = requests.post(BASE + path, headers=h, data=body, timeout=10)

data = res.json()
if data.get("code") != "00000":                 # ★ 200이어도 실패일 수 있다
    raise RuntimeError(f"주문 실패: {data.get('code')} {data.get('msg')}")
print(data["data"]["orderId"])

HTTP 200을 성공으로 읽지 마십시오. 비트겟은 요청이 서버에 닿기만 하면 200을 돌려주고, 실제 성패는 본문의 code에 담깁니다. "00000"만 성공입니다. res.raise_for_status()만 걸어 두고 넘어가면 봇은 주문을 넣었다고 믿는데 실제로는 아무것도 안 들어간 상태가 됩니다. 이 확인을 빼먹은 봇은 포지션 수량 계산부터 어긋나기 시작합니다.

⑤ 자주 만나는 에러코드

코드먼저 볼 것
40009sign signature errorBase64 인코딩 여부 · 서명 문자열 순서 · 본문 이중 직렬화
인증 계열키·Passphrase 불일치ACCESS-PASSPHRASE 오타, 데모/실거래 키 혼용
IP 계열허용 IP 밖에서 호출API Key의 IP 화이트리스트에 서버 공인 IP 등록
파라미터 계열필수값 누락productType·marginCoin·marginMode 확인

에러코드의 정확한 목록과 의미는 공식 API 문서에서 최신 값을 확인하십시오. 거래소 에러코드는 버전 전환 시 함께 바뀝니다. 서명 오류를 잡는 절차는 HTX API 서명 오류 5가지와 접근 방식이 같습니다 — 서명 문자열을 그대로 출력해 눈으로 대조하는 것이 가장 빠릅니다.

확인 캐치. 위 서명 방식·헤더·응답 형식은 2026년 8월 9일 기준 비트겟 공식 API 문서(www.bitget.com/api-doc)의 v2 규격을 근거로 정리했습니다. 엔드포인트·파라미터·수수료·호출 한도는 거래소 사정으로 예고 없이 변경될 수 있으므로 구현 전 공식 문서에서 반드시 확인하십시오. 본 페이지는 특정 종목·수익률에 대한 어떤 예측이나 권유도 담고 있지 않습니다.

제작 비용·기간 가이드

유형예상 비용제작 기간
단일 심볼 지표 기반 봇80~150만원7~10일
다중 심볼 + 리스크 관리150~250만원10~14일
그리드 봇 (선물·현물)200~350만원14~20일
카피트레이딩 자동 추종 + 자체 로직300~500만원18~25일
바이낸스·바이비트 차익거래350~600만원21~30일

📖 더 자세히: 비트겟(Bitget) 자동매매 완전 가이드 — API 발급(Passphrase 인증)부터 선물·현물·그리드·카피트레이딩까지 총정리한 글입니다.

자주 묻는 질문

바이비트·바이낸스와 비교해 비트겟이 나은 점은?

카피트레이딩 시장이 활성화되어 있어 다른 트레이더 시그널을 활용한 자동매매가 가능합니다. 수수료도 경쟁력 있고 한국 사용자 가입·인증 절차가 비교적 단순합니다.

Passphrase가 추가로 필요한 이유는?

비트겟은 OKX와 유사한 보안 정책을 사용해 API Key + Secret + Passphrase 3중 인증을 요구합니다. 알고랩은 .env 파일이나 OS 환경변수로 안전 분리합니다.

카피트레이딩 시그널을 봇과 결합할 수 있나요?

API로 카피트레이딩 진입·청산 이벤트를 받아 자체 리스크 로직과 결합한 하이브리드 봇 제작이 가능합니다. 단순 추종이 아닌 '신호 + 본인 필터' 구조 권장.

데모(테스트) 환경에서 검증 가능한가요?

비트겟은 별도 demo trading 계정을 제공해 가상 자금으로 검증 가능합니다. 알고랩 봇은 설정 토글로 demo ↔ 실거래 전환되게 제작합니다.

제작 사례

비트겟 자동매매 제작 사례는 포트폴리오에서 확인하실 수 있습니다.

비트겟 단독·차익거래 모두 상담 가능

카피트레이딩 결합 등 비트겟 고유 활용도 가능합니다.
알고랩이 24시간 빠르게 답변드립니다.

무료 상담 시작하기 요금제 보기