포스트

시계열분석 Prophet 예측모델에 대하여(完)

2-3월에 앞선 시리즈에서 다뤘던 빌드업의 결과물인 주식 자동매매의 1차본 배포를 하였기 때문에 포스팅을 작성한다. Meta의 prophet모델을 통한 주식 매수로 범위가 좁혀졌지만 이를 다루고 추후에 develop 포스트를 올릴 계획이다.

Auto-Trade 프로젝트

발단

  • 주식투자를 해야겠는데 매번 주식창을 확인하며 에너지를 쏟기는 싫었다.
    • 장기 투자를 목표로 하게 됨
    • 매달 적금식으로 주식을 조금씩 구매해보자
  • 주식이 오르내리는데 더 좋은 포지션(시점)에 사고 싶은 마음이 있었다
    • 더 오를 것으로 예상되는 자리를 기계가 예측한다면?
    • 그 자리를 믿고 그때 자동으로 매수하게 하자 (매달 정해진 일자에 정해진 금액을 매수하는 기능을 제공하는 기존 금융 앱들과의 차이점)
  • 내가 개발하고 관리할 수 있는 주식 매매 프로그램을 만들어보자
    • 내 취향 혹은 전략을 반영할 수 있는 프로그램을 갖고 있자. 나중에 도움이 될 것

설계

  • 주가를 자주 확인하고 원하는 시점에 트리거되야하니까 배치 작업이 주가 될 것이다.
    • web GUI 페이지도 제공하는 Airflow 선택
  • 모든 행동을(behavior) 수행하게 하는 명령은 HTTP request를 통해서 이뤄지게 하자. (airflow에서 호출할 것이므로)
    • 빠르게 구현할 수 있으며 swagger를 제공하는 FastAPI 선택
  • 주가 확인 혹은 매매 등의 작업들을 수행했을 때 알림을 주는 기능과 더 나아가 내가 직접 개입할 수 있는 매개가 있으면 좋겠다.
    • 채팅형식을 통해 결과 혹은 명령을 전달하고 소통할 수 있는 Slack 선택
  • 실제 금융 거래 체결을 위한 도구
    • 한국투자증권 API (link)

구조

  • 모든 행동은 Backend가 수행한다.
    • FastAPI 서버에 요청하면 FastAPI 서버가 해준다.
  • 모든 작업은 Airflow에서 trigger된다.
    • 주기적으로 실행하는 작업의 주체는 Airflow DAGs
  • 주요 행동 및 작업의 결과를 보고한다.
    • Slack으로 전달
    • (아직 Slack으로 명령 하달하는 기능은 미구현)

결과물 (v1)

  • slack으로 보고받은 Airflow DAGs 결과물을 나타낸다.

Daily Token refresh

|300

  • 매일 오전 8:30에 토큰을 갱신하게 하였고 제때 매일 카톡이 옵니다.
    • 하루 단위 수명을 지닌 토큰이므로 매일 갱신 필요

Daily Report

|300

  • 매일 오후 8시에 변화율과 전날 종가를 알려준다.
    • 변화율이 설정한 임계값보다 크거나 작으면 매매가 일어난다. (해당 종목에 할당된 예수금이 남아 있다는 가정 하)
  • 댓글로는 prophet이 예측한 그래프를 보내준다. |600
    • 위 그래프는 최근 폭락한 나스닥100 ETF의 그래프입니다… 매사에 긍정적인 meta의 prophet마저도 고개를 떨군 모습..

Purchase

|300

  • 실제 예약 매매가 이뤄지고 slack으로 내역이 날라온 모습
  • 그러나 반환할 내용을 잘못걸어놔서 허접하게 한투 API를 통한 예약 주문 체결 번호만 달랑 날아왔다..

소감

포스팅을 하다보니 자동매매가 생각났고 프로젝트의 1차본 배포까지는 6개월이나 걸려버렸습니다. 꾸준히 개발했다면 더 금방 끝났겠으나 그러지 못했습니다. 내가 실제로 사용할 것이고 사용하고 있고 미래에도 더 잘 사용하기 위해서 욕심이 계속 앞서 개발이 더뎌졌습니다. 완벽한 개발을 하려는 나쁜 마음이 자꾸 들었기 때문입니다. 기능 A를 구현하다보니 더 좋은 A-1, A-2, A-3이 생각났고 다 포용할 수 있는 전체 구조를 고려하는 둥.. 그래서 중간에 과감히 모두 쳐내고 1차 배포를 목표로 개발하였습니다. 개발의 적은 완벽이다. 일단 해놓고 develop하는게 애자일이지 않나 싶어요. 이정도면 적당히 타협했다고 생각합니다 ㅋㅋ 앞으로 더 develop할 repository이니 많은 관심 부탁드립니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.