Solo Project · Quant / Algo Trading

Stock Trade

한국 주식(KRX) 자동매매·적립식 자동투자 시스템. 백테스트와 라이브가 같은 Strategy·Broker 인터페이스를 공유하고, 워크포워드 OOS 검증으로 과적합을 걸러낸다. "예측은 안 된다"는 정직한 결론에 도달한 뒤, 진짜 가치를 검증 하니스와 규율 자동화로 재정의한 프로젝트.

Pythonpykrx · ParquetKIS OpenAPIBacktest EngineWalk-ForwardGBDT (ML)

핵심 기술 구현

비용 반영 백테스트, 워크포워드 OOS 검증, 리스크 레이어까지 — 예측이 아니라 검증을 자동화한 시스템

비용 반영 백테스트 엔진

SimBroker가 수수료·거래세·슬리피지를 반영해 자산 곡선과 성과 지표를 산출. 실데이터(pykrx)를 Parquet으로 적재해 삼성·하이닉스·카카오 2018년~ 구간을 검증.

워크포워드 OOS 검증

in-sample 수익률이 아니라 out-of-sample 일관성으로 전략을 판단. momentum은 in-sample +472%였지만 OOS +21%(6폴드 중 4폴드 손실)로 과적합임을 적발해 탈락시킴.

리스크 매니저

손절·익절·종목별 비중 제한·일일 서킷브레이커(day_state 영속화). 200일 이평 레짐 필터를 넣어 최대낙폭(MDD)을 -33%에서 -20%로 개선한 것을 측정으로 확인.

ML 도입 — 정직한 보류

GBDT 상승확률 모델은 in-sample 정확도 80%·AUC 0.89로 화려했지만 OOS AUC 0.518(동전 던지기), 백테스트 복리 -24%로 규칙 전략에 완패. 일봉+기술지표만으론 방향 예측이 안 된다는 결론을 그대로 문서화.

KIS 실계좌 연동

한국투자증권 REST 연동 — 토큰 캐싱, 레이트리밋, 현재가·잔고·현금주문·정정/취소. 모의계좌로 라이브 루프(잔고→현재가→손절/익절→시그널→리스크→주문)를 실증.

적립식 자동투자 (DCA)

능동매매가 아닌 적립식 자동투자를 "부의 엔진"으로 재정의. 매달 새 납입금을 목표 비중 미달 ETF에 우선 투입(매수 전용=세금 효율)하고, 연 1~2회 전체 리밸런싱.

아키텍처 하이라이트

01

백테스트 = 라이브 인터페이스 공유

동일한 Strategy·Broker 인터페이스를 백테스트와 실거래가 함께 사용. 모드 전환은 SimBroker ↔ KisBroker 구현체 교체만으로 이뤄져, 검증한 그대로 라이브에 올림.

Strategy · Broker (SimBroker ↔ KisBroker)
02

워크포워드 검증 하니스

전략 선택 기준을 in-sample이 아닌 OOS 폴드 일관성으로 고정. bollinger는 OOS 일관성 67%로 채택, momentum은 과적합으로 탈락. 판단 근거를 사람 직관이 아닌 검증 스크립트로 이관.

walkforward.py ★ (OOS = 신뢰 기준)
03

리스크 레이어 분리

시그널과 별개로 손절·익절·비중·서킷브레이커를 독립 레이어로 배치. 일일 서킷브레이커 상태를 영속화해 재시작 후에도 당일 한도를 유지.

risk_manager · day_state 영속화
04

단계별 실증 (Phase 0~7)

골격·백테스트 → 실데이터 적재 → KIS 연동 → 라이브 루프 → 주문 정정/취소 → 전략 검증 → 알림까지 단계별로 모의계좌 실증. Phase 2를 통과 못 한 전략은 라이브에 올리지 않는다는 규칙.

paper mode 우선 · live는 명시적 전환
67%
OOS 일관성 (채택)
0.518
ML OOS AUC (보류)
-20%
MDD (레짐필터 후)
paper
모의계좌 실증

기술적 의사결정

DECISION 01

왜 "예측"이 아니라 검증 하니스인가

일봉+기술지표 기반 능동매매는 워크포워드에서 buy&hold를 이기지 못했고 ML도 OOS에서 무작위였음. 여기서 프로젝트의 가치를 "수익 예측"이 아니라, 어떤 전략이든 과적합인지 걸러내는 검증 하니스와 규율 자동화로 재정의.

DECISION 02

왜 워크포워드(OOS)로 판단하나

in-sample 수익률은 과적합을 숨김 — momentum은 in-sample +472%지만 OOS는 +21%(대부분 손실)였음. 전략 채택 기준을 out-of-sample 폴드 일관성으로 고정해, 백테스트 착시에 속지 않는 의사결정 체계를 구축.

DECISION 03

왜 잘 나온 ML을 보류했나

GBDT 모델이 in-sample AUC 0.89로 화려했지만 OOS AUC는 0.518(동전 던지기)이었음. 화려한 in-sample 지표에 끌려 라이브에 올리는 대신, "일봉 예측은 한계가 뚜렷하다"는 결론을 인정하고 도입을 보류. 하니스는 남겨 더 나은 피처가 생기면 같은 방식으로 재검증.

DECISION 04

왜 적립식 자동투자가 본체인가

검증 결과 능동매매의 엣지가 없다고 판명된 이상, 실제 자산 형성은 예측이 아니라 규율에서 나온다고 판단. 매달 비중 미달 종목에 매수 전용으로 투입하는 DCA+리밸런싱을 자동화해, 감정·타이밍을 배제한 시스템으로 굴러가게 설계.