키움 주식 자동매매 프로그램 만들기, 종목이 60개에서 잘렸다

 

키움 실시간 등록이 60개에서 끊기고 나머지 종목이 회색으로 연결이 끊긴 모습을 나타낸 이미지

조건검색으로 종목이 알아서 들어오게 만든 다음, 나는 그걸 전부 봇에 실시간 등록했다. 200개가 넘는 종목이 화면에 좌르륵 찍히는 걸 보면서 이제 됐다 싶었다.

이상함을 느낀 건 며칠 뒤였다. 분명 조건에 걸릴 만한 종목이 움직였는데 봇이 미동도 없었다. 신호가 안 잡히는 게 아니라, 아예 없는 종목 취급을 하고 있었다. 처음엔 조건식이 또 잘못됐나 싶었다. 4편에서 겨우 실시간 연동을 뚫어놨는데 그게 반쪽짜리였다는 건 한참 뒤에야 알았다.

목차

등록은 됐는데, 봇은 안 보고 있었다

봇을 켜면 종목들이 순서대로 실시간 등록되는 로그가 찍힌다. 나는 그걸 진행바처럼 봤다. 이만큼 등록됐으니 이만큼 감시하고 있겠구나, 하고. 그날도 200개 넘는 리스트가 다 올라가는 걸 확인하고 자리를 떴다.

며칠 뒤 종목이 안 잡히는 게 이상해서 로그를 뒤로 쭉 올려봤다. 그런데 등록 로그가 어느 지점부터 모양이 바뀌어 있었다.

📡 실시간 등록: 056090 (type=1)
📡 실시간 등록: 058470 (type=1)
📡 실시간 등록: 065450 (type=1)
🛑 실시간등록 제한으로 스킵: 072470
🛑 실시간등록 제한으로 스킵: 079550
🛑 실시간등록 제한으로 스킵: 085910
🛑 실시간등록 제한으로 스킵: 086820

065450까지는 실시간 등록. 그다음 072470부터는 전부 실시간등록 제한으로 스킵. 등록이 되다가 어느 순간 뚝 끊긴 거였다. 세어보니 성공한 건 정확히 60개였고, 61번째부터는 한 개도 안 들어갔다.

60개가 벽이었다

키움 OpenAPI+에서 실시간 시세를 받으려면 종목을 실시간 등록해야 한다. 문제는 이 실시간 등록에 화면번호당 등록할 수 있는 종목 수 한도가 있다는 거였다. 한 화면번호에 무한정 종목을 밀어 넣을 수 없고, 초과분은 그냥 조용히 잘린다.

내 봇은 종목 하나하나를 같은 화면번호에 계속 쌓는 구조였다. 그러니 앞쪽 60개만 감시 목록에 올라가고, 뒤쪽 수백 개는 스킵 처리된 채 방치됐다. 조건검색으로 아무리 좋은 종목을 걸어놔도, 등록 순번이 61번 이후면 봇 입장에선 존재하지 않는 종목이었다.

가장 무서웠던 건 이게 에러가 아니었다는 점이다. 프로그램은 안 죽는다. 빨간 에러도 안 뜬다. 그냥 스킵 한 줄 남기고 멀쩡히 돌아간다. 4편에서도 겪었지만, 이 봇에서 제일 위험한 건 요란하게 터지는 에러가 아니라 아무 일 없는 척 조용히 절반만 일하는 상태다. 이게 딱 그거였다.

같은 종목이 하루 종일 스킵되고 있었다

스킵된 종목 하나를 잡아서 로그 전체에서 검색해봤다. 072470 하나만 따라가 봤는데, 이게 하루 종일 나온다.

12:54:10 🛑 실시간등록 제한으로 스킵: 072470
13:03:27 🛑 실시간등록 제한으로 스킵: 072470
13:28:10 🛑 실시간등록 제한으로 스킵: 072470
13:29:46 🛑 실시간등록 제한으로 스킵: 072470

봇을 껐다 켤 때마다, 재시작할 때마다 이 종목은 매번 같은 자리에서 스킵됐다. 아침에 스킵되면 그날 장 마감까지 계속 스킵이다. 한 번 등록 순번에서 밀리면 그날은 영영 봇 눈에 안 보이는 종목이 된다는 뜻이었다. 이걸 며칠을 모르고 지나갔다고 생각하니 허무했다.

지금 이 로그로 검색해 들어온 사람에게

혹시 지금 실시간등록 제한으로 스킵이 로그에 찍혀서, 또는 등록한 종목 중 일부만 실시간 데이터가 들어와서 검색해 들어온 사람이 있다면. 조건식부터 뜯어보지 마라. 나처럼 시간 버린다. 먼저 세어봐야 할 건 실제로 등록에 성공한 종목이 몇 개인지다. 60개 언저리에서 딱 끊겨 있으면 한도에 걸린 것이다.

해결 방향은 종목을 여러 화면번호에 쪼개서 등록하는 것이다. 한 화면에 다 밀어 넣지 말고, 일정 개수 단위로 화면번호를 나눠서 등록하면 스킵 없이 다 올라간다. 화면번호별 정확한 한도 값은 본인 환경에서 직접 등록해보며 확인하는 걸 권한다. 문서 값과 실제 체감이 다를 수 있어서, 나는 결국 로그에서 스킵이 시작되는 지점을 기준으로 잡았다.

등록했다는 착각을 버렸다

이 일 이후로 나는 봇을 켤 때 종목이 등록되는 로그를 더 이상 진행된 것으로 안 본다. 등록 요청을 보냈다는 것과, 봇이 그 종목을 실제로 감시하고 있다는 것은 완전히 다른 얘기였다. 요청은 200번 보냈어도 실제로 담고 있는 건 60개뿐일 수 있다.

그렇게 감시할 종목을 겨우 정리하고 나니, 이번엔 다른 문제가 기다리고 있었다. 봇이 종목을 다 잡아놓고도 하루 종일 한 주도 안 사는 것이다. 그 이야기를 다음 글에서 풀어보려 한다.

이 글은 내가 직접 만든 프로그램의 개발 기록일 뿐, 특정 종목이나 매매 방식을 권하는 글이 아니다. 투자 판단과 그 결과는 각자의 몫이다.

Post a Comment

다음 이전