키움증권 OpenAPI란? 자동매매의 시작을 위한 완벽 가이드 (1부)
본문 바로가기

투자

키움증권 OpenAPI란? 자동매매의 시작을 위한 완벽 가이드 (1부)

 

 
 

 
 
 
안녕하세요!
요즘 자동매매, 알고리즘 트레이딩에 관심 있는 분들 많으시죠?
하지만 어떻게 시작해야 할지 막막하셨다면, ‘키움증권 OpenAPI’는 여러분이 가장 먼저 접해야 할 시스템입니다.

ℹ️ OpenAPI란?
OpenAPI는 키움증권에서 제공하는 주식거래 API로, HTS(영웅문)를 거치지 않고도 프로그램으로 주식 주문, 시세조회, 계좌조회 등을 할 수 있게 해주는 인터페이스입니다.

📌 목차


🧠 1. 키움 OpenAPI란?

OpenAPI는 키움증권에서 제공하는 COM(Component Object Model) 기반 API로, 주식 투자자나 개발자가 주식 거래를 자동화하거나 데이터 분석을 위한 시세 수집 등을 할 수 있게 도와줍니다.

📌 주요 기능 요약

기능설명
시세 조회현재가, 일봉, 체결강도 등 실시간 시세 수집
주문 실행시장가, 지정가 등 다양한 주문 방식 지원
계좌 정보보유 종목, 예수금, 매수평균가 등 조회
실시간 이벤트호가 변화, 체결 발생 등을 실시간 감지
“OpenAPI를 통해 사람의 클릭 없이도, 주식 거래가 자동으로 진행되도록 설계할 수 있습니다.”

📥 2. OpenAPI 사용을 위한 신청 방법

 
 

 
 
 

🔹 Step 1. 키움증권 계좌 개설

OpenAPI를 사용하기 위해선 반드시 키움증권의 증권 계좌가 있어야 해요.
모바일 앱(키움증권 계좌개설 앱)을 통해 비대면 계좌 개설이 가능합니다.

🔹 Step 2. 키움 OpenAPI 신청

  1. 🔢 키움증권 홈페이지 접속
  2. 🔢 상단 메뉴 [고객센터] → [OpenAPI 신청]
  3. 🔢 약관 동의 및 신청 완료
주의!
모의투자용 OpenAPI는 모의투자센터에서 별도로 신청해야 합니다.

⚙️ 3. 개발 환경 설정 가이드

OpenAPI를 사용하려면 몇 가지 개발 환경을 세팅해야 해요. 처음엔 어렵게 느껴질 수 있지만, 하나씩 따라 하면 충분히 가능합니다.

✅ 필수 프로그램 목록

  • 🧩 키움 OpenAPI+ 모듈
  • 📦 Python 3.x (권장: 3.10 이상)
  • 📌 파이썬-윈도우 COM 연결을 위한 pywin32
  • 🖥️ 32bit 기준 개발환경 권장

🔧 설치 경로 안내

  1. 🔢 OpenAPI+ 설치 파일 다운로드
  2. 🔢 설치 후 C:\OpenAPI 폴더 확인
  3. 🔢 [바탕화면]의 'KOA Studio'로 로그인 테스트
ℹ️ 추가 팁:
OpenAPI는 64bit 파이썬과 호환되지 않으므로 32bit Python 설치가 안정적입니다.
설치 후에는 반드시 관리자 권한 실행으로 KOA Studio 실행을 테스트하세요.

👉 다음 2부에서는 Python을 이용해 실제로 OpenAPI에 접속하고, 종목 정보를 받아오는 **코드 예제**와 함께 실시간 데이터 수신까지 실습해볼 거예요. 기대해주세요!

🐍 Python으로 키움 OpenAPI 연동하는 법

 
 

 
 
 
1부에서 환경설정을 마쳤다면 이제 실제로 Python에서 키움 OpenAPI를 불러오고 시세를 조회해보는 실습을 진행할 차례입니다.

이제부터는 진짜 ‘개발자’처럼 다뤄보는 시간이에요.

ℹ️ 사용 모듈
Python 3.10 32bit 기준 / pywin32 / time 등 기본 모듈 사용

📦 1. pywin32 설치 및 초기 연결

pywin32는 Python과 Windows COM을 연결해주는 필수 모듈입니다.

pip install pywin32

설치가 끝났다면 이제 OpenAPI 모듈을 import해봅시다.

💻 기본 연결 코드

import win32com.client

# 키움증권 OpenAPI 객체 생성
kiwoom = win32com.client.Dispatch("KHOPENAPI.KHOpenAPICtrl.1")

# 로그인 요청
kiwoom.CommConnect()

# 로그인 완료까지 대기 (이벤트 발생 기반 처리 가능)
import time
time.sleep(5)

# 로그인 여부 확인 (0: 성공, 1: 실패)
is_login = kiwoom.GetConnectState()
print("로그인 상태:", "성공" if is_login == 1 else "실패")
📘 설명
✅ win32com.client는 COM 객체 생성용
✅ KHOPENAPI.KHOpenAPICtrl.1은 OpenAPI COM 객체 이름
✅ CommConnect는 로그인 창 실행 함수

📈 2. 종목 코드로 시세 조회하기

키움 OpenAPI에서는 종목 코드를 기반으로 시세 데이터를 조회합니다.
예를 들어 ‘삼성전자’는 코드 ‘005930’이에요.

🧪 현재가 조회 예제

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

📌 주요 메서드 정리

함수설명
GetMasterCodeName(종목코드)해당 코드의 종목명 반환
GetMasterLastPrice(종목코드)해당 종목의 현재가 반환
GetMasterListedStockCnt(종목코드)상장 주식 수
❗ OpenAPI는 실시간 데이터를 조회할 때 **조회 제한(초당 횟수 제한)**이 있으므로 시간 간격을 적절히 두거나 TR 방식과 실시간 이벤트 방식을 혼합해야 합니다.

💼 3. 보유 계좌 및 잔고 조회

OpenAPI에서는 CommRqDataSetInputValue를 사용해 계좌 정보와 보유 종목을 조회할 수 있어요.

"계좌 잔고, 매입단가, 평가손익까지 자동으로 확인할 수 있습니다."

📘 요청 예시 (기초 형태)

kiwoom.SetInputValue("계좌번호", "1234567890")
kiwoom.SetInputValue("비밀번호", "0000")
kiwoom.SetInputValue("비밀번호입력매체구분", "00")
kiwoom.SetInputValue("조회구분", "1")  # 1: 잔고조회
kiwoom.CommRqData("잔고요청", "opw00018", 0, "2000")
ℹ️ TR 번호: opw00018은 '계좌 잔고내역 조회'용
🖥️ TR 요청 시 반드시 이벤트 핸들링을 통해 결과를 받아야 해요.

📢 다음 단계 예고: 자동 주문 처리

여기까지가 기본적인 연동 및 시세 조회, 계좌 조회입니다.
이제 다음 3부에서는 매수/매도 주문을 자동으로 실행하고, 실시간 이벤트 처리까지 다뤄볼 거예요.
👉 자동매매를 처음 시작하는 분이라면 꼭 따라오셔야 할 핵심 내용입니다. 3부에서 계속 이어집니다! 😎

🤖 키움 OpenAPI 자동매매 시스템 구축

 
 
 

 
 
 
이제 여러분은 OpenAPI 연동, 시세 조회, 계좌 조회까지 마친 상태예요.
이제부터는 실시간 체결 정보를 바탕으로 조건에 따라 자동 주문을 내는 진짜 ‘자동매매 시스템’을 만들어볼 차례입니다.

ℹ️ 자동매매 시스템이란?
조건(예: 가격 상승/하락, 거래량 증가 등)이 충족되면 사용자의 개입 없이 프로그램이 자동으로 주문을 실행하는 구조입니다.

📡 실시간 체결 정보 수신하기

키움 OpenAPI는 이벤트 기반 처리 구조입니다. 즉, 특정 이벤트(주가 변동, 주문 체결 등)가 발생하면 자동으로 등록된 메서드를 호출합니다.

💻 이벤트 클래스 구성

import win32com.client

class KiwoomEventHandler:
    def OnReceiveRealData(self, code, real_type, data):
        if real_type == "체결가":
            print(f"[{code}] 실시간 체결가: {data}")

kiwoom = win32com.client.DispatchWithEvents("KHOPENAPI.KHOpenAPICtrl.1", KiwoomEventHandler)

이후 아래 메서드를 통해 종목별 실시간 이벤트를 등록할 수 있습니다.

# 삼성전자 체결 정보 실시간 등록
kiwoom.SetRealReg("1000", "005930", "20;10;15", "0")
📘 SetRealReg 설명
✅ 첫 번째 인자: 화면번호 (임의값)
✅ 두 번째 인자: 종목코드
✅ 세 번째 인자: 필드번호 (체결가, 현재가 등)
✅ 네 번째 인자: 기존 등록 해제 여부 (0 = 추가 등록)

🛒 조건에 따라 자동 주문 실행하기

체결 정보가 들어오면, 특정 조건에 따라 자동으로 매수/매도 주문을 실행할 수 있습니다.

📘 자동매수 예시 코드

def auto_buy(code, quantity=1):
    kiwoom.SendOrder("자동매수", "1001", "1234567890", 1, code, quantity, 0, "03", "")
  • 🟢 주문유형: 1 = 신규매수 / 2 = 신규매도
  • 🟢 가격: 0 = 시장가
  • 🟢 거래구분: 03 = 시장가
예: 현재가가 60,000원 아래로 떨어지면 자동매수 실행
if current_price < 60000:
    auto_buy("005930", quantity=10)
❗ 자동매매는 잘못된 조건문으로 인해 연속 주문, 과매수, 과매도 등의 리스크가 발생할 수 있으니 필수로 안전장치(조건문, 예외 처리 등)를 함께 설계하세요.

📌 자동매매 시스템 설계 시 주의사항

  • 서버 조회 제한: 초당 1회, 1분당 최대 60회 제한
  • 네트워크/로그인 장애 대비 코드 작성
  • 실전 사용 전 모의투자 환경에서 충분한 테스트
  • 상한가/하한가 종목 체크 필수
ℹ️ 추천: 오픈소스 활용
GitHub에는 ‘kiwoom-trader’, ‘auto-trader-py’ 등 OpenAPI 기반 자동매매 봇 코드가 다양하게 공개되어 있습니다.

💬 Q&A: 자주 묻는 질문

 
 
 

 
 
 

Q1. Python 말고 다른 언어로도 가능한가요?

가능합니다. Visual Basic, C#, JavaScript 등 COM 기반 언어라면 대부분 사용 가능합니다.

Q2. 실전 투자에서도 OpenAPI로 매매 가능한가요?

네. 실 계좌 인증을 통해 모의환경이 아닌 실거래 환경에서도 자동매매가 가능합니다.

Q3. 하루에 얼마나 자주 주문을 낼 수 있나요?

TR 호출 및 주문 횟수 제한이 존재합니다.
키움증권 기준: 초당 1회, 분당 60회를 넘지 않도록 주의하세요.

Q4. 이벤트 핸들링이 어렵게 느껴져요...

처음엔 그렇지만 익숙해지면 웹 훅, 알림, 조건 검색 등으로 확장 가능합니다. 대신 주석 작성과 모듈화는 꼭 해두세요!


🧾 마무리 정리 & 다음 단계

📘 OpenAPI 자동매매 핵심 요약

✅ 이벤트 기반 구조 이해 → 체결 이벤트 수신
✅ 조건 설정 → 자동 주문 실행
✅ 실거래 적용 전 충분한 테스트
✅ 1일 주문/조회 제한, 안전장치 코딩 필수

🎯 다음으로 뭘 하면 좋을까요?

  • ✅ 실시간 조건검색 API 연동
  • ✅ 종목 자동 스크리닝 알고리즘 개발
  • ✅ Telegram, Slack 등으로 실시간 알림 연동

지금까지 따라오신 여러분은 Python 기반 자동매매 시스템의 핵심을 이해하셨습니다. 실전은 이제부터 시작이에요. 🚀
 
 
 

(포스팅의 이미지는 pixabay의 무료 이미지를 사용했습니다.)