α Alphaware
TECH

파이썬 코인 자동매매 시작하기: 바이낸스 API 입문

파이썬과 바이낸스 API로 코인 자동매매 시스템을 만드는 첫걸음입니다. 계좌 연결부터 시세 조회, 첫 주문까지 단계별로 설명합니다.

파이썬 코인 자동매매 시작하기: 바이낸스 API 입문

왜 코인 자동매매인가

코인 시장은 24시간 365일 열려 있습니다. 사람이 계속 차트를 볼 수는 없지만, 프로그램은 가능합니다.

자동매매의 장점은 세 가지입니다.

  • 감정 제거: 공포에 팔고 탐욕에 사는 실수를 방지
  • 24시간 모니터링: 새벽에도 규칙대로 매매
  • 백테스트 가능: 전략을 과거 데이터로 검증

파이썬 + 바이낸스 API 조합이 가장 진입장벽이 낮습니다. 무료이고, 문서가 잘 되어 있고, 한국어 자료도 많습니다.


준비물

  1. 파이썬 3.10+ 설치
  2. 바이낸스 계좌 + API 키 발급
  3. python-binance 라이브러리
pip install python-binance pandas

바이낸스 API 키 발급

  1. 바이낸스 로그인 → 계정 관리 → API 관리
  2. “API 생성” 클릭 → 이름 입력
  3. API 키시크릿 키 저장

보안 필수 설정:

  • IP 제한: 내 컴퓨터 IP만 허용
  • 출금 권한: 절대 켜지 마세요
  • 스팟 거래만 허용 (처음에는 선물 끄세요)

기본 연결

from binance.client import Client

api_key = "여기에_API_키"
api_secret = "여기에_시크릿_키"

client = Client(api_key, api_secret)

# 연결 확인
info = client.get_account()
print(f"계좌 상태: {info['canTrade']}")
print(f"보유 자산:")
for asset in info['balances']:
    free = float(asset['free'])
    if free > 0:
        print(f"  {asset['asset']}: {free}")

시세 조회

현재가

# 비트코인 현재가
ticker = client.get_symbol_ticker(symbol="BTCUSDT")
print(f"BTC 현재가: ${ticker['price']}")

캔들 데이터 (OHLCV)

import pandas as pd

# 최근 100개 1시간봉
klines = client.get_klines(symbol="BTCUSDT", interval="1h", limit=100)

df = pd.DataFrame(klines, columns=[
    'open_time', 'open', 'high', 'low', 'close', 'volume',
    'close_time', 'quote_volume', 'trades',
    'taker_buy_base', 'taker_buy_quote', 'ignore'
])

# 숫자 변환
for col in ['open', 'high', 'low', 'close', 'volume']:
    df[col] = df[col].astype(float)

df['open_time'] = pd.to_datetime(df['open_time'], unit='ms')
print(df[['open_time', 'close', 'volume']].tail())

간단한 전략 만들기

이동평균 교차 전략입니다. 20일 이동평균이 50일 위로 가면 매수, 아래로 가면 매도합니다.

def check_signal(df):
    """이동평균 교차 신호 확인"""
    df['ma20'] = df['close'].rolling(20).mean()
    df['ma50'] = df['close'].rolling(50).mean()

    latest = df.iloc[-1]
    prev = df.iloc[-2]

    # 골든크로스: 매수
    if prev['ma20'] <= prev['ma50'] and latest['ma20'] > latest['ma50']:
        return "BUY"
    # 데드크로스: 매도
    elif prev['ma20'] >= prev['ma50'] and latest['ma20'] < latest['ma50']:
        return "SELL"
    else:
        return "HOLD"

signal = check_signal(df)
print(f"현재 신호: {signal}")

주문 실행

시장가 매수

# 0.001 BTC 시장가 매수 (약 $70 정도)
order = client.create_order(
    symbol='BTCUSDT',
    side='BUY',
    type='MARKET',
    quantity=0.001
)
print(f"주문 완료: {order['orderId']}")
print(f"체결가: {order['fills'][0]['price']}")

시장가 매도

order = client.create_order(
    symbol='BTCUSDT',
    side='SELL',
    type='MARKET',
    quantity=0.001
)

주의: 실제 돈이 들어갑니다. 처음에는 반드시 최소 수량으로 테스트하세요. 바이낸스 테스트넷(testnet)을 먼저 사용하는 것을 강력 추천합니다.


자동 실행 루프

매 시간마다 신호를 확인하고 매매하는 루프입니다.

import time

def run_bot():
    """1시간마다 실행되는 트레이딩 봇"""
    while True:
        try:
            # 1. 데이터 가져오기
            klines = client.get_klines(
                symbol="BTCUSDT", interval="1h", limit=100
            )
            df = pd.DataFrame(klines, columns=[...])  # 위와 동일
            for col in ['open', 'high', 'low', 'close', 'volume']:
                df[col] = df[col].astype(float)

            # 2. 신호 확인
            signal = check_signal(df)
            price = float(df.iloc[-1]['close'])
            print(f"[{time.strftime('%H:%M')}] BTC: ${price:.0f} | 신호: {signal}")

            # 3. 매매 실행
            if signal == "BUY":
                # 실전에서는 포지션 확인 후 매수
                print("→ 매수 신호!")
            elif signal == "SELL":
                print("→ 매도 신호!")

        except Exception as e:
            print(f"에러: {e}")

        # 1시간 대기
        time.sleep(3600)

# run_bot()  # 주석 해제하면 실행

반드시 지켜야 할 것

소액으로 시작

처음에는 전체 자본의 5% 이하로 테스트하세요. 전략이 실전에서도 통하는지 확인하는 기간이 필요합니다.

API 키 보안

API 키를 코드에 직접 넣지 마세요. 환경변수나 별도 파일로 관리하세요.

import os
api_key = os.environ.get('BINANCE_API_KEY')
api_secret = os.environ.get('BINANCE_API_SECRET')

에러 처리

네트워크 오류, API 제한, 잔액 부족 등 예외 상황을 반드시 처리해야 합니다. 에러가 나면 주문을 멈추는 것이 주문을 계속 시도하는 것보다 안전합니다.

백테스트 먼저

실전 자금을 투입하기 전에 반드시 과거 데이터로 전략을 검증하세요. 백테스트에서 수익이 나야 실전에서도 가능성이 있습니다.


다음 단계

이 가이드는 가장 기본적인 구조입니다. 여기서 발전시킬 방향은 여러 가지입니다.

  • 손절/익절 로직 추가 (리스크 관리의 핵심)
  • 여러 코인 동시 모니터링
  • 텔레그램 알림 연동 (매매 시 알림)
  • 백테스트 프레임워크 구축 (Backtrader, Vectorbt)
  • 선물 거래 확장 (레버리지, 양방향 매매)

자동매매는 코딩보다 전략 검증이 더 중요합니다. 좋은 코드보다 좋은 전략이 먼저입니다.


바이낸스 가입하기 — 이 링크로 가입하면 거래 수수료 할인이 적용됩니다.

#파이썬 #자동매매 #바이낸스 #API #트레이딩봇

Newsletter

주간 퀀트·마켓 인사이트 구독

시장 분석, 퀀트 전략 아이디어, AI·데이터 도구 인사이트를 이메일로 받아보세요.

구독하기 →
같은 카테고리 더 보기 TECH →