티스토리 뷰

본 포스팅이 조금이나마 도움이 되셨다면 공감버튼 클릭 부탁드립니다.

 

본 그림과 본문의 내용과는 관계가 없습니다.

 

 

이전에 한번 주식 자동매매 프로그램을 만든적이 있었는데, 그땐 그냥 머리속에 생각나는대로 코딩을 했습니다. 그때 그때 필요한 것들 구글링하면서 짤막한 코드들 복붙해가며, 그렇게 그렇게 프로그램을 만들었습니다. 아마도 프로그램을 잘 만들어보자는 생각보다는 빨리 자동매매 프로그램 만들어서 돈을 왕창(?) 벌고 싶었던 것 같습니다.

 

어느정도 기본 골격이 완성된 후, 새로운 기능들을 덧붙여 나가려고 하니 문제가 발생했습니다. 설계없이 무작정 구현부터 하긴 했지만 그래도 나름 미래를 생각하며(?) 코딩을 했는데 어느순간이 되니 더이상 유지보수가 어려워지기 시작했습니다.

 

다시 주식 자동매매 프로그램을 만들기로 결심한 이 시점에 과거의 잘못을 되풀이 하지 말자는 마인드로 천천히 차근차근 설계부터 시작해서 프로그램을 만들어보려고 합니다. 내가 고객이 되어서 어떤 기능이 필요한지, 요구사항을 명세화하고 다른 한편으로 내가 개발자가 되어 고객의 요구사항을 만족시킬수 있는 SW를 설계/구현해보고자 합니다.

 

 

자동매매 프로그램 요구사항

여러가지 요구사항을 좀더 이해하기 쉽게 나름대로 큰 단위로 분류하고, 하위에 좀더 상세한 요구사항을 적어봤습니다. 아직 좀더 세심하게 다듬어야 할 필요가 있어보이긴 하지만 애자일리티를 살려서 일단 이정도로 요구사항을 마무리하고, 다음으로 System Requirement Specification, SW Architecture Design 단계로 넘어가려고 합니다.

 

1) Program Configuration

  • 자동매매/수동매매 모두 가능해야 한다.
  • 실투/모투 선택 가능해야 한다.
  • 여러가지 전략 및 알고리즘을 설정할 수 있어야 한다.

2) Risk Management

  • 주식시장에 큰 이슈가 터졌을때, 휴대폰으로 noti 를 받아야 한다 (카톡, 슬랙, 텔레그램, G-mail 기타 등등)
  • 큰 이슈가 터지면 보유하고 있는 주식을 일괄 청산해야 한다.
  • 외부에서 프로그램을 일부 조작할수 있어야 한다. (프로그램이 뻗으면 Auto-Restart 또는 매뉴얼 shutdown)
  • 증권사 API 허용치를 넘어서는 쿼리를 발생시키면 안된다.
  • 웹 크롤링을 할때, IP ban 당하지 않도록 주의해야 한다.

3) Data Management

  • 데이터는 백업되어야 한다. (어떤 문제가 발생해도, 데이터가 유실되면 안된다)
  • 프로그램 운영시 발생한 문제는 이슈관리 시스템으로 관리 되어야 한다.
  • 데이터 수집은 자동화 되어야 한다.
  • 주식 정보 + 회사 회계 정보가 상세하게 수집되어야 한다. (금융감독원 사이트에서?)
  • 해외 증시 데이터도 수집해야 한다 (미국, 중국, 일본의 주식, 선물, 옵션)
  • 기 존재하는 데이터와 "키"가 동일하다면 기존 데이터를 update하고 신규 정보면 단순 저장해야 한다.
  • 시계열 데이터에 공백이 생기면 안된다. (기존 데이터에 신규 데이터를 추가하면서 시계열에 공백이 생기면 안됨)
  • 주요 뉴스도 시계열 데이터로 저장해야 한다. (Global 이슈, 국내 정치, 사회, 경제 이슈 등등)
  • 주식을 다양하게 그룹핑 할수 있어야 한다. (테마, 업종, 사이즈, 매출, 영업이익, 대표제품, 관련업종, 관리대상, 주의대상, 등등)
  • 각종 데이터 업데이트가 손쉽게 진행되어야 한다. (업데이트를 쉽게 도와주는 툴 개발이 필요할 수 있다)
  • 1회성 데이터와 지속 보관해야 할 데이터를 구분해서 저장한다.

4) Security

  • 암호와 같이 개인정보는 git 으로 관리되면 안되고, 로컬에서 관리 될 수 있도록 해야 한다.
  • 프로그램이 해킹당하면 안된다.

5) Automation

  • 프로그램은 정해진 시간에 정해진 작업을 자동으로 해야 한다.
  • 예를 들어, 오전 7시가 되면 매매프로그램이 로딩되어 매매할 준비를 해야한다.
  • 장마감 이후에는 데이터 수집 프로그램이 로딩되어, 각종 데이터를 수집해야 한다.
  • CLI 를 제공해야 한다.

6) Visualization

  • 여러 통계 데이터를 시각화하여 보여줘야 한다.
  • 누적 매매 결과 데이터를 볼수 있어야 한다.
  • 긴급 이슈 발생 유무를 쉽게 확인할 수 있어야 한다.
  • Daily 실시간 매매 성과를 보여줘야 한다.
  • 급상승 검색어를 보여줘야 한다.
  • 상한가/하한가, 거래량 급증 등등 주요 종목을 보여줘야 한다.

7) Monitoring

  • 주식시장의 Risk를 정의하고, 발생여부를 모니터링 해야 한다.
  • 보유 종목에 대해서는 실시간 다양한 정보가 모니터링 되어야 한다.
  • 카톡, 슬랙, 텔레그램으로 체결 정보를 noti 받아야 한다.
  • 프로그램 Log를 수집해서 문제를 쉽게 찾을 수 있어야 한다.
  • 외부에서도 프로그램의 상태(status)를 확인할 수 있어야 한다.
  • 계좌 상태를 모니터링 할수 있어야 한다.

8) Algorithm/Trading Strategy/Back Testing

  • 과거의 투자에 대해 복기할 수 있어야 하고, 어떤점이 문제점인지 쉽게 파악가능하도록 많은 정보를 제공해야 한다.
  • 다양한 패턴을 자동으로 찾아서, 분석해야 한다.
  • 다양한 보조지표를 산출해낼수 있는 Feature를 구현해야 한다.
  • 가설을 세우고, 해당 가설을 검증할 수 있어야 한다.
  • 가설이 검증되면, 해당 가설을 프로그램에서 Configuration 할 수 있어야 한다.
  • 시계열 데이터 분석이 가능해야 한다.
  • 시간대별 유의미한 분석이 가능해야 한다.

9) Collaboration/Traceability

  • 체결되었을때 카톡, 슬랙, 텔레그램으로 noti를 받아야 한다.
  • SNS, 포털뉴스, 증권사 정보를 실시간 수집하여 급상승 검색어를 화면에 보여줘야 한다.
  • 증권사 시간과 프로그램 시간을 동기화 할수 있어야 한다.
  • jenkins + github 연동하여 프로그램 Q Test (정적분석, coverage, pep8, 유닛테스트) 를 수행해야 한다.
  • 요구사항( ?? ) -- 커밋(github) -- 이슈(github) 추적성이 관리 되어야 한다.

10) SW/HW Requirements

  • 키움증권 Open API+ 를 사용한다.
  • MongoDB를 사용한다. (스파크?를 사용한다)
  • Log수집을 위해서는 ELK를 사용한다
  • 통계 데이터 분석, 시계열 분을 위해 Pandas 를 사용한다.
  • 주식 파생 데이터 분석을 위해 talib 를 사용한다.
  • 웹 기반 구현이 필요한 경우 Flask 를 사용한다
  • main 개발언어는 Python 을 사용한다.
  • 유닛 테스트를 해야 한다. (pytest)
  • 실시간 데이터 r/w의 속도향상을 위해 SSD를 사용해야 한다.
  • 데이터 저장을 위해 용량이 충분해야 한다.
  • 개발환경이 변경되어도 기존 실행환경이 손쉽게 마이그레이션 되어야 한다.
  • 개발 소스는 git으로 버전관리 되어야 한다. (github)

 

 

현재 요구사항이 덜 구체적인 부분은 차차 개발을 진행하면서 좀더 구체화 할 필요가 있어보입니다. 요구사항을 확정하려고 하기보다는 주식 자동매매 프로그램에서 요구되는 사항들이 대략 어떤것들이 있는지 검토하는 수준에서 의미를 부여하려고 합니다. 시간이 지나면서 추상적인 요구사항은 좀더 상세하게 기술할 필요가 있고, 각 요구사항에 우선순위를 부여하여 반드시 구현해야 하는 항목과 유연하게 대응해야 하는 항목을 분류하여 개발 plan 을 짜야겠습니다. 마지막으로 요구사항이 좀더 구체화되면 (요구사항 -- 커밋) 간의 추적성을 위해 요구사항 각각의 항목에 ID를 부여해야겠습니다.

 

 

본 포스팅이 조금이나마 도움이 되셨다면 공감버튼 클릭 부탁드립니다.
댓글