본문 바로가기
카테고리 없음

파이썬으로 주식 자동매매 시작하기

by 2022025 2025. 5. 29.

파이썬은 데이터 분석, 웹 개발뿐 아니라 주식 자동매매 분야에서도 아주 강력한 도구예요. 간단한 코드만으로 조건에 따라 자동으로 매수·매도를 실행하고, 수익률까지 추적할 수 있죠.

 

특히 키움증권의 OpenAPI+를 활용하면, 실시간 시세 수신, 자동 주문, 체결 확인까지 모두 자동화가 가능해요. 다른 증권사 API도 있지만, 가장 많이 활용되는 건 여전히 키움이랍니다.

 

이 글에서는 파이썬으로 주식 자동매매를 시작하기 위해 필요한 모든 것을 A부터 Z까지 정리해드릴게요. 기본적인 설정부터, 실전 매매 코드 작성, 예외 처리, 리스크 관리까지 차근차근 알려드릴게요.

 

그럼 지금부터 파이썬 주식 자동매매 세계로 함께 들어가 볼까요? 🐍📊

🐍 파이썬 자동매매란?

파이썬 자동매매는 사람이 직접 주식 주문을 넣지 않아도, 미리 설정한 조건과 전략에 따라 컴퓨터가 자동으로 매매를 실행해주는 시스템이에요. 단순히 매수/매도만 반복하는 게 아니라, 실시간으로 시장을 감시하고 전략에 맞춰 행동해요.

 

예를 들어 “삼성전자의 RSI가 30 아래로 내려가면 10주 매수하고, 5% 이상 수익 시 매도” 같은 전략을 파이썬 코드로 구현하면, 봇이 매일 자동으로 해당 조건을 체크하고 매매를 실행하게 되죠. 사용자는 차트를 지켜볼 필요도 없어요.

 

이 시스템은 증권사 API를 통해 실시간 시세, 주문 실행, 체결 정보 등을 받아오고, 파이썬으로 전략 로직을 구현해서 자동으로 처리해요. 국내에서는 주로 키움 OpenAPI+를 사용하고, 해외에선 Alpaca, IBKR API 등이 유명하답니다.

 

파이썬은 배우기 쉬운 언어이면서도 강력한 기능을 갖춘 만큼, 초보자도 쉽게 접근할 수 있어요. 데이터 분석에 특화된 라이브러리들과 결합하면 자동매매 봇을 아주 똑똑하게 만들 수 있답니다.

 

내가 생각했을 때, 파이썬 자동매매의 진짜 매력은 '감정 없이' 매매를 반복할 수 있다는 점이에요. 투자에 있어 가장 큰 적은 '욕심'과 '두려움'이죠. 파이썬 봇은 오직 코드에만 충실하기 때문에 계획한 대로만 매매할 수 있어요.

 

또한 파이썬 자동매매는 단순 반복을 넘어서 데이터 기반 예측도 가능해요. 머신러닝, 시계열 분석, 뉴스 감성분석 같은 기능을 넣으면 봇이 시장의 흐름을 예측하고 더 정교한 전략을 실행할 수도 있어요.

 

요즘은 클라우드 서버에 자동매매 프로그램을 올려 24시간 켜놓고 실시간 주문을 처리하는 방식도 많아요. AWS, Google Cloud 같은 플랫폼을 이용하면 PC를 끄고도 매매가 계속되니 정말 편리해요.

 

단, 파이썬 자동매매는 마법 도구가 아니에요. 잘못된 전략을 짜면 손해도 똑같이 반복된다는 점을 꼭 기억해야 해요. 그래서 전략 설계, 충분한 테스트, 에러 처리가 매우 중요하답니다.

 

정리하면, 파이썬 자동매매는 누구나 시작할 수 있지만, 성공적으로 활용하려면 프로그래밍뿐 아니라 투자 원칙과 리스크 관리까지 겸비해야 하는 고급 기술이에요. 하지만 제대로 배우면 정말 강력한 무기가 되어줄 수 있어요!

⚙️ 파이썬 자동매매 개요 요약

항목 설명 장점
기반 언어 Python 3.x 쉽고 직관적
API 연동 증권사 OpenAPI 실시간 시세·주문
자동매매 조건식 기반 자동 매수/매도 감정 배제 가능
활용 범위 국내외 주식, ETF, 암호화폐 전략 확장성 높음

 

다음 섹션에서는 파이썬 자동매매를 위해 필요한 개발환경과 필수 라이브러리들을 알려드릴게요! 🧰

🧰 개발환경 및 필수 라이브러리

파이썬으로 주식 자동매매를 시작하려면 먼저 필요한 개발 도구와 라이브러리들을 준비해야 해요. 이 단계에서 환경을 잘 구성해두면 이후 코딩이 훨씬 수월해지니 꼼꼼하게 따라와 주세요.

 

우선 파이썬 설치가 가장 먼저예요. 공식 홈페이지(https://www.python.org)에서 Python 3.10 이상 버전을 다운로드하고 설치해 주세요. 설치 시 'Add Python to PATH' 체크도 잊지 말아요.

 

그다음은 개발 도구(IDE)예요. 대표적으로 Visual Studio CodePyCharm이 많이 쓰여요. 둘 다 무료 버전이 있으니 마음에 드는 걸 선택하면 돼요. 설치 후에는 파이썬 확장팩을 꼭 추가해 주세요.

 

이제 필수 파이썬 패키지를 설치해야 해요. 다음 명령어를 입력하면 자동으로 관련 라이브러리가 설치돼요.

pip install pykiwoom pandas numpy pyqt5 schedule requests

 

설명이 필요할 수도 있으니 아래에 간단히 정리할게요:

  • pykiwoom: 키움증권 API를 파이썬으로 제어하기 위한 라이브러리예요.
  • pandas / numpy: 데이터 분석과 계산에 필수인 패키지예요.
  • pyqt5: 키움 API가 윈도우 기반 GUI 환경을 요구하므로 설치해야 해요.
  • schedule: 일정 시간마다 반복 실행을 쉽게 도와주는 도구예요.

 

다음으로는 키움 OpenAPI+ 설치예요. 키움증권 홈페이지에서 영웅문4를 설치하고, 로그인한 후 OpenAPI 설치파일도 따로 받아 설치해 주세요. 이후 실행 시 '관리자 권한'으로 실행하는 것이 중요해요.

 

그 외에도 공인인증서모의투자 계좌가 있어야 테스트할 수 있어요. 키움 홈페이지에서 모의투자 신청을 하면 별도의 계좌번호가 부여되고, 로그인도 별도로 해야 해요.

 

개발 중에는 윈도우 환경이 가장 안정적이에요. 키움 API는 윈도우 전용 ActiveX 기반이라, Mac이나 리눅스에서는 직접 실행이 어렵고, 클라우드에 윈도우 서버를 세팅해야 해요.

 

마지막으로, 반복 실행과 자동화를 위해 작업 스케줄러(Task Scheduler)를 활용해 봇을 매일 정해진 시간에 자동 실행되게 만들 수 있어요. 또는 schedule 라이브러리로 파이썬 안에서 타이머를 설정할 수도 있어요.

 

이제 모든 준비가 완료됐어요! 본격적으로 API와 파이썬을 연동해서 실시간 데이터를 받아오고, 주문도 넣어볼 준비가 되었어요 🔗

🔧 개발 환경 준비 요약표

항목 설명 비고
Python 3.10 이상 버전 권장 공식 홈페이지 설치
IDE VS Code / PyCharm 파이썬 확장 필요
필수 라이브러리 pykiwoom, pandas 등 pip로 설치
OpenAPI+ 키움 영웅문 + API 설치 윈도우 전용

 

이제 본격적으로 키움 API와 파이썬을 연결해서 실제 주식 데이터에 접근해보는 🔗 키움 API 연동 방법 섹션으로 넘어가볼게요!

🔗 키움 API 연동 방법

이제 파이썬과 키움증권 API를 연결해 실제 주식 정보를 받아오고 주문까지 실행할 수 있도록 설정해볼게요. 이 과정은 자동매매 봇의 핵심 중 하나이며, 처음에만 잘 구축해두면 이후에는 반복해서 쉽게 활용할 수 있어요.

 

키움 API는 OpenAPI+라는 이름으로 제공되며, ActiveX 방식으로 작동하기 때문에 반드시 Windows 환경에서 관리자 권한으로 실행해야 해요.

 

먼저, 파이썬에서 키움 API를 제어하려면 pykiwoom 패키지를 사용해요. 이 패키지는 복잡한 COM 객체를 간단하게 다룰 수 있도록 도와주는 도구랍니다.

 

from pykiwoom.kiwoom import Kiwoom

kiwoom = Kiwoom()
kiwoom.CommConnect(block=True)

 

위 코드는 키움 API에 로그인하고 연결하는 기본 코드예요. block=True를 설정하면 로그인이 완료될 때까지 기다려줘요.

 

연결이 완료되면 아래 코드로 내 계좌 정보를 확인해볼 수 있어요:

account_list = kiwoom.GetLoginInfo("ACCNO")
print("내 계좌번호:", account_list)

 

실제로 데이터를 받아보려면 다음과 같이 주식 종목의 시세를 불러올 수 있어요. 예를 들어 삼성전자(005930)의 현재가를 확인하는 코드예요:

price = kiwoom.GetMasterLastPrice("005930")
print("삼성전자 현재가:", price)

 

또는 과거 일봉 데이터를 받아오는 것도 가능해요. 아래 코드는 최근 100일치 일봉 데이터를 pandas 데이터프레임 형태로 반환해요:

df = kiwoom.block_request("opt10081",
                          종목코드="005930",
                          기준일자="20240510",
                          수정주가구분=1,
                          output="주식일봉차트조회",
                          next=0)

print(df.head())

 

API 사용 중에는 반드시 TR 요청 제한을 고려해야 해요. 1초에 5회 이상 요청하면 차단될 수 있기 때문에 time.sleep(0.2) 같은 지연을 넣는 게 안전해요.

📡 키움 API 연동 요약표

항목 예시 코드 설명
로그인 kiwoom.CommConnect() API 연결 시작
계좌 확인 GetLoginInfo("ACCNO") 계좌번호 리스트
현재가 조회 GetMasterLastPrice("005930") 실시간 주가 확인
일봉 데이터 block_request("opt10081", ...) 과거 데이터 불러오기

 

이제 파이썬과 키움 API가 연결되었으니, 본격적으로 자동매매 전략을 어떻게 구현할지 알아볼 시간이에요! 📈

📈 전략 구현 기초

자동매매의 핵심은 바로 '전략'이에요. 전략이 곧 봇의 두뇌가 되는 부분이죠. 이 전략을 얼마나 논리적으로, 또 효율적으로 구현하느냐에 따라 수익과 손실이 크게 갈릴 수 있어요. 그래서 이 섹션에서는 간단한 조건부터 시작해서 실전 전략까지 어떻게 파이썬으로 구현할 수 있는지 알아볼게요.

 

전략을 구성할 때는 3가지를 꼭 정리해야 해요. ① 매수 조건, ② 매도 조건, ③ 리스크 제한 조건. 이 3가지를 기준으로 코드를 설계하면 깔끔하고 오류가 적어요.

 

가장 쉬운 전략은 이동평균선을 활용하는 거예요. 예를 들어 5일 이동평균선이 20일선 위로 돌파하면 상승 추세로 보고 매수하는 거죠. 아래는 그 조건을 파이썬 코드로 구현한 예시예요.

df["MA5"] = df["Close"].rolling(window=5).mean()
df["MA20"] = df["Close"].rolling(window=20).mean()
df["Signal"] = (df["MA5"] > df["MA20"]) & (df["MA5"].shift(1) <= df["MA20"].shift(1))

 

위 코드에서 Signal이 True가 되는 날이 바로 매수 조건을 만족하는 날이에요. 이걸 활용해 자동매매 타이밍을 잡을 수 있어요. 반대로 매도 조건도 만들어야겠죠? 예: 수익률이 5% 이상이면 매도.

 

이제 매수/매도 시점을 알아봤으니, 실제 매수 후 얼마나 올랐는지 계산하려면 아래와 같이 수익률을 구할 수 있어요.

df["BuyPrice"] = df["Close"].shift(1)
df["Return"] = (df["Close"] - df["BuyPrice"]) / df["BuyPrice"] * 100

 

그 외에도 많이 사용하는 전략 조건은 다음과 같아요:

  • RSI(상대강도지수)가 30 이하 → 과매도 매수
  • 거래량이 전일 대비 200% 이상 증가
  • MACD 시그널선 상향 돌파
  • 전일 고가 돌파 시 매수

 

이러한 조건들을 조합하면 더 정교한 전략이 돼요. 다만, 전략이 너무 복잡하면 과최적화(overfitting)에 빠질 수 있으니 주의해야 해요. 핵심은 '단순하지만 강력한 조건'이에요.

 

전략은 하드코딩보다 변수화해서 설정파일이나 외부 JSON에서 불러오게 만드는 게 좋아요. 이렇게 하면 나중에 조건만 바꿔서 빠르게 테스트할 수 있거든요.

🧠 전략 구성 요소 요약표

전략 항목 예시 의미
매수 조건 MA5 > MA20 교차 상승 추세 포착
매도 조건 수익률 5% 이상 익절 타이밍
손절 조건 -2% 손실 시 매도 리스크 제어
보조 조건 RSI < 30 과매도 진입

 

이제 이 전략을 실제 시장에 적용해서 자동으로 주문을 넣는 단계로 넘어가 볼까요? 📤

📤 자동 주문 실행

이제 자동매매의 핵심인 주문 실행 단계로 들어가 볼게요. 조건이 충족됐을 때 자동으로 주식을 매수하거나 매도하도록 하는 게 바로 주식 봇의 진짜 힘이에요. 키움 API에서는 SendOrder() 함수를 사용해서 주문을 실행할 수 있어요.

 

아래는 가장 기본적인 매수 주문 코드예요. 삼성전자(005930)를 시장가로 10주 매수하는 예시죠:

kiwoom.SendOrder(
    rq_name="시장가매수",
    screen_no="0101",
    account_no=account_list[0],
    order_type=1,  # 1: 매수, 2: 매도
    code="005930",  # 종목코드
    quantity=10,
    price=0,  # 시장가일 경우 0
    hoga="03",  # 03: 시장가
    order_no=""
)

 

각 인자의 의미는 다음과 같아요:

  • rq_name: 요청 이름 (아무 문자열 가능)
  • screen_no: 화면 번호 (임의의 4자리 숫자)
  • account_no: 주문에 사용할 내 계좌번호
  • order_type: 1이면 매수, 2면 매도
  • code: 종목코드 (예: 삼성전자 005930)
  • quantity: 주문 수량
  • price: 지정가 주문 시 가격, 시장가는 0
  • hoga: 주문 유형 ('03'은 시장가, '00'은 지정가)

 

조건이 충족됐을 때 위 함수를 실행하게 만들면 완전한 자동매매가 가능해요. 예를 들어, RSI가 30 이하인 경우에만 매수하도록 설정할 수 있어요.

if rsi_value <= 30:
    kiwoom.SendOrder("RSI매수", "0102", account_list[0], 1, "005930", 10, 0, "03", "")

 

매도도 마찬가지예요. 예를 들어 수익률이 5% 이상이면 다음과 같이 매도할 수 있어요:

if profit_percent >= 5:
    kiwoom.SendOrder("익절매도", "0103", account_list[0], 2, "005930", 10, 0, "03", "")

 

여기서 주의할 점은 주문이 들어갔다고 해서 모두 체결되는 건 아니라는 거예요. 주문 후 체결 여부를 이벤트 처리 함수로 확인해야 해요. 그 과정은 다음 섹션에서 다룰게요!

🧾 자동 주문 코드 요약표

매매 유형 코드 설명
시장가 매수 order_type=1, hoga='03' 조건 만족 시 즉시 매수
지정가 매도 order_type=2, hoga='00' 원하는 가격에 매도
수익률 매도 if 수익률 ≥ 5% 익절 조건 설정
손절 조건 if 수익률 ≤ -2% 손실 방지 로직

 

다음은 봇이 실전에서 안전하게 운영되기 위해 꼭 알아야 할 🛡 리스크 관리와 실전 팁 섹션으로 넘어가 볼게요!

🛡 리스크 관리와 실전 팁

아무리 전략이 좋아도 리스크 관리를 하지 않으면 결국 계좌는 버티지 못해요. 실전에서는 봇이 멈추거나 오작동할 수 있는 수많은 변수들이 존재하기 때문에, 그에 대한 대비책도 꼭 세워야 해요. 이 섹션에서는 안전하게 자동매매를 운영하기 위한 팁을 모아볼게요.

 

첫 번째는 손절 조건 설정이에요. 봇이 실시간으로 수익률을 계산하면서, 특정 손실률에 도달하면 자동으로 매도하거나 전략을 중지하는 코드를 넣어야 해요. 예: -3% 손실 시 자동 매도.

 

두 번째는 매매 금액 제한이에요. 특정 종목에 몰빵하지 않도록, 한 종목당 투자 비중을 10~20%로 제한하는 것이 좋아요. 갑작스런 급락에도 계좌 전체가 무너지지 않도록 설계하는 거예요.

 

세 번째는 주문 횟수 제한이에요. 봇이 무한 반복으로 주문을 보내면, API 차단 또는 의도치 않은 거래가 반복될 수 있어요. 하루 총 주문 횟수나 종목당 1회 주문만 허용하는 식으로 제어해야 해요.

 

네 번째는 오류 감지 및 예외 처리예요. API 호출 실패, 주문 전송 오류, 체결 미확인 등 다양한 상황에 대비해 try-except를 활용하고, 로그를 남기는 습관이 중요해요. 오류 발생 시 텔레그램이나 슬랙으로 알림을 보내면 더 좋아요.

 

다섯 번째는 자동 로그 저장이에요. 매매가 발생한 시각, 종목명, 수량, 가격, 수익률 등을 기록하면 전략의 성능을 확인할 수 있어요. pandas로 CSV 파일을 만들거나 SQLite DB를 쓰면 간단하게 저장할 수 있어요.

 

여섯 번째는 자동 실행 설정이에요. 매일 장 시작 전 봇을 수동으로 실행하지 않아도 되도록 윈도우 작업 스케줄러나 파이썬 내 schedule 라이브러리를 사용해 자동 시작 설정을 해두면 편리해요.

 

일곱 번째는 클라우드 서버 활용이에요. 로컬 PC는 꺼질 수도 있고 인터넷이 끊길 수도 있어서 장기 운영엔 안정적이지 않아요. AWS, GCP, Azure 같은 클라우드 환경에 봇을 올려두면 24시간 안정적으로 운영할 수 있어요.

 

마지막 팁은 주말 점검이에요. 매주 금요일 장 마감 후 봇의 로그를 확인하고, 다음 주 적용할 전략을 업데이트하거나 백테스트 결과를 반영해서 최적화하는 루틴을 만드는 걸 추천해요.

📛 리스크 관리 체크리스트

항목 설명 필요성
손절 설정 -3% 시 자동 매도 손실 통제
투자 금액 제한 1종목당 비중 20% 이내 계좌 보호
에러 알림 슬랙/텔레그램 연동 빠른 대응
자동 실행 스케줄러 or schedule 편의성 향상

 

여기까지 잘 따라오셨다면, 이제 파이썬 주식 자동매매 봇의 구조와 핵심을 완전히 이해한 거예요! 🎉

 

이제 마지막으로 궁금한 질문들을 모두 정리해드릴게요. 이어서 📌 FAQ 섹션으로 갈게요 😊

📌 FAQ

Q1. 파이썬 자동매매는 초보자도 할 수 있나요?

 

A1. 물론이에요! 기본 문법만 익히면 누구나 자동매매를 시작할 수 있어요. 특히 pykiwoom 같은 라이브러리를 쓰면 코드도 어렵지 않답니다.

 

Q2. 자동매매 봇이 갑자기 멈추면 어떻게 하나요?

 

A2. 예외 처리와 알림 기능을 넣으면 멈췄을 때 바로 인지할 수 있어요. 슬랙, 텔레그램 연동을 통해 실시간 상태 체크도 가능해요.

 

Q3. 키움증권 API는 무료인가요?

 

A3. 네, 개인 투자자에게는 무료로 제공돼요. 다만 실시간 데이터 수신에는 일부 제한이 있으니 사전에 확인해 주세요.

 

Q4. 실전 계좌와 모의투자 계좌는 뭐가 달라요?

 

A4. 모의투자는 실제 돈이 오가지 않는 테스트 계좌예요. 실전과 같은 환경에서 전략을 연습할 수 있어서 꼭 거쳐야 하는 단계예요.

 

Q5. 주식 외에 코인도 자동매매할 수 있나요?

 

A5. 가능해요! 코인 거래소들도 API를 제공하고, 파이썬으로 연동하면 자동매매가 가능해요. 빗썸, 바이낸스, 업비트 등이 대표적이에요.

 

Q6. 자동매매로 정말 수익이 날 수 있나요?

 

A6. 전략에 따라 달라요. 꾸준한 테스트와 리스크 관리가 동반된다면 수익을 낼 수 있지만, 무작정 돌리면 오히려 손실이 커질 수도 있어요.

 

Q7. 봇 실행은 매일 직접 해야 하나요?

 

A7. 꼭 그렇진 않아요. 작업 스케줄러나 파이썬의 schedule 라이브러리를 활용하면 매일 정해진 시간에 자동 실행되도록 설정할 수 있어요.

 

Q8. 봇을 스마트폰으로 제어할 수 있나요?

 

A8. 봇 자체는 PC나 클라우드에서 돌아가지만, 상태 체크나 긴급 명령은 텔레그램이나 슬랙 연동으로 스마트폰에서 제어할 수 있어요.

 

지금까지 파이썬을 활용한 주식 자동매매의 모든 핵심을 A부터 Z까지 정리해봤어요! 🙌

 

이제 여러분도 단순한 감정 매매를 넘어서, 논리적이고 반복 가능한 시스템 매매로 한 발 더 다가갈 수 있어요. 천천히 전략을 쌓아가면서 자신만의 투자 도구를 완성해보세요 😊