[실무 강의] **파이썬 API로 구현하는 초간단 코인/주식 자동매매: 목표가 도달 시 1회 자동 매수 봇** 완벽 마스터 튜토리얼

1. 학습 목표: 감정을 배제한 기계적 매매의 첫걸음

2026년 현재, 가상자산과 주식 시장은 변동성이 극대화되어 사람이 24시간 차트를 모니터링하며 대응하는 것은 불가능에 가깝습니다. 이번 강의의 목표는 파이썬(Python)을 활용하여 사용자가 설정한 목표 가격에 도달하는 순간, 단 1초의 지체 없이 자동으로 매수 주문을 실행하는 봇을 제작하는 것입니다.

단순히 코드를 복사하는 것에 그치지 않고, API를 통해 거래소와 통신하는 원리, 무한 루프를 통한 실시간 시세 감시, 그리고 조건 충족 시 주문 후 프로그램을 안전하게 종료하는 실무 로직을 완벽하게 이해하게 될 것입니다. 이 봇은 ‘일회성 실행’ 모델로 설계되어, 중복 매수 위험을 방지하고 정확히 원하는 타점에서만 진입하도록 돕습니다.

2. [사전 준비 사항]

실습을 시작하기 전, 다음의 개발 환경이 갖춰져 있어야 합니다. 본 튜토리얼은 가상자산 거래소인 ‘업비트(Upbit)’ API를 기준으로 설명하지만, 로직은 다른 거래소(바이낸스, 한국투자증권 등)에도 동일하게 적용 가능합니다.

  • 운영체제(OS): Windows 10/11, macOS, 또는 Linux (Ubuntu 22.04+)
  • 개발 도구: Visual Studio Code (VS Code) 최신 버전 권장
  • 언어 버전: Python 3.11 또는 3.12 (2026년 기준 가장 안정적인 버전)
  • 필수 라이브러리 설치: 터미널(Terminal)에서 아래 명령어를 입력하여 설치하세요.
    pip install pyupbit pandas python-dotenv
  • API 키 발급: 업비트 개발자 센터에서 Access KeySecret Key를 발급받아야 합니다. (IP 화이트리스트 설정 필수)

3. 단계별 실습 과정

Step 1: API 키 보안 관리 및 환경 설정

소스코드 내에 API 키를 직접 입력하는 것은 매우 위험합니다. .env 파일을 만들어 키를 별도로 관리하는 습관을 들여야 합니다. 프로젝트 루트 폴더에 .env 파일을 생성하고 다음과 같이 입력하세요.

UPBIT_ACCESS_KEY='자신의_액세스_키'
UPBIT_SECRET_KEY='자신의_시크릿_키'

Step 2: 기본 라이브러리 임포트 및 로그인

이제 파이썬 파일(auto_buy.py)을 생성하고 API에 접속하기 위한 기초 코드를 작성합니다.

import os
import time
import pyupbit
from dotenv import load_dotenv

# 환경 변수 로드
load_dotenv()
access = os.getenv('UPBIT_ACCESS_KEY')
secret = os.getenv('UPBIT_SECRET_KEY')

# 업비트 객체 생성
upbit = pyupbit.Upbit(access, secret)
print("거래소 연결 성공!")

Step 3: 실시간 시세 조회 및 비교 로직 설계

자동매매의 핵심은 ‘감시’입니다. while 문을 사용하여 특정 코인의 현재가를 무한정 가져오고, 우리가 설정한 target_price와 비교하는 로직이 필요합니다.

이때 중요한 점은 API 호출 제한(Rate Limit)을 피하기 위해 적절한 time.sleep()을 주는 것입니다. 2026년의 고성능 서버 환경에서도 초당 10회 이상의 과도한 호출은 차단 사유가 될 수 있습니다.

Step 4: 목표가 도달 시 매수 및 루프 탈출

목표가에 도달하면 upbit.buy_market_order() 함수를 호출하여 시장가 매수를 진행합니다. 매수가 성공하면 break를 통해 프로그램을 종료하여 중복 매수를 방지합니다.

# 매수 설정 변수
ticker = "KRW-BTC"  # 매수할 코인 (예: 비트코인)
target_price = 100000000  # 목표가 (예: 1억 원)
buy_amount = 10000  # 매수 금액 (예: 1만 원)

print(f"{ticker} 감시 시작... 목표가: {target_price}원")

while True:
    try:
        # 현재가 조회
        current_price = pyupbit.get_current_price(ticker)
        
        if current_price is None:
            print("가격을 가져오지 못했습니다. 재시도 중...")
            time.sleep(1)
            continue

        print(f"현재가: {current_price}원 | 목표가: {target_price}원")

        # 목표가 도달 여부 확인
        if current_price >= target_price:
            print("목표가 도달! 매수를 진행합니다.")
            # 시장가 매수 실행
            res = upbit.buy_market_order(ticker, buy_amount)
            print("매수 결과:", res)
            break  # 1회 매수 후 프로그램 종료
        
        time.sleep(0.5)  # 0.5초 간격으로 체크

    except Exception as e:
        print(f"에러 발생: {e}")
        time.sleep(1)

4. 전체 소스코드 통합 예제

위의 단계들을 하나로 묶은 최종 완성본 코드입니다. 이 코드를 복사하여 바로 실행할 수 있습니다.

import os
import time
import pyupbit
from dotenv import load_dotenv

# 1. 환경 설정 및 로그인
load_dotenv()
upbit = pyupbit.Upbit(os.getenv('UPBIT_ACCESS_KEY'), os.getenv('UPBIT_SECRET_KEY'))

# 2. 파라미터 설정
TICKER = "KRW-ETH"   # 대상 종목: 이더리움
TARGET_PRICE = 5500000 # 목표 매수가
BUY_CASH = 5000        # 매수 금액 (KRW)

def start_bot():
    print(f"=== {TICKER} 자동 매수 봇 가동 ===")
    print(f"목표가: {TARGET_PRICE} / 매수금액: {BUY_CASH}")

    while True:
        try:
            curr_price = pyupbit.get_current_price(TICKER)
            if curr_price is None: continue

            if curr_price >= TARGET_PRICE:
                # 매수 주문
                order = upbit.buy_market_order(TICKER, BUY_CASH)
                if order:
                    print(f"[체결 완료] {TICKER}를 {curr_price}원에 {BUY_CASH}원만큼 매수하였습니다.")
                    print("주문 상세:", order)
                    break
            
            # 로그 출력 (선택 사항)
            print(f"실시간 시세: {curr_price}원... 대기 중")
            time.sleep(1)

        except Exception as err:
            print(f"시스템 오류: {err}")
            time.sleep(2)

if __name__ == "__main__":
    start_bot()

5. 결과 확인 및 주의 사항

코드를 실행하면 터미널 창에 실시간으로 시세가 출력되며, 가격이 TARGET_PRICE를 상향 돌파하는 순간 즉시 매수 주문이 나갑니다.

결과 확인 방법

  1. 로그 확인: 터미널에 [체결 완료] 메시지와 함께 JSON 형태의 주문 결과가 출력되는지 확인합니다.
  2. 거래소 앱 확인: 업비트 앱의 ‘투자내역’ 또는 ‘주문가능’ 탭에서 실제로 해당 종목이 매수되었는지 확인합니다.

실무 활용 팁 및 주의 사항

  • 최소 주문 금액: 업비트의 경우 최소 주문 금액은 5,000원입니다. BUY_CASH를 이보다 낮게 설정하면 에러가 발생합니다.
  • 슬리피지(Slippage): 시장가 매수의 경우 변동성이 극심할 때 설정한 가격보다 약간 높은 가격에 체결될 수 있습니다.
  • 네트워크 안정성: 서버(AWS, GCP 등)를 활용하여 24시간 구동하는 것이 끊김 없는 매매에 유리합니다.
  • 테스트 매수: 처음에는 5,000원 정도의 소액으로 코드가 정상 작동하는지 반드시 테스트한 후 큰 금액을 운용하시기 바랍니다.

이것으로 파이썬 API를 활용한 목표가 도달 시 1회 자동 매수 봇 제작 강의를 마칩니다. 이 기초 로직을 바탕으로 이동평균선 돌파, RSI 지표 활용 등 자신만의 전략을 추가하여 더욱 고도화된 자동매매 시스템을 구축해 보시기 바랍니다.

댓글 남기기