본문 바로가기
주식 자동 매매 프로젝트

[주식 자동 매매 프로그램] 개발 프로젝트 시작(feat. 조코딩 한국투자증권API 활용 코드)

by 카이로스의시간 2024. 11. 9.

조코딩 유튜브 채널을 구독해 놓고 자주 보는 편입니다. 

IT 업계의 신선한 소식을 발빠르게 알려주고 코딩을 통해 요긴한 서비스/기능을 만드는 법을 쉽게 알려주셔서요.

최근에 '주식 자동 매매 프로그램이 필요하겠다'라는 생각이 문득 들었는데요, 가장 먼저 조코딩 채널에서 관련 콘텐츠가 있는지 검색해 봤죠.

▲ 역시나 있더군요. 그래서 해당 영상의 내용을 마중물 삼아서 '주식 자동 매매 프로그램 개발' 프로젝트를 가동했습니다.

 

 

주식 자동 매매 프로그램을 만들려는 이유

제가 주식 자동 매매 프로그램이 필요하다고 느낀 이유를 먼저 말씀드려야겠네요:

 

1. 지금보다 훨씬 빠른 주기로 수익을 실현하려고 합니다

가치투자한답시고 오래 전에 사둔 주식들이 많이 있어요. 모두 마이너스 수익률이고, 오랜 기간이 지났음에도 좀처럼 매도 포지션을 잡을 기회가 오지 않더군요. 

 

 

이런 주식들을 처분하고(=손실을 실현하고), 얼른 원금을 만회해야 합니다. 그러기 위해서는 획기적으로 빠른 주기로 수익을 실현해야 합니다.

 


2. 직장인인 제가 주식 투자에 쏟을 수 있는 리소스는 제한적입니다

빠른 주기로 수익을 실현한다는 건 결국 단기투자를 하겠다는 것인데, 직장인인 제가 차트를 들여다보며 매수/매도 시그널을 포착하고 순간순간 이성적인 의사결정을 하기란 쉽지 않습니다.

'전업 투자라'라는 말이 괜히 있는 게 아니지요. 제가 직장을 그만두지 않는 이상 저에게는 저 대신 시그널을 포착하고 이성적인 의사결정을 내려줄 별도의 에이전트(=자동 매매 프로그램)가 필요합니다.

 

 

3. 단기투자에 필요한 정보 처리와 의사결정은 머신이 더 잘 합니다
제가 전업 투자자가 되어 차트를 분석하고 정보를 처리하는 데 전념한다고 해도, 이런 류의 일은 컴퓨터가 훨씬 더 잘 하는 일입니다. 

제가 이동평균선, 엔벨로프 밴드, 볼린저 밴드, 일봉 등을 들여다볼 때 제 머릿속에서는 차트가 그리는 '이미지를 처리'하게 됩니다. 사실은 차트 이면에 있는 숫자를 처리해야 함에도 불구하고 말이죠. 특정 기간(time window) 동안의 숫자 변화가 보여주는 시그널을 포착해야 한다는 겁니다. 이미지가 보여주는 시그널이 아니라 말이죠. 전자의 작업을 컴퓨터는 훨씬 더 잘 합니다.

 

 

어떤 걸 개발하려는 건가?

정확한 질문은 이것입니다: "왜 조코딩님이 가르쳐준 주식 자동 매매 코드를 그대로 사용하지 않고 추가적인 코딩을 하려고 하는가?"

제가 참고한 영상은 조코딩님이 한국투자증권의 협찬을 받아 <한국투자증권 Open API를 소개>하는 유료 광고 영상이었습니다.

▲ 맥OS에서도 사용할 수 있는 증권사 RESTful API가 존재한다는 사실만으로도 얼마나 위안이 되던지. (제가 맥북을 사용하고 있어서 키움증권이나 대신증권 API는 사용하지 못 합니다. 윈도우PC 사용하시는 분들은 타증권사 API로 자동 매매 구현하는 방법도 함께 공부해 보세요)

 

소개가 목적인 영상이었기 때문에 해당 콘텐츠에서 조코딩님이 제공해 주신 코드는 여러모로 부족한 점이 많았습니다. 이런 부분을 보완하는 게 제가 진행하는 개발 프로젝트의 목적입니다.

 

종목 선별 로직을 추가할 예정입니다

조코딩님이 공유해 주신 자동 매매 프로그램(코드)은 매수 대상 종목을 수동으로 입력해 넣어야 합니다. 완전한 의미의 자동 매매는 아닌 셈이지요.

예를 들어, ['삼성전자', '네이버', '이마트'] 이런 식으로 개발자가 미리 정의한 종목에 대해서만 매수 시그널을 탐색하는 겁니다.

저는 자동 매매 프로그램의 가장 중요한 역할이 '조건을 만족하는 종목을 선별해' 내는 데 있다고 생각합니다. 제 개발 프로젝트를 통해서, 에이전트가 매수해야 할 종목을, 혹은 종목의 리스트(pool)를 스스로 정의하게 만들 겁니다.

 

 

매수 전략은 더 정교화할 예정입니다

조코딩님의 코드는 '변동성 돌파 전략'을 적용해 특정 종목의 목표 매수 가격을 정의합니다. 그리고 종목의 현재가가 이 목표 매수가보다 위에 있으면 기계적으로 구매하도록 코드가 작성되어 있습니다.

아주 단순한 단일 전략(변동성 돌파 전략)만 사용하기 때문에 손실의 위험이 높습니다. 단기투자에는 변동성 돌파 전략 외에도 여러 가지 전략, 참고 지표가 존재합니다. 이런 지표들을 조합(앙상블)해 사용함으로써 손실의 위험을 방어할 수 있죠.

 

 

제 프로젝트를 통해 거래량, 이동평균가, MACD, 스토캐스틱, RSI, 볼린저 밴드 등 단기투자 전략에 동원되는 여러 지표를 에이전트가 활용할 수 있도록 개선할 겁니다. 

필요하다면 한국투자증권 API가 제공하지 않는 외부 데이터까지도 스크래핑해 사용하려고 해요. 이런 조치들을 통해 매수 전략을 정교화할 뿐 아니라 여러 전략들 간의 성과를 비교해 보며 최적의 해로 나아갈 수 있을 겁니다.

 

 

프로젝트 확장성을 고려해 코드를 모듈화하고 분리할 예정입니다

조코딩님은 자동 매매 프로그램의 모든 코드를 하나의 페이지에 작성하셨는데, 이는 코드 가독성이나 유지보수 측면에서 불리합니다. 

코드가 조금 더 잘 읽히도록, 그리고 에러 트래킹이나 유지보수에 유리하도록 변경하는 것도 제 프로젝트에 속한 과업입니다. 

무엇보다 중요한 건 제 프로젝트는 저의 투자에 대한 지식, 얻을 수 있는 데이터, 요구되는 기능 등이 바뀜에 따라 성장/확장될 것이기 때문에 코드는 '확장에 유리한(scalability)' 구조로 작성돼야 합니다. 

사실 이 부분이 제가 가장 약한 부분입니다. 저는 전문 개발자가 아니기 때문에, 내가 필요한 로직을 코드로 구현하는 것 자체는 어찌저찌 할 수 있지만 떡져 있는 코드의 성능(속도)을 개선하고, 적절히 모듈화하여에러가 잘 보고(로깅)되도록 조치하는 건 어려워요. 이 부분에 대한 공부가 많이 필요할 것 같습니다.

/

프로젝트를 진행하면서 단계별로 수행하는 과업들을 이 블로그에 계속 공유드리겠습니다. 간만에 새로운 개발 프로젝트 하려니 무척 설레네요.