6. 목차
이번 파트에서는 Excel 파일에 담아둔 20개의 종목들을 증권사 API를 통해 자동매매를 해볼거예요 !
6.1 모의투자 계정 만들기
API(Application Programming Interface)는 서로 다른 소프트웨어나 애플리케이션 간의 정보 교환과 상호작용을 가능하게 하는 도구나 프로토콜입니다.
- 간단히 말해, API는 다양한 시스템이나 애플리케이션이 서로 '대화'할 수 있도록 돕는 중간 매개체 역할을 수행합니다.
- 이러한 API를 통해 증권사 시스템으로부터 데이터를 요청하고 계좌로부터 매매를 요청할 수 있는 거예요.
저는 한국투자 증권의 API를 활용하여 매매를 자동화했으며, 실제 투자에 앞서 충분한 테스트를 위해 모의투자 계좌에서 작업을 진행했습니다.
APP KEY와 APP SECRET은 API를 통해 증권사 시스템 및 계좌에 접근할 수 있는 인증 정보로, 아이디와 비밀번호와 유사한 역할을 합니다.
- 계좌번호와 함께 이 인증 정보가 있으면 매매가 가능하기 때문에, 이들은 절대로 타인에게 노출되어서는 안 되는 중요한 정보입니다.
인증 정보를 사용할 때는 keyring, JSON 파일, 환경 변수 등을 활용하여 노출 위험을 최소화하는 것이 중요합니다. 이 방법들은 중요한 인증 정보를 코드 내에 직접 작성하지 않고 안전하게 관리할 수 있도록 도와줍니다.
- Keyring: 운영 체제의 보안 저장소를 사용하여 암호, 키, 인증 정보를 저장하고 관리합니다. 이 방식은 인증 정보를 코드나 파일에 직접 저장하지 않으므로 보안성이 높습니다.
- JSON 파일: 인증 정보를 JSON 형식의 파일에 저장하고, 이 파일을 읽어서 인증 정보를 사용합니다. 파일을 안전한 위치에 저장하고, 접근 권한을 제한하여 보안성을 높일 수 있습니다.
- 환경 변수: 운영 체제의 환경 변수를 사용하여 인증 정보를 관리합니다. 환경 변수에 인증 정보를 저장하면, 애플리케이션이 실행될 때 해당 정보를 불러와 사용할 수 있으며, 코드 내에 직접 노출되지 않습니다.
6.2 접근 토큰 및 해쉬 키 발급받기
- App Key와 App Secret을 이용해 접근 토큰을 발급 받을 수 있으며, 이 토큰을 통해 계좌에 접근이 가능합니다.
- 주문, 정정, 취소와 같은 작업에는 보안을 강화하기 위해 추가적으로 해시키가 필요합니다.
※ 이러한 보안 요소들은 App Key와 App Secret을 활용해 적절한 쿼리를 작성함으로써 얻을 수 있으며, 쿼리 작성 방법은 KIS Developers의 공식 문서에서 확인할 수 있습니다.
API를 통해 테스트 목적으로 삼성전자 주식 10주를 매입해 보았습니다. 결과창에 "모의투자 매수주문이 완료되었습니다."라는 문구가 표시되어, 주문이 성공적으로 처리되었음을 확인할 수 있습니다.
시장가 매수 주문임에도 불구하고 같은 가격으로 두 번에 나눠서 체결된 이유는 모의투자 환경이기 때문입니다.
- 매수 주문을 입력한 후, 실제 투자에서 누군가가 10주를 매입해야만 제 모의투자 계좌에서도 매입이 반영됩니다.
- 주문을 입력한 시점부터 실제로 10주 이상이 매입되었다면, 제 계좌의 체결도 10주로 한 번에 이루어졌을 것입니다.
- 하지만, 이 경우에는 제 주문 입력 후 8주와 2주로 나누어 체결된 것으로 보입니다.
자동매매 시스템을 구축하기 위해 인피니티 스톤으로 여러 핵심 함수들을 만들었습니다. 이중 주요 함수들을 살펴보면 다음과 같습니다:
- 현재가 함수: 종목의 현재가를 구합니다. 이 함수는 예산 내에서 각 종목을 얼마나 매입해야 하는 지 계산하는 데 필요합니다.
- 계좌잔고 조회: 포트폴리오를 리밸런싱하는 데 필수적인 기능으로, 포트폴리오에 포함된 종목을 매수하고 그 외 종목을 매도하는 결정을 내리기 위해 현재의 계좌 보유 종목 및 계좌 잔고를 확인합니다.
- 주문 함수: 실제로 주문을 실행하는 함수입니다. 가격 변동을 최소화하기 위해 최유리 지정가 주문 방식을 사용합니다. 한 주씩 매매합니다.
이해를 돕기 위해 최유리 지정가에 대한 예시를 들겠습니다.
- 예를 들어, 왼쪽 그림에서 400주를 시장가로 매도할 경우 일반적으로 9800까지의 매물을 소화해 모두 체결됩니다.
- 하지만 최유리 지정가 매도를 사용하면 매도 창의 제일 위인 최우선 매수호가에 100주만 매도되고 나머지 300주는 대기 매도 물량으로 쌓이게 됩니다.
- 이는 최유리 지정가가 가격 변동을 줄이는 한편, 전체 주문량이 한 번에 체결되지 않을 수 있다는 점에서 차이가 있습니다.
- 프로그램 매매를 진행하면서도 최소한의 가격변동을 가하는 중요한 매매 방식인 것 같습니다!
6.3 API를 통한 매매 자동화
매매 자동화 프로그램의 워크플로우는 다음 단계로 구성됩니다:
- 엑셀 파일에서 모델 포트폴리오를 불러옵니다.
- 현재 계좌의 보유 종목과 자산 정보를 확인합니다.
- 총 자산 5억 원의 98%인 4억 9천만 원을 투자 금액으로 설정하고, 이를 20개 종목에 균등하게 배분합니다. 이에 따라, 각 종목당 투자 금액은 약 2450만 원이 됩니다.
- 설정된 투자 금액을 바탕으로 각 종목의 목표 보유 수량을 계산합니다.
- 현재 보유 중인 종목 수량과 비교하여 필요한 투자 수량을 결정합니다. 이는 목표 수량에서 현재 보유 수량을 뺀 값으로 계산됩니다.
- 매매 시간을 오전 9시부터 오후 3시까지로 설정하고, 이 시간 동안 또는 모든 종목이 목표 수량에 도달할 때까지 매매 스케쥴을 실행합니다.
이 과정을 통해 프로그램은 자동으로 포트폴리오를 관리하고, 설정된 전략에 따라 매매를 진행합니다.
현재 보유하고 있는 잔고는 다음과 같습니다
- 삼성전자 주식은 테스트용으로 매수된 종목.
- 실수로 원주가를 기준으로 포트폴리오를 만들고 매수한 종목. (악! 또 PTSD가ㅎㅎ 주가데이터 크롤링편 참고...)
그래도 포트폴리오 리밸런싱을 테스트하는 데에는 좋은 환경인 것 같습니다!
(비록 이날 늦게 돌리기 시작했다곤 하지만 그걸 감안해도 느린감이 있습니다.
그리고 당장 다음날이 프로젝트 마무리 날이여서)
한 주씩 매매하던것을 10주씩 매매하는 것으로 재설정하였습니다!!
총 4억원 어치의 주식을 매수했습니다!!!
- 현재 계좌에 보유한 종목들을 모델 포트폴리오의 목표 수량과 비교해 본 결과, 대부분의 종목은 목표에 근접해 매입된 상태입니다.
- 빨간 박스로 표시된 몇몇 종목을 6주씩 추가로 매도하면, 모델 포트폴리오에 맞춰 20개 종목만으로 구성된 포트폴리오를 완성할 수 있을 것으로 보입니다.
- 마지막 거래일에 10주씩 매매를 시도하여서, 각각 6주가 매도되지 않은 상태로 남아있는 것 같습니다.
- 초록 박스로 표시된 종목은 에스텍으로, 해당 종목은 약 1800주가 남아있는데, 이는 둘째 날의 실제 총 거래량이 1138주였기 때문에 1106주만 매입할 수 있었습니다... (근데 아무리 좋은 주식이라도 일일 거래량이 총 1138주 밖에 안되는 종목이 제 모델 포트폴리오 안에 있다는게 약간 무섭네요...ㅎㅎ)
일단 이렇게 해서 프로젝트가 마무리가 되었습니다!!
회고
이번 프로젝트를 통해 달성한 주요 목표입니다.
- 조엘 그린블라트의 마법 공식 활용: 국내 주식을 대상으로 마법 공식을 적용하여 포트폴리오를 구성하는 것은 성공적으로 이루어졌습니다. 이 경험은 유명한 공식을 활용해 실제 포트폴리오를 구성해보는 유익한 시도였습니다.
- 매매 자동화를 통한 패시브 인컴 실현: 매매 자동화를 통해 패시브 인컴을 얻는 것은 저의 장기적인 목표 중 하나입니다. 이번 프로젝트로 이 목표를 완전히 달성하기는 어렵지만, 최종 포트폴리오에 대한 백테스팅과 모의 투자 결과를 통해 자동화된 투자의 가능성을 앞으로 더 탐색해보려고 합니다!
- 퀀트 분석에 대한 깊은 이해: 이 프로젝트는 퀀트 분석에 대한 심층적인 이해를 높이는 데 크게 기여했습니다. 증권 데이터 분석 및 투자 종목 선별에 자신감을 가지고 접근할 수 있는 좋은 기회였습니다.
프로젝트를 진행하며 느낀 아쉬운 점입니다.
- 데이터 업데이트 시점: 최근 영업일 기준으로 데이터를 사용했으나, 실제로는 최근 영업일보다 2일 이전의 데이터를 활용했습니다. 이는 시간적 버퍼가 필요했던 부분이였으나, 데이터 소스의 업데이트 시간을 추적해서 개선해야겠습니다.
- 클라우드 컴퓨팅을 통한 완전한 자동화: 처음에는 완전한 자동화 프로세스 구축을 목표로 했으나, 연간 한 번의 리밸런싱과 완전 자동화의 필요성에 대한 고민으로 이 부분은 진행하지 않았습니다. 퀀트 트레이딩에서 완전한 자동화와 인간의 개입 사이의 균형이 중요하다는 점을 느꼈습니다. 그리고 트레이딩 전략에는 완전한 자동화 프로세스 구축이 필요할 수 있으나 개인이 진행하는 프로젝트 단위에서는 컴퓨터에 많은 부하가 오는 작업이 아니다 보니 클라우드 컴퓨팅보단 전용 노트북 하나 구비해서 돌리는게 바람직하다는 생각이듭니다.
- 미국 시장에서의 프로젝트 실행: 이 프로젝트를 미국 시장에서 진행하지 않은 것이 아쉽습니다. 미국 시장은 글로벌 자본을 대거 흡수하는 큰 시장이며, 한국 시장에서보다 가치 투자에 있어서 더 많은 기회를 준다고 생각하거든요.
블로그 작성을 여기서 마무리하고, 모의투자 결과는 1년 후에 확인할 예정입니다. 그 사이, 트레이딩 전략을 이용한 포트폴리오 설계를 기획해보도록 하겠습니다!!!
추가 +)
포트폴리오 마무리한 날짜(3월 19일) 이후 현재 날짜(3월 28일)까지
코스피 상승률은 3.37%, 코스닥 상승률은 9.7%.
내 포트폴리오는 2.86%....
음....
...
아직 섣불리 판단할 수 없습니다!! 이제 겨우 1주일 반 지나간 것이죠!
그리고 포트폴리오 전략은 장기적인 것이니까요!
주식시장에서는 일희일비하지 말라는 유명한 격언도 있잖아요?ㅎㅎ
1년 뒤에는 분명 엄청난 수익률이 기다리고 있을 거예요!
'퀀트' 카테고리의 다른 글
[퀀트 프로젝트] 멀티팩터 포트폴리오 (4) | 2024.03.27 |
---|---|
[퀀트 프로젝트] 퀀트 전략을 통한 종목 선정 #2 (0) | 2024.03.26 |
[퀀트 프로젝트] 퀀트 전략을 통한 종목 선정 #1 (2) | 2024.03.26 |
[퀀트 프로젝트] 재무 데이터 크롤링 및 가치지표 계산 (2) | 2024.03.26 |
[퀀트 프로젝트] 주가 데이터 크롤링 (2) | 2024.03.26 |