Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kwang-yong-hyun opened this issue Mar 17, 2021 · 5 comments

Comments

@kwang-yong-hyun
Copy link

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

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

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

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

@breadum
Copy link
Owner

breadum commented Mar 18, 2021

안녕하세요.

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

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

키움증권 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)

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

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

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

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

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

감사합니다.

@kwang-yong-hyun
Copy link
Author

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

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

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

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

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

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

@breadum
Copy link
Owner

breadum commented Mar 18, 2021

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

@elbakramer
Copy link

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

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

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

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

@breadum
Copy link
Owner

breadum commented Mar 29, 2021

의견 감사드립니다.

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

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

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

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

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

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

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

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

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

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

  1. elbakramer/koapy

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants