프로젝트 실행 전략 수립하기
입코딩으로 ETF 전략 프로그램 구축하기를 진행하기 위해 일단 아래와 같이 물었습니다.
이런 식으로 [멀티 전략 통합 시스템: NAV 차익거래 + 모멘텀 + 평균회귀] 시스템을 개인 노트북에 구축하고 싶다면 어떤 식으로 프로젝트를 python으로 작성해 나가면 될까?
전체적인 프로그램의 디렉토리 구조와 어떤 것들을 사전 준비해야 하는지 묻기 위함입니다. 물론 이전에 멀티 전략 통합 시스템이라는 것도 클로드 AI와 여러 번의 대화를 통해 얻어낸 결과입니다.
전체 프로젝트의 구조
�️ 시스템 구조
etf_nav_system/
├── config/
│ ├── config.json # 시스템 설정 파일
│ └── config.example.json # 설정 예시 파일
├── database/
│ ├── __init__.py
│ ├── schema_creator.py # 데이터베이스 스키마 생성
│ └── data_manager.py # 데이터 저장/조회 관리
├── collectors/
│ ├── __init__.py
│ └── pykrx_etf_collector.py # PyKRX API ETF 수집기
├── utils/
│ ├── __init__.py
│ ├── config_loader.py # 설정 로드 유틸리티
│ └── logger.py # 로깅 유틸리티
├── data/ # 데이터 디렉토리
├── logs/ # 로그 디렉토리
├── reports/ # 리포트 디렉토리
├── backups/ # 백업 디렉토리
├── main_collector.py # 메인 ETF 수집기
├── etf_nav_monitor.py # NAV 모니터링 시스템
├── etf_dashboard.py # 웹 대시보드
├── start_etf_system.py # 통합 시작 스크립트
├── requirements.txt # 필수 라이브러리
└── README.md # 프로젝트 문서
� 프로젝트 실행 순서
▣▣▣ � 프로젝트 실행 순서
▋ Phase 1: 기반 구축 (1-2주)
1. 프로젝트 구조 생성
2. 데이터 수집 모듈 개발 및 테스트
3. 기본 데이터베이스 구축
▋ Phase 2: 전략 개발 (2-3주)
▋ Phase 3: 통합 시스템 (1-2주)
▋ Phase 4: UI 및 모니터링 (1주)
▋ Phase 5: 테스트 및 최적화 (2-3주)
Phase 1: 기반 구축 (1-2주)
이 작업이 금방 끝날 줄 알았는데 정말 1주일 정도가 걸렸네요. 주중에는 틈틈이 퇴근하고 하고 어제 꾸준히 잡고 있었는데 어제가 주식이 쉬는 날이라서 계속 음수 에러나 64비트 오류가 발생해서 삽질을 하다가 오늘 겨우 이렇게 작성을 완료하고 현재로서는 정말 만족하지는 않지만 한국 주식시장의 ETF 종목의 기본정보와 시세정보는 아래와 같이 가져올 수 있는 프로그램을 만들었습니다.
그동안 저를 애먹게 했던 에러 부분들을 정리해서 다른 분들이 도전할 때 조금이나마 도움이 되었으면 하는 마음으로 이 글을 적습니다.
1. 한투증권 Open API사용
처음 도전은 제가 계좌를 가지고 있는 한투증권 API를 사용해서 종목 정보와 시세 데이터를 가져오면 좋겠다고 생각했습니다. 그런데 이상하게 예제데이터들은 잘 작동하는데 18개 종목 외의 다른 종목에 대해서 가져오지 못하는 겁니다. 이걸로 정말 주중 퇴근 이후 시간을 모두 날렸다고 해도 과언이 아닙니다. 제가 발견한 부분은 제가 사용하는 것은 실제 거래 계좌가 아니라 모의 투자 계좌를 만들어서 API키를 받아더니 모의투자의 계좌의 경우 아래와 같이 데이터를 주지 않는 것 같다는 걸 금요일 오후에나 알게 되었습니다.
그래서 pykis api에서 pykrx api로 변경해서 작업을 했습니다. 우리나라가 대단하다고 느끼는 것이 이런 api를 벌써 만들어서 오픈 소스로 공개해 두어서 너무나 편하게 사용할 수 있다는 사실이었습니다.
2. 공휴일 데이터 없음
어제부터 오늘까지 가장 문제로 대두되었던 것은 어제가 토요일, 오늘은 일요일이라는 사실입니다. 한마디로 장이 열리지 않는 날이었습니다. 그래서 계속 데이터를 가져오는데 음수 에러가 발생하거나 64비트 오류가 발생하고는 했습니다. 어제 내내 이렇게 고치고 저렇게 고치고 했으나 실패하였는데 운동을 하면서 느낀 생각이 혹시 오늘이 토요일라서 안 되는 걸까? 였습니다. 그래서 토요일, 일요일, 공휴일은 최근 영업일의 종가로 가져오게 수정해서 오늘 아침 성공할 수 있었습니다.
3. 향후 계획과 프로젝트 진행 방향
전체 ETF 종목정보와 시세 데이터를 수집했다고는 하지만 현재 제가 가져오고 싶은 모든 ETF 기본 데이터(네이버 증권 페이지의 ETF 기본 정보 데이터 수준)를 가져오지는 못 하고 있어서 이에 맞게 일단 DB 스키마를 변경할 계획입니다. 그리고 이 기본 데이터와 시세 데이터를 가지고 전략을 수립하여 매매하는 부분을 구현하고 이를 웹 대시보드 형태로 표현해서 보여주고 추후에는 이 전략의 백테스트까지 입코딩(Vibe Coding)으로 구현해볼 생각입니다.