0. 독서를 하며 느끼는 점
어떻게 만들어야하지에 대한 의문 계속 남아있음.
그래서 유투브 탐색해서 참고
- 퀀트 자동매매 시스템1단계: 시스템 구조 설계
프로젝트/ ├── config.py # 전역 설정, 관심종목, 슬롯 설정 ├── .env # API 키, 계좌정보, 텔레그램 토큰 ├── stock_optimizer.py # 핵심 백테스팅 엔진 (44개 전략) ├── optimization_results/ # 종목별 최적 전략 저장 (JSON) ├── collector.py # 데이터 수집 (pykrx, yfinance) ├── kis_api.py # 한국투자증권 API 연결 ├── monitoring_runner.py # 실시간 모니터링 + 자동매매 ├── backtest_runner.py # 관심종목 일괄 백테스트 └── dashboard.py # Streamlit 대시보드
2단계: 관심종목 및 슬롯 설정
매매순서# 국내 종목 KR_STOCKS = ["005930", "035420", "051910", ...] # 삼성전자, 네이버, LG화학, 포스코홀딩스, 현대차, 카카오 등 # 미국 종목 US_STOCKS = ["AAPL", "GOOGL", "NVDA", "MSFT", "PLTR", "AVGO", "UNH", "CEG", "JOBY", "NKE", "TTD", ...] # 슬롯 설정 SLOT_COUNT = 5 # 슬롯 개수 (기본값) SLOT_USAGE_RATIO = 0.95 # 슬롯당 예수금의 95% 사용- 매도 먼저 — 매도 시그널이 난 종목을 먼저 팔아서 슬롯을 비움
- 빈 슬롯 확인 — 몇 개의 슬롯이 비어있는지 파악
- 매수 실행 — 매수 시그널 종목 중 샤프레이시오 높은 순으로 빈 슬롯에 하나씩 채움
| 슬록 | 종 | 배분 금액 | 기 |
| 1 | 컨스텔레이션에너지 | 190만원 | 샤프레이시오 1위 |
| 2 | 팔란티어 | 190만원 | 샤프레이시오 2위 |
| 3 | 브로드컴 | 190만원 | 샤프레이시오 3위 |
| 4 | SK하이닉스 | 190만원 | 샤프레이시오 4위 |
| 5 | 애플 | 190만원 | 샤프레이시오 5위 |
3단계: 44개 전략 구성 이해
① 평균회귀 전략 (RSI + 볼린저밴드)
- 과매도 구간 매수 → 평균 회귀 시 매도
- RSI : 최근 N일 동안 상승한 힘 vs 하락한 힘"을 0~100 사이 숫자로 압축한 것이에요. 100에 가까울수록 계속 올라온 것, 0에 가까울수록 계속 떨어진 것입니다. 70 이상은 "이미 너무 많이 올랐다(= 곧 내릴 수 있다)"는 과매수 신호, 30 이하는 "너무 많이 떨어졌다(= 곧 반등할 수 있다)"는 과매도 신호예요
- 볼린저밴드 : 이동평균선(중간선) 위아래로 "변동성 띠"를 두른 것이에요. 주가가 이 띠 안에서 머무는 시간이 약 95%입니다. 하단을 이탈하면 "지금 비정상적으로 많이 떨어진 것", 상단을 돌파하면 "비정상적으로 많이 오른 것"으로 판단해요. 표준편차 배수를 높이면 띠가 넓어져서 신호가 덜 나오고, 낮추면 띠가 좁아져서 신호가 자주 납니다.
매수 조건: RSI < 과매도 기준 OR 가격 < 볼린저밴드 하단
매도 조건: RSI > 과매수 기준 OR 가격 > 볼린저밴드 상단
② 추세추종(Trend Following) 전략 (이동평균선 크로스)
- 골든크로스 매수, 데드크로스 매도
- MA : 최근 N일간 종가를 평균 낸 선이에요. 단기 MA(예: 20일)는 최근 흐름에 빠르게 반응하고, 장기 MA(예: 60일)는 큰 흐름을 느리게 따라갑니다. 골든크로스는 단기선이 장기선을 아래에서 위로 뚫는 것으로 "이제 상승 추세 시작"을 의미하고, 데드크로스는 반대로 위에서 아래로 뚫어 "하락 추세 시작"을 의미합니다.
매수 조건: 단기 MA > 장기 MA (골든크로스)
매도 조건: 단기 MA < 장기 MA (데드크로스)
③ 모멘텀 전략 (ROC 활용)
- 상승 모멘텀 포착 후 추종
- ROC : ROC는 "N일 전보다 현재 가격이 몇 % 올랐냐"를 나타냅니다. 예를 들어 20일 전 가격이 100원이고 지금 107원이면 ROC = +7%예요. 임계값(threshold)은 "ROC가 이 수치 이상일 때만 모멘텀이 있다고 판단하겠다"는 기준선입니다. 임계값을 높게 잡으면 정말 강한 상승세만 잡고, 낮게 잡으면 작은 상승에도 반응합니다. 시스템이 종목마다 최적 임계값을 자동으로 찾아주는 것이 바로 그리드 서치예요.
매수 조건: ROC > 임계값 (상승 모멘텀 확인)
매도 조건: ROC < 임계값 (모멘텀 소멸)
④ 기타 전략 (MACD, 스토캐스틱, CCI, DMI/ADX, 이격도, 투자심리도, 매물대 등)
4단계: Stock Optimizer 백테스트 실행
파라미터 그리드 서치 범위
| RSI 기간 | 14일 | 7 ~ 20일 |
| 과매도 기준 | 30 | 25 ~ 35 |
| 과매수 기준 | 70 | 65 ~ 80 |
| 볼린저밴드 기간 | 20일 | 15 ~ 25일 |
| 볼린저밴드 표준편차 | 2.0 | 1.5 ~ 2.5 |
| 모멘텀 기간 | - | 10 ~ 60일 |
| ROC 임계값 | 0.05 | 0.1 ~ 0.3 |
백테스트 실행 흐름
1. 종목 선택 (단일 or 전체 관심종목)
2. 백테스트 기간 설정 (기본 10년)
3. 44개 전략 × 다양한 파라미터 조합 그리드 서치
4. 각 조합별 백테스트 실행
5. 샤프레이시오 기준 최적 전략 선정
6. optimization_results/{종목코드}.json 저장
성과 지표 해석
- 샤프레이시오: 위험 대비 수익률 (2 이상=매우 좋음, 1~2=좋음)
- MDD(Max DrawDown): 최대 낙폭 비율 (낮을수록 안정적)
- 승률: 매매 중 수익 거래 비율
- 총수익률: 백테스트 기간 누적 수익
5단계: API 연동 설정
한국투자증권 API 설정 (.env)
KIS_APP_KEY=발급받은_앱키
KIS_APP_SECRET=발급받은_시크릿
KIS_ACCOUNT=계좌번호
KIS_ACCOUNT_SUFFIX=계좌번호_뒷자리
텔레그램 봇 설정
1. 텔레그램에서 @BotFather 검색
2. /newbot 입력
3. 봇 이름 및 username 설정
4. 발급된 Token을 .env에 저장
5. 채팅방 Chat ID 확인 후 .env에 저장
.env 최종 구성
TELEGRAM_BOT_TOKEN=xxx
TELEGRAM_CHAT_ID=xxx
KIS_APP_KEY=xxx
KIS_APP_SECRET=xxx
KIS_ACCOUNT=xxx
AUTO_TRADE=true # 자동매매 on/off
SLOT_COUNT=5 # 환경변수로 슬롯 수 오버라이드 가능
6단계: 모니터링 러너 실행
동작 흐름
[60분 주기 반복]
│
├─ 1. 각 종목 현재가 수집 (collector.py)
├─ 2. optimization_results에서 최적 전략 로드
├─ 3. 매수/매도 시그널 계산
├─ 4. 장 운영 시간 확인
│ ├─ 한국: 09:00 ~ 15:30
│ └─ 미국: 23:30 ~ 06:00 (서머타임 22:30~)
├─ 5. 매도 시그널 먼저 실행 (슬롯 비우기)
├─ 6. 매수 시그널을 샤프레이시오 순으로 빈 슬롯에 매수
└─ 7. 텔레그램으로 결과 전송
자동매매 실행 코드 흐름 (kis_api.py)
from kis_api import KisAPI
api = KisAPI()
price = api.get_current_price("035420") # 현재가 조회
api.buy_stock("035420", quantity=1) # 매수 실행
api.sell_stock("035420", quantity=1) # 매도 실행
7단계: 대시보드 확인
streamlit run dashboard.py
대시보드에서 확인 가능한 항목들입니다.
- 관심종목 전체 백테스트 결과 (샤프레이시오 순 정렬)
- 종목별 수익률, 승률, 거래수, MDD
- 전략 분포 차트 (평균회귀 / 추세추종 / 모멘텀 비율)
- 샤프레이시오 vs 수익률 산점도
- 종목별 매수/매도 시그널 차트
- 현재 시그널 현황 (매수 / 매도 / 홀드)
운영 팁
우선순위 판단 기준
- 샤프레이시오 1.0 이상 종목 우선
- MDD가 낮은 종목 우선
- 백테스트 승률 높은 전략 우선
주의사항
- 백테스트 결과가 미래 수익을 보장하지 않음
- 초기엔 AUTO_TRADE=false로 시그널만 모니터링
- 충분한 검증 후 자동매매 활성화 권장
so 독서와 Youtube 병행 필요
- 책은 투자 알고리즘 설정 시 어떤 요소들을 고려해야하는지 인사이트를 주는데 도움.
- Youtube는 실질적으로 시스템을 만드는 데 도움.
1. Claude Code vs. Open Claw
1. Claude Code: 프로그램 '개발'에 특화된 AI 파트너
- 역할: 터미널이나 에디터(VS Code 등)에 내장되어 직접 코드를 짜주는 수석 개발자
- 특징: 증권사 API 연동, 복잡한 매매 알고리즘 작성, 백테스트 환경 구축 등 실제 코드를 작성하고 버그를 잡는 데 특화되어 있습니다. 프로젝트 전체의 파일 구조와 맥락을 이해하고 코드를 수정하기 때문에, 백지상태에서 주식 매매 프로그램의 뼈대를 만들고 기능을 구현하는 데 가장 좋은 선택입니다.
2. Open Claw: 24시간 '운영과 자동화'에 특화된 에이전트
- 역할: 내 컴퓨터나 서버에 상주하며 끊임없이 백그라운드에서 작업을 수행하는 자율형 AI 비서
- 특징: 텔레그램, 디스코드 등 메신저와 연동하는 프레임워크에 강점이 있습니다. 프로그램 자체를 바닥부터 코딩하기보다는, 완성된 매매 로직을 24시간 구동하면서 "현재 수익률을 텔레그램으로 보고해 줘"라거나 외부에서 메신저로 "지금 보유 종목 전량 매도해 줘" 같은 운영 및 통제 시스템으로 쓰기에 좋습니다.
추천하는 개발 전략: 두 도구의 조합
주식 자동 매매 프로그램은 '안전하고 정확한 코드'와 '안정적인 24시간 구동 환경'이 모두 필요하므로, 두 도구의 장점을 모두 살리는 방향을 추천합니다.
- 제작 (Claude Code): 먼저 Claude Code에게 지시하여 파이썬이나 Node.js로 주식 데이터 수집, 조건 검색, 매수/매도 로직 등의 핵심 코드를 완성합니다.
- 운영 (Open Claw): 완성된 코드를 Open Claw 환경에 올려 24시간 구동시키고, 텔레그램 등으로 봇의 상태를 실시간으로 모니터링하거나 원격 지시를 내리는 시스템을 구축합니다.
2. 어느 API를 쓸까?
1. 개발 편의성 1위: 한국투자증권 (KIS Developers)
현재 개발자들 사이에서 가장 추천을 많이 받는 API입니다.
- 장점: 최신 트렌드에 맞게 REST API와 WebSocket(웹소켓) 방식을 지원합니다. HTTP 요청으로 데이터를 주고받기 때문에 파이썬, Node.js 등 어떤 언어로든 쉽게 개발할 수 있습니다. 특히 맥(Mac)이나 리눅스 환경에서도 아무 문제 없이 돌아간다는 것이 엄청난 강점입니다.
- 단점: 키움증권에 비해 개인 개발자들의 예제 코드나 커뮤니티 자료가 상대적으로 조금 적은 편입니다. (하지만 최근 몇 년 새 자료가 아주 많아졌습니다.)
2. 전통의 강자 & 방대한 데이터: 키움증권 (Open API+)
국내 주식 자동 매매 생태계의 '고인물'이자 표준 같은 존재입니다.
- 장점: 검색하면 나오는 거의 모든 주식 자동 매매 튜토리얼이나 유튜브 강의가 키움증권을 기준으로 되어 있습니다. 참고할 소스코드가 무궁무진하고, 제공되는 데이터의 양과 질이 뛰어납니다.
- 단점: 개발 환경이 굉장히 까다롭습니다. 반드시 윈도우(Windows) OS를 써야 하고, 파이썬도 32비트 버전을 설치해야만 구동되는 구형 방식(COM/OCX)을 사용합니다. 맥북을 주력으로 쓰신다면 가상머신을 돌려야 하는 번거로움이 있습니다.
3. 익숙함과 수수료 혜택: 미래에셋증권 등 주거래 증권사
- 기존에 미래에셋증권의 MTS를 사용하시거나 CMA 계좌를 통한 수수료 혜택 등을 염두에 두고 계셨다면, 해당 증권사의 API(m.Club 등)를 활용하는 것도 좋은 접근입니다.
- 계좌 개설이나 자금이체 같은 번거로운 초기 세팅을 줄일 수 있고, 익숙한 환경에서 실거래를 모니터링하기 좋다는 장점이 있습니다.
3. 어느 라이브러리를 쓸까?
1. 미국 주식 및 글로벌 ETF 데이터
- yfinance (야후 파이낸스 기반 파이썬 라이브러리):
- 야후 파이낸스의 데이터를 코드 몇 줄로 쉽게 가져올 수 있는 전 세계적 표준 라이브러리입니다.
- 용도: 미국 주식과 ETF의 과거 가격 데이터(일봉, 분봉 등)를 수집하고 백테스트(과거 데이터로 수익률 검증)를 돌려보는 데 가장 완벽합니다.
- Financial Modeling Prep (FMP) 또는 Alpha Vantage:
- 무료 할당량을 제공하는 강력한 REST API 서비스들입니다.
- 용도: 단순 가격뿐만 아니라 기업의 재무제표(PER, PBR, 매출액 등), 실적 발표 데이터 등을 가져올 때 매우 유용합니다.
- FRED (미국 연방준비은행 경제 데이터):
- 용도: ETF 투자 전략을 짤 때 필수적인 거시경제 지표(금리, 환율, 인플레이션율 등)를 API로 제공합니다.
2. 국내 주식 데이터
- FinanceDataReader (FDR):
- 한국 주식 시장을 위해 만들어진 강력한 파이썬 오픈소스 라이브러리입니다. 한국거래소(KRX), 네이버 금융 등의 데이터를 알아서 수집해 줍니다.
- 용도: 국내 주식 및 ETF의 가격 데이터와 종목 코드(티커) 목록을 한 번에 정리해서 가져올 때 필수적으로 사용됩니다.
- pykrx:
- 용도: 단순 가격을 넘어 외국인/기관의 순매수 데이터, 공매도 현황, 투자자별 거래 실적 등 국내 시장 특유의 디테일한 수급 데이터를 긁어올 때 강력합니다.
3. 실시간 시세 및 매매 실행 (가장 중요)
- 증권사 API (예: 한국투자증권 Open API):
- 앞서 언급된 외부 데이터들은 주로 '과거 데이터 분석'이나 '종목 발굴'에 쓰입니다.
- 하지만 실제로 프로그램이 켜져서 "지금 당장 얼마인가?"를 확인하고 "지금 이 가격에 매수/매도 주문을 넣어라"라고 지시할 때는 무조건 증권사 API에서 제공하는 웹소켓(WebSocket) 실시간 데이터를 활용해야 속도 지연과 오류를 막을 수 있습니다. 한국투자증권의 경우 국내와 미국 주식 실시간 시세를 모두 API로 제공합니다.
추천하는 데이터 설계 구조
- 분석 및 백테스트: yfinance와 FinanceDataReader를 사용해 과거 데이터를 모아 매매 로직을 검증합니다.
- 실전 자동 매매: 검증된 로직을 바탕으로, 실제 장이 열렸을 때는 증권사 API 하나만 연결하여 실시간 시세를 받고 매매 주문을 처리합니다.
4. 한국투자증권 API 연결부터 시작
https://apiportal.koreainvestment.com/intro
한국투자증권 홈페이지에 GITHUB와 SWAGGER같은 TESTBED도 제공해주는데 아주 친절히 나와있음
※ 이 글은 개인적인 공부 및 정보 공유 목적에서 작성된 내용으로, 투자 권유나 재정적 조언이 아닙니다.
※ 시장 상황은 언제든 변할 수 있으며 글의 내용은 작성자의 주관적 해석이 포함되어 있습니다.
※ 투자에 따른 모든 결과와 책임은 투자자 본인에게 있으니, 반드시 본인의 판단과 추가적인 검토를 거쳐 결정하시기 바랍니다.
'주제 조사' 카테고리의 다른 글
| 260412_주간 현황 (1) | 2026.04.12 |
|---|---|
| 260412_퀀트 3 (0) | 2026.04.12 |
| 260405_브라질 경제 현황 종합 분석 (2023~2026년) (0) | 2026.04.05 |
| 260328_K-콘텐츠 시장 개요 (0) | 2026.03.28 |
| 260328_퀀트1 (0) | 2026.03.28 |