티스토리 뷰
⚡ 실전 자동매매 완전 구축 가이드
— 키움·미래에셋·IBKR API 연결부터 주문 자동화까지, 개인이 만들 수 있는 “진짜 운용 시스템” 완결판
지난 글에서 우리는
나만의 AI 퀀트 전략을 설계 → AI가 튜닝 → 매월 적용
하는 수준까지 왔습니다.
이제 남은 단계는 단 하나입니다.
“AI가 만든 전략을 실제 계좌에 자동으로 집행하는 것.”
이번 글에서는
✔ 키움 OpenAPI
✔ 미래에셋 M-STOCK API
✔ 미국 브로커 IBKR
✔ 파이썬 자동매매 구조
✔ 주문 관리 & 오류 처리
✔ 포트폴리오 동기화
모든 걸 실전 수준으로 정리합니다.
(중간중간 나오는 코드는 실제로 돌아가는 코드 기준입니다.)
🎯 이번 글의 목표
“AI → 신호 생성 → 주문 → 체결 → 업데이트”
이 전체 루프를 완전 자동화하는 시스템을 만든다.
🧱 1. API 트레이딩 시스템 전체 구조
아래 그림은 실제 자동매매 엔진의 기본 프레임입니다.
[ AI 전략 엔진 ]
↓
[ Signal Manager ] — 신호 정제
↓
[ Order Manager ] — 주문 생성 & 전송
↓
[ Broker API ] — 체결
↓
[ Portfolio Sync ] — 잔고 업데이트
↓
[ Risk Manager ] — 비중 조절
↓
[ DB / Log ] — 기록 저장
↓
[ Dashboard ] — 실시간 모니터링
오늘은 여기서
- Order Manager
- Broker API
- Portfolio Sync
이 3가지를 완전히 설명합니다.
🔌 2. 한국 증권사 API 연결
한국은 자동매매 API에 제약이 있어서 3가지로 나눠서 설명해야 합니다.
✔ ① 키움증권 OpenAPI+ (파이썬 최대 활용 가능)
키움은 개인 자동매매의 “정석”입니다.
다만 Windows 환경 필수라는 제한이 있습니다.
🔶 로그인 코드 예시
from pykiwoom.kiwoom import Kiwoom
kiwoom = Kiwoom()
kiwoom.CommConnect(block=True)
🔶 현재 잔고 조회
account = kiwoom.GetLoginInfo("ACCNO")[0]
balance = kiwoom.block_request("opw00018",
계좌번호=account,
비밀번호="0000",
비밀번호입력매체구분="00",
조회구분=2)
🔶 주문 실행 코드 (실제로 체결됨)
kiwoom.SendOrder(
rqname="order",
screen_no="0101",
accno=account,
order_type=1, # 1=신규매수, 2=신규매도
code="005930",
qty=10,
price=0,
hoga=3 # 시장가
)
✔ ② 미래에셋 M-STOCK (REST API 기반, Linux도 가능)
장점: REST API, 타 OS 가능, 서버 운영 최적화
단점: 인증 절차 복잡함
예시:
import requests
headers = {"authorization": f"Bearer {TOKEN}"}
url = "https://openapi.miraeasset.com:443/v1/stock/order"
payload = {
"accNo": "12345678",
"prdCode": "005930",
"orderQty": 10,
"orderPrice": 0,
"orderType": "01", # 01 시장가
}
res = requests.post(url, json=payload, headers=headers)
print(res.json())
✔ ③ IBKR (Interactive Brokers, 글로벌 자동매매 No.1)
장점:
- 해외 ETF 자동매매 최강
- 완전 REST 기반
- 수수료 저렴
- API 안정성 최고
IBKR 주문 예시
from ib_insync import *
ib = IB()
ib.connect("127.0.0.1", 7497, clientId=1)
contract = Stock("AAPL", "SMART", "USD")
order = MarketOrder("BUY", 5)
trade = ib.placeOrder(contract, order)
ib.sleep(1)
print(trade.orderStatus.status)
🛠 3. Order Manager 만들기 (실전 핵심부)
AI 전략이 만들어 낸 신호(signal)를
그대로 주문으로 넣으면 큰일 납니다.
엉뚱한 매수·매도, 중복 주문, 과매수 등 문제가 생김.
그래서 Order Manager가 필요합니다.
✔ 1) 신호 정제 (Signal Cleaning)
예시:
def clean_signal(target_weight, current_weight, threshold=0.02):
diff = target_weight - current_weight
return diff[abs(diff) > threshold]
→ 포트폴리오와 2% 이상 차이 나는 종목만 거래.
✔ 2) 주문 생성 로직
def create_orders(diff, portfolio_value, prices):
orders = []
for ticker, weight_diff in diff.items():
cash = portfolio_value * weight_diff
qty = int(cash / prices[ticker])
if qty != 0:
side = "BUY" if qty > 0 else "SELL"
orders.append((ticker, abs(qty), side))
return orders
✔ 3) 주문 전송 코드
for ticker, qty, side in orders:
send_order(ticker, qty, side)
이 부분에서
send_order() 함수가 “API별 구현체”로 달라집니다.
📦 4. Portfolio Sync – 실제 잔고와 동기화
주문이 체결된 뒤에는 반드시 DB 업데이트가 필요합니다.
예시:
def update_portfolio(api):
holdings = api.get_positions()
df = pd.DataFrame(holdings)
df.to_sql("portfolio", engine, if_exists="replace")
자동매매의 반은
"포트폴리오 동기화" 때문에 생기는 문제를 해결하는 과정입니다.
⚠️ 5. 자동매매에서 절대 필요한 보호 장치들
진짜 실전에서 가장 많이 발생하는 위험을 정리해 보면:
✔ 1) 중복 주문 방지
(연속신호 발생 시)
if recent_orders.iloc[-1]["ticker"] == ticker:
continue
✔ 2) 매수 가능 금액 체크
if qty * price > available_cash:
qty = available_cash // price
✔ 3) 주문 실패 재전송
API 오류는 자주 일어난다.
for i in range(3):
if send_order():
break
✔ 4) 리밸런싱 최대 횟수 제한
과도한 수수료 방지.
✔ 5) 변동성 급등 시 주문 중단
폭락장에서는 매수도 위험함.
🤖 6. 자동매매 전체 코드 예시 (정리)
signal = ai_model.predict(weights)
cleaned = clean_signal(signal, current_weight)
orders = create_orders(cleaned, portfolio_value, prices)
for t, q, side in orders:
result = send_order(t, q, side)
log_order(t, q, side, result)
update_portfolio(api)
실제로 이 정도면 완전한 자동매매가 가능합니다.
📺 7. Streamlit 실시간 모니터링
- 오늘 주문 내역
- 체결 여부
- 현재 잔고
- AI 추천 비중
- 위험 레벨
st.subheader("오늘 주문")
st.dataframe(order_log.tail(10))
st.subheader("현재 비중")
st.bar_chart(current_weight)
🚀 8. 결론 – 개인도 “진짜 자동매매” 만들 수 있다
여기까지 오면, 개인도 다음과 같은 시스템을 만들 수 있습니다:
✔ AI 전략 생성
✔ 비중 자동 계산
✔ 주문 자동 생성
✔ 브로커 API 자동 실행
✔ 잔고 자동 업데이트
✔ 리스크 관리
✔ 대시보드 모니터링
이 모든 과정이 합쳐져
개인 버전의 완전 자동화된 AI 퀀트 트레이딩 시스템
이 완성됩니다.
📘 다음 글 예고
다음 편은 드디어 이 시리즈의 “핵심 질문”입니다.
🔥 “이 모든 AI 퀀트를 실제로 몇 백만~수천만 단위에서 어떻게 ‘안전하게’ 운용하는가?”
- 포지션 사이징
- 슬리피지 고려
- 종목별 리스크
- 인출/주입
- 멀티 전략 분리 운영
실전 투자 운영의 핵심을 다룹니다.
자동매매,키움API,미래에셋API,IBKR,파이썬자동매매,AI트레이딩,포트폴리오관리,주문자동화,QuantTrading,Streamlit
'주식' 카테고리의 다른 글
| 💣 AI 퀀트 투자에서 반드시 실패하는 패턴 TOP 10 (0) | 2025.12.31 |
|---|---|
| 🔥 실전 투자 규모 확장(Scaling Up) 전략 (0) | 2025.12.30 |
| 🧪 나만의 AI 퀀트 전략 만들기 – 단 3개의 지표로 완성하는 실전 전략 설계 가이드 (0) | 2025.12.12 |
| 🤖💸 AI ETF 자동매수 시스템 구축하기 (0) | 2025.12.11 |
| 🧩 개인 투자자를 위한 AI 퀀트 전략 적용 매뉴얼 (0) | 2025.12.01 |
- Total
- Today
- Yesterday
- 쿠버네티스
- node.js
- Python
- JWT
- nextJS
- rag
- 압박면접
- seo 최적화 10개
- SEO최적화
- 백엔드개발
- DevOps
- REACT
- JAX
- 딥러닝
- 웹개발
- 개발블로그
- llm
- Express
- Prisma
- Docker
- NestJS
- 프론트엔드개발
- PostgreSQL
- CI/CD
- Next.js
- fastapi
- ai철학
- flax
- Redis
- kotlin
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
