공지 ⚽ 2026 북중미 월드컵 한눈에 보기 매일 갱신

클로드코드로 주식투자 에이전트 만들기 (4) — 매매와 안전장치

AI·공부 · 약 5분

📚 연재 — 클로드코드로 주식투자 에이전트 만들기 ① 목적과 설계 · ② 한투 API 연결 · ③ 분석가 두뇌 · ④ 매매와 안전장치 · ⑤ 운영 자동화

분석에서 행동으로

지난 편까지 봇은 종목을 고르고 분석해 “보류/매수”를 판단할 수 있게 됐다. 하지만 판단만으로는 반쪽이다. 이번 편에서는 그 판단으로 실제로 사고파는 부분을 만든다. 돈이 움직이는 단계라 가장 신중하게 갔다.

black and silver laptop computer Photo by path digital on Unsplash

리스크 매니저 — 잔고 안에서

부모가 “사자”고 결정해도, 그게 계좌 사정에 맞는지 검증하는 안전판이 필요하다. 이게 목표 1번 “잔고 안에서 운용”의 핵심이다.

설계 결정을 하나 했다. 리스크 매니저를 LLM 에이전트로 만들 수도 있었지만, 막상 하는 일을 보니 “현금 충분한가? 비중 몇 %인가?” 같은 전부 숫자 계산이었다. LLM에게 시키면 부정확하고 느리고 비싸다. 그래서 계산은 파이썬이 정확히 하고, 필요하면 LLM은 설명만 붙이게 했다.

실제로 1억 모의계좌에서 삼성전자를 사려 하니, 단일종목 비중 한도(15%)에 맞춰 자동으로 41주(약 1,470만원)를 산정했다. 100주를 희망해도 한도 초과면 41주로 깎는다. 분석가들이 “사라”고 해도, 리스크 매니저가 “한 종목에 15% 넘게는 안 돼”라며 수량을 조정하는 것이다.

실행 게이트 — 타협 없는 마지막 방어선

가장 중요한 부분이다. 실제 주문은 LLM이 내지 않는다. 모든 발주는 오직 실행 게이트라는 결정론적 코드를 통과해야 한다. LLM이든, 텔레그램 명령이든, 직접 호출이든, 발주하려면 무조건 여기를 거친다.

게이트가 점검하는 하드룰:

이 다섯 가지를 모두 통과해야만 실제 KIS 주문이 나간다. 리스크 매니저가 혹시 잘못 판단해도 게이트가 최종적으로 한 번 더 거른다. 돈이 나가는 일이라 안전장치를 이중으로 둔 것이다.

turned on monitoring screen Photo by Stephen Dawson on Unsplash

첫 거래 — 봇이 처음 주식을 사다

장중에 봇을 돌리니 SK하이닉스에 매수 신호가 떴다. 리스크 매니저가 5주를 산정했고, 게이트를 통과시켜 실제 시장가 매수를 넣었다.

현재가 2,866,000원 / 권고수량 5주 / 판정 approve
발주 결과: {'status': 'filled', 'order_no': '0000018686',
           'msg': '모의투자 매수주문이 완료 되었습니다.'}

주문번호까지 발급받으며 체결됐다. 잔고를 확인하니 SK하이닉스 5주가 계좌에 들어와 있었다. 분석부터 실제 보유까지 전 과정이 처음으로 끝까지 돈 순간이었다.

참고로 산 직후 평가손익이 -0.3%로 찍혔는데, 이건 봇이 잘못 산 게 아니다. 시장가로 사는 순간 매수 호가와 수수료 때문에 생기는 자연스러운 슬리피지다.

매도 — 사는 것만큼 파는 것도

사는 법만 알면 반쪽이다. 매도 트리거는 “신호 반전”을 메인으로 골랐다. 분석가들이 다시 봤을 때 bearish로 바뀌면 판다. 살 때와 같은 두뇌로 팔지도 결정하니 일관성이 있다.

다만 신호 반전만으로는 위험한 구멍이 있다. 분석가가 “강한 bearish”가 아니라 어정쩡하게 중립이면 안 팔고, 그 사이 주가가 크게 빠져도 방치될 수 있다. 그래서 손절을 안전망으로 함께 뒀다. 분석가가 뭐라 하든 수익률이 -7%를 넘으면 무조건 매도한다. 이건 의견이 아니라 생존의 문제다. 큰 손실 한 방이 계좌를 망치기 때문이다.

매도 판단은 손절을 먼저 체크하고(최우선), 그다음 분석가 재평가로 신호 반전을 본다. 보유 중인 SK하이닉스를 재평가하니 종합 80점으로 양호해 “보유 유지”가 나왔다. 방금 산 걸 충동적으로 팔지 않는, 합리적인 판단이었다.

통합 사이클 — 팔 거 보고, 살 거 보고

매수와 매도를 한 사이클로 묶었다. 순서가 중요하다. 매도를 먼저 본다. 팔아서 현금이 생겨야 그 돈으로 살 수 있으니까. 실제 트레이더와 같다.

python3 main.py 한 번으로 이렇게 돈다.

─── 매도 판단 (보유종목) ───
🔵 SK하이닉스 -2.7% → 보유 유지 (종합 80.0)
─── 매수 판단 (후보 종목) ───
🟢 000660 BUY — 매수 신호 있으나 리스크 거부 (비중 한도 도달)
🟢 005930 BUY — 매수 제안: 41주 (승인 대기)
⚪ 009150 HOLD — 보류

여기서 인상적인 장면이 나왔다. SK하이닉스에 또 매수 신호가 떴지만, 이미 보유 중이라 리스크 매니저가 “계좌의 15% 차지하니 추가 매수 불가”로 막았다. 몰빵 방지가 실전에서 정확히 작동한 것이다.

manual 승인 — 봇은 제안만, 결정은 내가

manual 모드의 제대로 된 사용법도 만들었다. 봇이 제안을 pending.json에 저장하면, 승인 스크립트로 내가 검토해 발주한다.

아침:  python3 main.py      → 봇이 분석하고 제안
나:    python3 approve.py   → 목록 보고 y/n/s로 결정

실제로 돌려보니 이렇게 동작했다.

[1] 매수 삼성전자 41주 (가중점수 55.5)
▶ 승인? y
✅ 발주 완료 (주문번호 0000038876)

봇이 분석해 제안하고, 내가 한 번 더 검토해 승인하고, 그제야 실제 주문이 나간다. 봇이 멋대로 사지 않고 내가 통제권을 쥐는 구조다.

완성, 그리고 남은 길

이로써 봇은 사고, 들고, 팔 줄 아는 완전한 형태가 됐다. 하루 만에 한투 연결부터 분석가 3명, 종합, 리스크 관리, 실제 체결까지 전부 실제 데이터로 검증했다. 목표 1번(스스로 분석하고 잔고 안에서 운용)은 완전히 작동한다.

물론 끝은 아니다. 남은 길이 있다.

만들며 배운 것

네 편에 걸쳐 만들면서 가장 크게 남은 교훈은 세 가지다.

첫째, LLM이 잘하는 것과 못 믿을 것을 가르는 것. 해석과 판단은 LLM이, 숫자 계산과 날짜와 발주는 코드가. 이 경계를 분명히 한 게 시스템을 믿을 만하게 만들었다.

둘째, 외부 API는 언제든 불안정하다고 가정하는 것. 화려한 분석보다 재시도·폴백·캐싱 같은 방어 기본기가 무인 시스템의 생존을 좌우했다.

셋째, 안전을 기본값으로 두는 것. 모의투자, manual 모드, 결정론적 게이트, 이중 안전장치. 돈이 걸린 시스템에서 “신중함”은 비용이 아니라 필수다.

자동매매는 “돈 버는 걸 보장”하는 마법이 아니다. 이 시스템이 진짜 해주는 건 규칙을 일관되게, 감정 없이, 정해진 리스크 한도 안에서 실행하는 것이다. 그 위에서 실제 성과를 검증하는 건 결국 백테스트와 시간의 몫이다.

긴 시리즈를 읽어주셔서 감사하다. 같은 걸 만들어보려는 분께 이 기록이 함정을 미리 피하는 지도가 되길 바란다.


📚 ← ③ 분석가 3명의 두뇌 · 다음 편 → ⑤ 운영 자동화 · ① 목적과 설계부터 보기

※ 이 글은 개인 프로젝트 제작기로, 특정 종목의 매수·매도 권유나 투자 조언이 아닙니다. 자동매매는 손실 위험이 있으며 모든 투자 판단과 책임은 본인에게 있습니다.

광고

댓글