키움 OpenAPI+로 자동매매 봇을 만들기까지 (feat. REST와의 갈림길)

키움 OpenAPI+와 REST API를 비교하는 개발 환경 화면



나는 매번 같은 자리에서 같은 실수를 반복하곤 했다. 사야 할 때 망설였고, 팔아야 할 때 붙들고 있었고, 안 사도 될 걸 충동적으로 사버렸다. 문제는 실력이 아니었다. 바로 내 손가락이었다. 머리로는 다 알고 있었는데, 손이 감정을 못 이겼다.

그래서 나는 생각했다. 손을 빼버리면 되지 않을까. 규칙을 정해두고 그 규칙대로만 기계가 사고팔게 하면 되지 않을까. 그렇게 나는 자동매매에 발을 들이게 됐다.

목차

왜 하필 키움 OpenAPI+였나

막상 찾아보니 국내에서 개인이 자동매매를 붙일 수 있는 창구는 생각보다 좁았다. 그중 키움 OpenAPI+는 자료가 제일 많았고, 먼저 해본 사람들의 삽질 기록도 널려 있었다. 처음 시작하던 나에게는 막혔을 때 검색하면 뭐라도 나온다는 것, 그거 하나만으로도 큰 안심이었다.

물론 나는 시작하자마자 알아버렸다. 이게 대체 왜 이렇게 낡았지?

낡은 방식과의 싸움

OpenAPI+는 32비트 환경에서만 돌아갔다. 요즘 세상에 굳이 32비트 파이썬을 따로 깔아야 했고, 파이썬 버전도 아무거나 되는 게 아니었다. 통신 방식마저 옛날식이라 요청 하나 주고받는 데도 이벤트를 기다렸다가 받아야 했다. 나는 원하는 데이터 하나 꺼내오는 것조차 한참을 헤맸다.

그래도 하나씩 됐다. 로그인이 뚫렸고, 시세가 들어왔고, 잔고가 읽혔다. 나는 될 때마다 작은 성취감을 느꼈다. 그렇게 붙잡고 씨름하다 결국 실제 주문까지 나가게 만들었을 때, 화면에 체결 메시지가 뜨던 그 순간을 나는 아직도 잊지 못한다.

그런데 REST API가 나와버렸다

한창 만들던 도중이었다. 키움에서 REST 방식의 새 API가 나왔다는 걸 알게 됐다.

솔직히 나는 짜증이 확 밀려왔다. 이 낡은 방식이랑 그렇게 씨름했는데, 하필 지금 더 깔끔하고 요즘식인 게 나오다니. 처음엔 진지하게 고민했다. 지금이라도 갈아탈까.

OpenAPI+와 REST, 뭐가 다른가

나처럼 지금 이 갈림길에 선 사람이 있을 것 같아, 내가 알아본 차이를 정리해둔다.

구 OpenAPI+ (내가 쓰는 방식)

  • 32비트 파이썬 전용, 윈도우에서만 돈다
  • 통신 방식이 옛날식(이벤트 기반)이라 처음 배우기 까다롭다
  • 대신 한국어 자료와 예제가 압도적으로 많다. 막히면 검색하면 나온다
  • 그리고 결정적으로, HTS의 조건검색식을 그대로 불러다 쓸 수 있다

신 REST API (새로 나온 방식)

  • 64비트에서 돌고, 맥·리눅스에서도 된다
  • 통신이 표준 방식이라 훨씬 직관적이고 깔끔하다
  • 한 계정으로 봇 여러 개를 동시에 돌리기도 편하다
  • 대신 아직 새거라 한국어 삽질 정보가 적고, 조건검색식 같은 일부 기능은 구버전이 더 낫다

정리하면 이렇다. 처음 시작하는데 자료 보고 따라 하고 싶다, 혹은 HTS 조건검색식을 그대로 쓰고 싶다면 구 OpenAPI+. 맥을 쓰거나, 봇을 여러 개 돌리거나, 깔끔한 최신 구조를 원한다면 신 REST. 나중에 갈아타면 코드를 거의 새로 짜야 하니, 시작 전에 정하는 게 좋다. 이건 자동매매 프로젝트에서 가장 되돌리기 어려운 결정이다.

나는 결국 남기로 했다

며칠을 고민하다 나는 결국 OpenAPI+에 남기로 했다. 이유는 두 가지였다.

하나는 이미 만들어 둔 게 있었다는 것. 로그인부터 주문까지 어렵게 붙여놓은 그 구조를 통째로 버리고 처음부터 다시 시작할 자신이, 나에게는 없었다.

다른 하나는 내 전략이 HTS 조건검색식에 크게 기대고 있었다는 것. 나는 "실시간돌파감시" 같은 조건식을 짜두고 그걸 봇이 그대로 불러와 감시하게 만들어뒀는데, 이 기능은 구 OpenAPI+가 더 강했다. 그러니 나에게는 남는 게 맞는 선택이었다.

지금도 가끔은 흔들린다. 언젠가는 REST로 다시 짜게 될지도 모른다. 하지만 적어도 지금의 나는, 낡았어도 손에 익은 이 방식으로 끝까지 가보기로 마음먹었다.

그래서 무엇을 만들었나

이렇게 시작한 봇은 단순히 "신호 뜨면 산다" 수준이 아니었다. 만들다 보니 정작 중요한 건 "언제 사느냐"가 아니라 "언제 사지 않느냐"였다. 그래서 나는 장 초반을 피했고, 시장 전체가 무너지는 날엔 아예 쉬게 했고, 이미 올라버린 걸 쫓지 않도록 여러 겹의 안전장치를 붙였다. 이 이야기는 다음 글에서 하나씩 풀어보려 한다.

낡은 API와 씨름하고, 새 API 앞에서 흔들리고, 그러면서도 여전히 붙잡고 있는 중이다. 이 기록이 나처럼 자동매매를 처음 시작하는 누군가에게 조금이라도 도움이 된다면 좋겠다.


Post a Comment

다음 이전