kiwoom icon indicating copy to clipboard operation
kiwoom copied to clipboard

시장 데이터 수집시 권리락이 발생되면 어떻게 되나요??

Open kwang-yong-hyun opened this issue 4 years ago • 5 comments

유증이나 액분같은 상황이 벌어지면

이전의 수정주가가 변경될텐데

수집 데이터는 그냥 최신값만 업데이트 되는 건가요??

아니면 수정주가 변경이 있으면 첨부터 다시 받아서 업데이트 되는 건지 궁금합니다.

kwang-yong-hyun avatar Mar 17 '21 19:03 kwang-yong-hyun

안녕하세요.

최신값만 업데이트 되도록 구현되어 있습니다.

이슈가 있는 종목은 공시를 통해서 직접 삭제 후 재수집 해주셔야합니다.

키움증권 Open API Q&A 게시판에서 문의주신 내용과 관련된 사항들 몇 가지 추려서 말씀드립니다.

Q1. 액면분할 같은 이벤트가 발생하면 기존에 저장했던 데이터는 폐기하고 데이터를 새로 받아야 하지 않나요?

-> 네, 해당 종목을 말씀처럼 재조회, 재수집 하셔야 합니다.

Q2. 배당락의 경우 자주 있는 이벤트인데 배당락 발생할 때마다 해당종목 전체 과거주가를 보정해주는 것인지요?

-> 수정주가는 액면분할 등 이벤트 발생여부가 기준이 아니라 거래소에서 내려주는 기준가가 변경되었는지 여부가 기준이 되어 계산됩니다. 기준가가 변경된 경우 차트조회시 수정주가가 적용됩니다. 거래소의 기준가 수신처리는 매일 06:00 쯤에 수행됩니다.

Q3. 수정주가에 변동이 생긴다면 바로 알 수 있을까요?

-> 장중에 종목정보가 바뀌어도 해당 내용은 실시간으로 반영되지 않습니다. GetMasterStockState 함수로 액면분할 여부를 알 수 있고, 주식 데이터 조회 시 '수정주가구분' 항목에서 다양한 항목들을 알 수 있지만 거래소에서 제공하는 종목정보를 이용하고 다음 영업일까지만 이 정보가 유지됩니다. (수정주가구분 1:유상증자, 2:무상증자, 4:배당락, 8:액면분할, 16:액면병합, 32:기업합병, 64:감자, 256:권리락)

위 3가지 항목을 종합했을 때, 키움 Open API를 사용해 수정주가 변경 사항을 지속적으로 반영하기에는 한계가 있습니다.

특히 영업일 기준으로 데이터 업데이트를 하루라도 놓치게 된다면 수정주가 이벤트를 알 수가 없게 됩니다.

현재 merge 옵션을 사용해 데이터를 받을 때 틱, 분, 일 데이터 모두 하루 단위로 수정 혹은 추가가 됩니다.

만약 어제 특정 종목의 데이터를 받다가 도중에 종료하면 오늘 다시 시도했을 때

어제 받다만 데이터에 바로 이어서 받는 것이 아닌 어제 데이터 전체를 업데이트합니다.

bot.histories(..., merge=True)

데이터를 검토하다가 특정 일자에 수정주가 기준가가 변동되었을 때

그 시점을 기준으로 이전 날짜의 데이터들을 바뀐 기준가로 직접 바꿔볼 수 있을 것 같습니다.

하지만 데이터를 받는 시점에 혹시라도 수정주가 변동 이벤트가 포착이된다면

기존 데이터들을 지우고 새로 받는 옵션을 추가해 볼 수는 있을 것 같습니다만,

매일매일 업데이트 하지 않는다면 완벽히 모든 이벤트를 커버할 수는 없다는 한계가 있네요.

감사합니다.

breadum avatar Mar 18 '21 01:03 breadum

여러가지 방법으로 주가를 수집하는데 이것저것 애로사항이 꽃피네요.

얼마전에 안 사실인데 증권사마다 수정주가도 다 다르고.. 멘붕입니다.

기록된 2영업일 전의 데이터랑 오늘 받은 데이터랑 비교해서 주가가 다르면 수정주가 변동이라고 여기고

기존 데이터 삭제 후 재업데이트 옵션이 있었으면 좋겠습니다.

말씀하신대로 매일매일 업데이트 하지 않으면 별 의미없는 것일수도 있는데

이렇게라도 안하면 나중에 뒤통수 맞을수도 있을 거 같아서요.

kwang-yong-hyun avatar Mar 18 '21 13:03 kwang-yong-hyun

작업량이 좀 있을 것 같아 추후 여유가 될 때 고려해 보겠습니다.

breadum avatar Mar 18 '21 14:03 breadum

개인적인 의견이지만, 키움증권의 OpenAPI+ 를 통해서 주가정보를 수집하는건 다른 데이터 출처들과 비교했을때 메리트가 많이 떨어지지 않나 싶습니다.

  • 일단 조회횟수 제한으로 인해 속도가 너무 느려요. 거의 4초에 1번 조회 꼴...
  • 거기다가 위의 이슈처럼 수정주가 비율 변동이 발생하는 경우 전체 데이터를 갱신해줘야하는 이슈도 있고요.

저도 한동안은 키움 OpenAPI+ 를 통해서 데이터를 받아보다가 대안중 하나로 대신증권의 Cybos Plus 를 한번 검토해봤는데, 개인적인 경험으로는 이쪽이 더 괜찮네요.

  • 조회횟수 제한이 15초 60회입니다. 그냥 횟수도 그렇지만 1회 호출시 가져올 수 있는 데이터의 양도 더 많은 것 같아요.
  • 수정주가도 이런식으로 하면 전체 데이터 갱신 이슈 없이 축적 가능하고요.
  • 게다가 API 도 COM 방식으로 지원해서 키움의 OCX 보다는 사용하기가 쉽네요.

elbakramer avatar Mar 28 '21 21:03 elbakramer

의견 감사드립니다.

저도 처음에 대신하고 키움 중에 고민하다가 새로 계정 만들기도 귀찮고

키움 API 설명 영상이나 자료가 더 많은 것 같아 키움으로 만들었습니다.

조회수 제한을 살짝 해제하는 기능은 모듈안에 숨겨져 있긴한데

그래도 대신이 더 많은 데이터를, 더 빠르게 제공하는 것은 맞습니다.

사실 이 모듈을 제작하게 된 취지가 직접 API를 개발하고 싶은데,

심플하게 키움 API를 파이썬으로 래핑해둔 모듈이 마땅히 없어서

단점을 감수하고 진행하게 되었습니다.

@elbakramer님도 키움 API 관련 모듈 제작하신 것 같은데

살펴보니 대신증권 API도 지원해 주시나보네요.

수정주가 해결하고 싶으신 분들을 위해 직접 링크 남겨드립니다.

  1. elbakramer/koapy

  2. 수정주가 관련 스크립트

breadum avatar Mar 29 '21 09:03 breadum