[인공지능 주식매매] 프로그램 구성 및 운용 방안
이번 글에서는 주식 자동 매매 프로그램의 구성 및 운용 방안에 대한 내용을 정리해보기로 한다. 보통의 경우 주식 매매 프로그램을 개발한다고 한다면 실행 파일 하나를 개발 하는 것으로 생각하기 쉽다. 하지만 필자의 경우 여러개의 프로젝트를 묶어 하나의 솔루션으로 개발 진행한다. 개발 초기에는 인공지능 알고리즘을 개별적 프로젝트로 개발하고 이를 가변적으로 조합하여 전체 솔루션을 구성 할 수 있도록 하려고 하였으나 쓸데 없이 복잡성만 커지고 성능은 떨어지며 기능 개발에 시간만 더 소요되었다. 지금은 자잘한 프로젝트 몇개를 제외하면 크게 3개의 프로젝트가 하나의 솔루션을 이루고 있다.
1. 런처
2. 메인 프로그램
3. 최적화 프로그램
[1. 런처]
메인 프로그램을 시작시켜주고 메인 프로그램의 상태를 모니터링해주는 프로그램이다. 모니터링 기능은 나중에 또 다른 글을 통해 설명할 예정이며, 런처의 주요 기능은 메인 프로그램의 실행이다. 주식 투자의 주요 기능을 담당하는 메인 프로그램을 계속 띄워두고 실행하는 방법도 있겠지만 필자의 경우 매일 매일 메인 프로그램을 켰다 껐다 하고있다. 하나의 프로그램이 1년 365일 계속해서 정상적으로 실행되도록 하는 것은 상당하 어렵다. 메모리를 할당해서 사용했다가 해제하지 않는 버그를 가진 로직이 있다고 가정했을때 해당 로직이 실행 될때마다 전체 메모리 사용량이 조금씩 늘어가게 될테고 어느 순간에는 허용 가능한 정도를 넘어서서 오동작을 일으킬 수 있다. 또한 프로그램을 장 시작시 초기에 실행되어야 하는 기능들이 있을텐데... 어제 실행하던 sw가 해당 기능을 실행할때와 오늘 처음 실행한 sw가 해당 기능을 실행할때는 서로 상이하게 동작되어야 하는 부분이 있을 수 밖에 없다. 한번 실행했던 로직이 또 한번 실행하게 될 때 문제 상황이 있을지 없을지 여부도 검증 되어야 한다.
이러한 문제들을 손쉽게 해결하는 방법은 메인 프로그램을 매일 매일 켰다 껐다 하는 것이다. sw가 종료되게되면 os에서 메모리를 잘 회수해갈테고 장 시작시 실행되는 로직은 항상 최초 한번만 실행되는 로직이고... 등등 여러 장점에의해 프로그램의 안정성을 높이기에 유리한 면이 많다.
게다가 런처 사용을 통해서는 증시 개장, 폐장, 휴장일에 대한 예외처리가 쉽다. 증시가 열리지 않는 날에는 메인 프로그램을 실행시키지 않도록 하는 기능을 런처에 추가하게되면 메인 프로그램은 자신이 실행될때는 항상 장이 열릴 것으로 생각하고 기능을 실행하면 된다.
[2. 메인 주식 매매 프로그램]
메인 프로그램의 주요 용도는 장 중 인공지능 알고리즘을 바탕으로 각 종목에 대한 매수/매도 여부를 판단해서 실제 매매를 실행함이다. 그리고 추가적으로 장중에만 획득 가능한 데이터가 있다면 해당 데이터의 수집의 용도로도 기능 할 수 있을 것이다. 장 중 매수/매도에 대한 빠른 판단을 주요 목적으로 하며 해당 기능에 집중하여 최적의 성능을 발휘할 수 있도록 sw가 개발 되어야 할 것이다. 필자의 메인 프로그램은 해당 기능에 추가로 매매 현황에 대한 웹상의 정보 공유 기능도 포함하고 있다. 물론 해당 정보 공유 기능은 가장 우선 순위를 낮추고 여유 시간이 있는 순간에만 기능하도록 하여 주식 매매 성능을 최대한 떨어뜨리지 않도록 하고 있다.
[3. 최적화 프로그램]
메인 주식 프로그램이 매수/매도에 대한 판단을 주요 목표로 한다면 최적화 프로그램은 장중 획득한 정보와 장 마감 이후 획득한 정보를 통한 인공지능 알고리즘의 최적화를 주요 기능으로 가진다. 최근 인공지능 알고리즘 중 가장 주목받고 있는 분야는 학습분야인 것으로 보인다. 필자의 주식 매매 인공지능 알고리즘 역시 학습 기능(현재로서는 그 유명한 딥러닝은 안쓴다)을 가지고 있으며 매일 매일의 주식 데이터를 바탕으로 최적의 매매 전략을 학습하도록 하고 있다. 인공지능 알고리즘이 대개 그렇지만 학습의 완성은 없다. (물론 인공지능 알고리즘의 특성에 따라 과도한 학습에 의해 문제가 발생하는 상황도 적지 않지만...) 최대한 많은 데이터로 계속해서 학습하고 최적화를 계속적으로 할 필요가 있다. 이에 인공지능의 최적화에 적합하도록 기능 구현된 프로그램을 별도로 가지도록 한다. 최적화 프로그램의 경우 많은 데이터를 계속적으로 사용해야 하기에 많은 메모리를 필요로 하고 다음날 장이 시작하기 전까지 계속적으로 실행되면서 최적화를 진행한다. 메인 프로그램과 최적화 프로그램을 서로 나누게 되면 각각의 목적 달성을 위한 각각의 프로그램 개발이 용이해지는 면이 있다.
메인 프로그램과 최적화 프로그램을 나눈 또 다른 주요한 이유는 sw의 업데이트이다. 인공지능의 최적화를 위해서는 sw가 계속적으로 실행이 되어야 하는데 sw개발 또는 업데이트를 위해서는 sw 실행이 중단되어야 한다. 어쩌다 한번씩 메인 sw가 변경된다면 상관이 없겠지만 잦은 업데이트가 있다면 인공지능의 최적화의 실행횟수는 상당히 낮아질 수 있다. 메인 프로그램의 업데이트시에도 최적화는 계속해서 이루어질 수 있도록 메인 프로그램과 최적화 프로그램을 구분해서 개발한다.
'인공지능 매매 > 인공지능 매매 전략' 카테고리의 다른 글
[인공지능 주식매매] 용도별 증권사 API 추천 (2) | 2020.11.28 |
---|---|
[인공지능 주식매매] 매매 주기에 대한 고찰: 하루 단위 3구간 매매 (0) | 2020.11.26 |
[인공지능 주식매매] 실행 모드 구분 및 데이터 백업 (0) | 2020.11.23 |
[인공지능 주식매매] 주식 자동 매매 시스템 개발 및 운용 환경 (0) | 2020.11.20 |
[인공지능 주식매매] 프로그램 UI (0) | 2020.11.19 |