키움증권 api 과거 수정 주가 다운로드 문제

기준 가격은 대부분의 경우 전 영업일의 종가이지만 주식을 합치거나 나눠 액면 가격이 바뀐 경우, 권리락, 배당락을 조치하는 등의 경우에는 거래소가 기준 가격을 바꿀 수 있다. 예를 들어 edgc라는 종목의 경우 415원이던 게 자본을 감소하여 2026년 6월 12일 741원으로 기준 가격을 바꿨다. (741-415)/415= 0.7855421686 … 으로 약 78.55% 기준 가격을 올렸다.

증권회사 매매 애플리캐이션에는 위의 차이를 없애고 과거의 값들을 수정하여 출력하는 기능이 있다. 11일 415원이던 걸 741원으로 바꿔 보여 주는 거다. 굳이 이렇게 할 필요가 있나 의문스러울 수 있지만 일단 소프트왜어를 개발하는 입장은 트래이더의 그것과 다르니 원하시는 분이 계시면 따질 일은 아니다.

가격 등의 대이터를 api로 다운로드할 때에도 수정한 대이터를 다운로드할 건지 설정할 수 있다. 키움증권의 경우 일 대이터는 한 번에 600개를 응답하는데 이를 요청할 때 기준 날짜를 설정해야 한다. 문제는 600일보다 오래된 날의 대이터다.

오늘 2026년 6월 17일을 기준 날짜로 요청하면 2023년 12월 26일 대이터까지 온다. 600개를 더 요청하려면 그 다음 기준 날짜는 2023년 12월 25일로 한다. 그러면 23일부터 25일까지 노는 날이라 22일 대이터부터 응답한다. 이 날의 종가는 437이고 거래량은 3,290,518이다. 영웅문 차트로 수정된 값들을 보면 각각 780과 1,842,911이다. 하지만 api로 다운로드해 보면 수정하지 않은 값들이다.

2023년 12월 25일에는 미래에 있을 기준 가격 변경을 알 수 없으므로 반영하지 않았기 때문이다. 논리적으로는 맞는데 현실적이지는 않다.

ls증권 api는 더 심해서 수정 대이터로 설정하여 요청해도 아예 수정 대이터를 응답하지 않는다.

위의 문제를 피하려면 기준 가격 변경 비율로 직접 계산해야 한다. 하지만 키움증권의 경우 정확하지 않은 값을 제공하여 문제다.

위 경우 키움증권 api는 백분율 78.55를 응답한다. 이 값으로 계산을 하면 2023년 12월 22일의 종가는 437*(1+0.7855)=780.26350, 거래량은 3,290,518/(1+0.7855)=1,842,911.229347520으로 반올림하면 같다. 그러나 늘 이렇게 비슷하게 나오지는 않는다. 숫자가 커질수록, 기준 가격을 자주 바꿔 소수 다섯째 자리부터 버린 값들이 누적될수록 오차는 커진다.

같은 종목은 2023년 9월 18일 권리락으로 기준 가격을 -8.13% 한 번 더 바꿨다. 2023년 9월 15일 종가는 1,132이고 거래량은 2,587,786이다. api가 응답한 두 개의 비율로 계산해 보면 1,132*(1+0.7855)*(1-0.0813)=1,856.86357820과 2,587,786/(1+0.7855)/(1-0.0813)=1,577,592.337095470이다. 그러나 영웅문이 출력하는 값은 각각 1,857과 1,577,630이다. 작은 수인 가격에서는 오차가 작지만 큰 수인 거래량은 백 단위에서 오차가 생겼다. 10년 넘는 기간에 여러 번 기준 가격을 바꾼 종목들이라면 오차는 더 커진다.

위의 예에서는 바뀐 기준 가격을 알 수 있어서 비교적 정확한 변경 비율을 구할 수 있었다. 기준 가격을 바꾼 날 거래가 없어서 시가, 고가, 저가, 종가가 모두 같았던 예외적인 경우라 이 가격이 기준 가격이라는 걸 알 수 있었기 때문이다. 이런 경우가 아니라면 기준 가격을 바꾼 그 날 확인할 수 있고 지나서는 공시를 봐야 알 수 있다. api로는 과거의 기준 가격을 알 수 없으니 변경 비율도 더 자세한 값은 알 수 없다. 키움증권 차트는 보여 주는 소수 넷째 자리 값이 아닌 더 자세한 값으로 계산한다. 공개하지 않을 뿐 기준 가격을 알고 있기 때문이다.

따라서 키움증권 차트로 보는 수정 주가를 그대로 모두 api로 다운로드할 수는 없다.