실시간 100종목 제한? 이렇게 우회하면 됩니다

admin | | 조회 3


[주요 목차]

키움 100종목 제한, 왜 생기고 어떻게 풀까

LS 증권 웹소켓으로 실시간 데이터 교체하기

챕터 8·9·10 순서대로 반영하고 테스트까지


키움 증권 REST API 쓰다 보면 실시간 구독이 100종목으로 막혀서 답답할 때가 한두 번이 아니거든요. 자동매매 하다 보면 100개 넘는 종목을 동시에 보고 싶어지는데, 그때마다 제한에 걸려서 포기하는 경우가 많았습니다. 이번 글에서는 LS 증권 실시간 시세만 가져와서 그 제한을 우회하는 방법을 실제 프로젝트에 적용한 과정을 정리했어요. 키움은 주문·잔고 쪽으로 그대로 쓰고, 실시간 현재가만 LS로 바꾸는 하이브리드 방식입니다. 이 글을 끝까지 읽으면 여러분 프로젝트에 바로 붙여 넣을 수 있는 수정 포인트와 git으로 변경 사항 추적하는 팁까지 얻어갈 수 있을 거예요. 실시간 100종목 제한 때문에 고민 중이었다면 끝까지 읽어보세요.


실시간 100종목 제한? 이렇게 우회하면 됩니다 - 주요 포인트 1 - 키움증권API실시간 100종목 제한? 이렇게 우회하면 됩니다 · 주요 포인트 1

키움 100종목 제한, 왜 생기고 어떻게 풀까

키움 증권 REST API는 실시간 웹소켓 구독을 100종목으로 제한해 놓았습니다. 이 제한은 HTS 동시 접속자나 서버 부하 때문에 생긴 정책인데, 개인 자동매매 입장에서는 상당히 불편하더라고요.

제가 실제로 써보니까 100개 넘는 종목을 트래킹하려면 매번 구독을 해제하고 다시 등록하는 번거로운 로직을 넣어야 했습니다. 그런데 LS 증권은 그런 제한이 거의 없어서 실시간 시세만 LS로 가져오고, 주문·계좌 조회는 기존 키움 모듈을 그대로 쓰는 방식으로 해결했습니다.

현업에서는 이렇게 두 증권사를 섞어 쓰는 하이브리드 구성이 꽤 흔합니다. LS 증권 웹소켓은 국내·해외가 한 모듈에 들어 있어서 “국내실시간등록”, “국내실시간해제” 함수로 명확히 구분해 호출해야 합니다. 이 부분을 놓치면 실시간 데이터가 안 들어오는 경우가 많더라고요.

실시간 100종목 제한? 이렇게 우회하면 됩니다 - 현장 스냅 2 - 키움증권API실시간 100종목 제한? 이렇게 우회하면 됩니다 · 현장 스냅 2

LS 증권 웹소켓으로 실시간 데이터 교체하기

가장 먼저 config 파일에 LS 증권 API 키를 추가했습니다. 기존 키움 키와 함께 두 개를 관리해야 하거든요. 그다음 main.py에서 LS 모듈을 import하고, 웹소켓 프로세스를 LS 전용으로 교체했습니다.

기존에는 max_realtime_count로 95개 제한을 걸어놨었는데, 이 조건 자체를 완전히 삭제했습니다. LS는 제한이 없기 때문에 더 이상 필요 없더라고요. 실시간 체결 데이터도 “국내실시간현재가”로 함수명을 바꿔서 호출하도록 수정했습니다.

웹소켓 functions 파일에서는 register_real_time_info와 unregister 관련 코드를 아예 제거했습니다. LS 모듈은 구독 등록·해제를 다르게 처리하기 때문에 키움용 코드를 그대로 두면 충돌이 생깁니다. 대신 국내실시간등록과 국내실시간해제만 남겨두고, websocket queue는 그대로 재사용했습니다.

실시간 100종목 제한? 이렇게 우회하면 됩니다 - 본문 이미지 3 - 키움증권API실시간 100종목 제한? 이렇게 우회하면 됩니다 · 본문 이미지 3

챕터 8·9·10 순서대로 반영하고 테스트까지

챕터 10부터 먼저 반영한 뒤, 9와 8 순으로 내려가면서 수정했습니다. git add와 커밋을 단계적으로 해서 변경 사항을 추적했는데, 이 방법이 나중에 어디를 고쳤는지 확인할 때 정말 편하더라고요.

챕터 8은 UI 수정이 추가로 필요했습니다. Qt Designer에서 “리스트편입” 버튼을 하나 더 만들고, 입력받은 종목을 바로 실시간 트래킹 DF에 추가하는 로직을 넣었습니다. 버튼 클릭 이벤트는 기존 편출 로직과 비슷하지만, 데이터프레임 이름을 realtime_tracking_df로 맞춰서 locate하는 부분까지 신경 써야 합니다.

마지막으로 실제 실행 테스트를 해봤습니다. 삼성전자를 편입하자마자 KRX 종가로 처음 표시되다가, LS 웹소켓에서 실시간 데이터가 들어오면서 현재가가 갱신되는 걸 확인했습니다. HTS를 켜지 않아서 체결 화면은 못 봤지만, 실시간 시세가 정상적으로 변동되는 걸 보고 우회가 제대로 됐다는 걸 알 수 있었어요.

여러분도 같은 순서로 따라 하면 100종목 제한 없이 실시간 데이터를 받아볼 수 있을 겁니다.


[자주 묻는 질문]

키움 REST API 실시간 구독 100종목 제한을 LS 증권으로 우회하려면 어떤 부분을 먼저 수정해야 하나요?

config 파일에 LS 증권 API 키를 추가하고, main.py에서 LS 웹소켓 모듈을 import한 뒤 국내실시간등록·해제 함수로 교체하는 게 첫 단계입니다. max_realtime_count 조건도 삭제해야 하며, 웹소켓 functions 파일에서는 키움용 register/unregister 코드를 제거하는 작업이 필요합니다. 이 순서대로 하면 충돌 없이 실시간 데이터를 받아올 수 있습니다.

챕터 8·9·10을 수정할 때 git으로 변경 사항을 추적하는 방법이 있나요?

각 챕터별로 별도 브랜치나 커밋 메시지를 남기면서 작업하는 걸 추천합니다. “챕터10 LS 반영”, “챕터9 LS 반영” 식으로 커밋을 나누면 나중에 어떤 파일이 언제 바뀌었는지 한눈에 파악할 수 있습니다. 롤백이 필요할 때도 특정 커밋만 되돌리면 되기 때문에 실수할 확률이 줄어듭니다.

LS 증권 실시간 데이터를 키움과 함께 쓸 때 주의할 점은 무엇인가요?

LS 모듈은 국내·해외가 통합되어 있어서 반드시 “국내실시간” 함수를 사용해야 합니다. 또한 실시간 현재가 데이터프레임 이름을 realtime_tracking_df로 통일하지 않으면 locate 에러가 발생할 수 있습니다. UI에서 종목 편입 버튼을 추가할 때는 데이터프레임 구조를 미리 확인하고, 기존 키움 주문 로직은 그대로 두는 게 안전합니다.

목록
글쓰기
한국 서버호스팅
전체보기 →

댓글 0