지난 3월부터 12월까지 중앙동아리에서 주식 자동매매기를 만들었다. 여러가지 지식적인 부족함, 진행 과정에서의 방향성 잃기 등 다양한 요인들로 인해 개발하기 쉽지 않았고 실질적으로 개발한 기간은 얼마되지 않는다. 그리고 깃허브에 올린 기간도 2학기는 되어서야 시작했기에 많이 아쉬웠던 개발이었다. 이에 대해서 기록하면 굉장히 좋을 것 같다는 생각이 들어 남겨본다.
이에 대해서도 이 프로젝트에 들어올때 확정된 것이 아니었다. 그래서 처음부터 다 정해야 했다. 이 프로젝트를 들어온 계기는 파이썬으로 프로젝트 할 수 있는 가능성이 컸기 때문이다. 그리고 요즘엔 파이썬으로 만들 수 있는게 많아졌기에 파이썬으로 만들기로 하였다.
이 과정까지는 타동아리와 연합하기도 하였는데 이번 개발은 키움 api를 이용하게 되었다. 굉장히 여러 api들이 존재하였지만 공식문서도 존재하고 함수에 대한 다양한 정보를 제공한다는 점에서 굉장히 편리했다. 키움api는 KOA Studio라는 것을 이용해 api 접속도 해보고 관련 함수를 찾을 수 있기에 좋았다.
파이썬으로 알고리즘 공부를 하긴 했지만 클래스는 낯설었던 작업이었다. 게다가 처음부터 api를 잘 모르는 상태에서 시작하려니 막막하기도 했다. 그래서 초기에는 흥미가 더 안생겼던 것 같다. ui도 코드로 하나하나 구현하고자 하니 너무 어려웠고 내용 찾기란 너무 어려웠다. 학기중에 하다보니 어정쩡하게 넘어가게 되었고 방학이 되었다.
하나하나 코드로 구현하다보니 너무나 코드가 길어졌다. 그리고 굉장히 비효율적이었다. 그래서 새로운 참고 자료를 찾아서 진행했다. 당시 참고했던 자료는 현재는 위키독스에서 비공개 처리가 된 것 같다.
ui도 처음부터 다시 만들었다. 이때 anaconda 터미널에서 designer라는 것을 사용했는데 방법을 알고나니 굉장히 편했다. 하나를 수정하게 되더라도 마우스로 쉽게 이동할 수 있기에 코드를 하나하나 뜯을 필요가 없었다. 배치를 좀 더 깔끔하게 만들 수 있었다. 참고해서 만든 코드를 바탕으로 하나씩 쌓아갈 수 있게 되었다.
이 책을 통해 수동매매, 잔고조회(계좌, 종목별), 기본적인 조건식(급등주 매수)가 만들어졌다.
처음에는 책에 있던 급등주 매수를 만들었다. 몇가지 변수만 건드려서 이용했었고 매수 기능에서는 잘 작동을 했다. 그러나 자동매매기는 매도 구현도 해야 했다. 키움 api에서는 일정 시간 대기가 필요했는데 3.6초라는 시간이 걸렸다. 에러 없이 하기 위해선 매번 매수+3.6초+매도+3.6초가 소요되었다.
이때 나오게 된것이 스레드였다. 수업시간에 잠깐 다뤘던 부분이었다. 그래서 시도하게 되었다. 여러 자료를 찾았다. 여기서 1-2주 지체가 되었었는데 정확한 정보도 많이 부족했기 때문에 불가능을 인지하기가 쉽지 않았다. 한두개는 구현을 하고 있었는데 결론적으로 키움api에서는 안된다는 것을 확인하고 나서야 마무리했다.
이게 가능하다는 것을 나중에 알았다. 이걸 알기전까진 유튜브 보면서 스크린 번호도 다르게 해보고 csv 파일에 이전 데이터 저장해나가면서 주식코드 뽑아내 구독하는 방식으로 진행했다.
나중엔 이것이 뭔가 이상해보였다. 몇달뒤에 다시 봤더니 너무 비효율적이고 어떻게 해야할지 막막했다. 조건식 매매 코드가 있지 않을까 생각을 하였고 조건식을 호출하는 코드가 있었다. 영웅문(키움 주식)에서 조건식을 설정해놓으면 이 이름과 해당되는 주식종목을 불러왔다. 이를 매수 리스트에 코드를 추가하는 방식으로 만들었다.
차트 조회는 초반과 후반이 조금 달랐다. 그 이유는 처음에는 같이 진행하던 분이 야후재팬(?)의 주식 차트를 가져왔던 코드가 있었기 때문이었다. 그러나 이건 우리나라 주식이 잘 나오지 않는다는 문제점이 있었다. 그래서 이걸 좀 더 잘 나오면서 쉽게 할 수 있도록 하기 위해 파이낸션 데이터리더를 이용하는 방법으로 바꾸게 되었다. 실시간 정보는 나오지 않지만 일간 차트는 구할 수 있게 되었고 그래프, 일봉 차트도 그릴 수 있었다.
어느정도 필요한 것은 구현이 되었다고 생각했다. 한개씩 조건식 적용시켜서 진행은 할 수 있지만 기능적으로 뭔가가 더있으면 좋겠다는 생각이 들었다.
먼저 구현하게 된 것은 종목 검색이다. 이건 종목명으로 종목정보를 검색할 수 있도록 했다. 이전에 버려졌던 종목명-종목코드 파일을 가져와 탐색해 종목코드를 출력해주면서 그날 존재하는 가장 최근 주식정보(시가, 종가, 최고가, 최저가, 거래량)를 출력하도록 했다. 빨간날 체크가 어려워서 주말 처리만 했다.
이것은 이전에 언급했던 csv 파일 만든 것 때문에 만들게 되었는데 거래량을 체크해 매수, 매도할지 비율로 알려주는 식이 있었다. 이것을 이용해 조금더 도움이 되지 않을까 싶어 종목 코드와 거래량 가져올 기간을 입력해 계산하도록 하는 기능을 만들었다.
조금 기능적으로 부족하지만 현재가와 원하는 비율입력하면 계산해서 주문을 넣도록 하였다. 매도는 잔고에 있는 이율을 가져와서 주문여부를 체크하도록 했다..
이렇게 여러 기능을 만들었다. 너무 적은 인원, 제대로 계획을 세우지 않고 필요한 것을 그때그때 진행한 것이 아쉽다. 게다가 이렇게 만든 것을 배포판 못 만든게 아쉽다. 다음에는 제대로 계획을 세우고 공부해서 만들어보고 싶다.