OpenAPI
-
하나의 종목별로 일봉, 3분봉, 15분봉 데이터에 대해 데이터를 조회하고 `pandas` 라이브러리의 `to_sql` 메서드를 통해 데이터를 저장한다고 가정했을 때, 조회 단위별로 설정해주어야 하는 `time.sleep()` 값은 어떤 값이 적절한지 직접 비교해보았다.비교 대상은 차트 데이터 조회 중에 걸어둔 `time.sleep()` 내에 들어가는 시간과 해당 차트 데이터를 조회하는 데에 소요되는 시간으로, 차트 데이터를 조회하면서 '과다 조회 오류'가 발생하기 전까지 조회할 수 있었던 종목의 개수와 소요된 시간 및 종목당 소요된 시간을 비교하는 것이다. [실험 조건] 1. 일봉, 3분봉, 15분봉을 기준으로 상장기준일 이후의 모든 차트 데이터를 조회한다. 2. 일봉 데이터는 일반적인 ..
키움증권 Open API 시간 간격 설정하기하나의 종목별로 일봉, 3분봉, 15분봉 데이터에 대해 데이터를 조회하고 `pandas` 라이브러리의 `to_sql` 메서드를 통해 데이터를 저장한다고 가정했을 때, 조회 단위별로 설정해주어야 하는 `time.sleep()` 값은 어떤 값이 적절한지 직접 비교해보았다.비교 대상은 차트 데이터 조회 중에 걸어둔 `time.sleep()` 내에 들어가는 시간과 해당 차트 데이터를 조회하는 데에 소요되는 시간으로, 차트 데이터를 조회하면서 '과다 조회 오류'가 발생하기 전까지 조회할 수 있었던 종목의 개수와 소요된 시간 및 종목당 소요된 시간을 비교하는 것이다. [실험 조건] 1. 일봉, 3분봉, 15분봉을 기준으로 상장기준일 이후의 모든 차트 데이터를 조회한다. 2. 일봉 데이터는 일반적인 ..
2024.10.06 -
학습 목표대신증권의 모듈과 메서드(=함수) 살펴보기지난 게시글에서는 `IsConnect()` 함수를 통해 대신증권 서버와 연결되어 있는지에 대해 살펴보고, 그 결과값이 몇인지에 따라 각기 다른 내용을 출력하도록 하는 기능까지 구현했다. 여기서 우리가 더 추가적인 기능을 구현하기 위해서는 대신증권 CYBOS PLUS에서 제공하는 모듈로는 어떠한 것들이 있는지 이해해야 한다. (1) 상태 확인용 모듈: CpUtil.CpCybos우리가 서버와의 연결 여부를 확인할 때 `self.cybos`로 정의해두었던 모듈인 `CpUtil.CpCybos`는 기본적으로 CYBOS PLUS의 상태를 확인할 수 있는 모듈이다. 즉, 우리가 서버와의 연결 여부를 확인할 때 사용했던 `IsConnect` 함수는 기본적으로 접속 상..
대신증권 CYBOS PLUS 시작하기 (3) - 대신증권 모듈 이해하기학습 목표대신증권의 모듈과 메서드(=함수) 살펴보기지난 게시글에서는 `IsConnect()` 함수를 통해 대신증권 서버와 연결되어 있는지에 대해 살펴보고, 그 결과값이 몇인지에 따라 각기 다른 내용을 출력하도록 하는 기능까지 구현했다. 여기서 우리가 더 추가적인 기능을 구현하기 위해서는 대신증권 CYBOS PLUS에서 제공하는 모듈로는 어떠한 것들이 있는지 이해해야 한다. (1) 상태 확인용 모듈: CpUtil.CpCybos우리가 서버와의 연결 여부를 확인할 때 `self.cybos`로 정의해두었던 모듈인 `CpUtil.CpCybos`는 기본적으로 CYBOS PLUS의 상태를 확인할 수 있는 모듈이다. 즉, 우리가 서버와의 연결 여부를 확인할 때 사용했던 `IsConnect` 함수는 기본적으로 접속 상..
2024.07.29 -
지난 게시글(클릭 시 이동)을 통해 대신증권의 CYBOS PLUS 내 통신 방식은 어떠한 방식으로 이루어지는지에 대해 알아보았다. 다시 한 번 정리하자면, 대신증권의 통신 방식은 크게 요청/응답 방식과 구독/생산 방식으로 구분할 수 있으나, 그 구분은 어디까지나 단발성 데이터 요청인지 아니면 실시간 주가 데이터 수신과 같은 지속성 데이터 요청인지에만 기준을 두면 되고, 근본적으로 데이터를 입력하는 방식은 `SetInputValue()`를 통해서 이루어지며 데이터 입력 후의 데이터 요청은 `Request()`나 `BlockRequest()` 또는 `Subscribe()` 함수를 통해 데이터를 요청하고 `GetHeaderValue()`나 `GetDataValue()` 함수를 통해 데이터를 불러온다. 이제 사..
대신증권 CYBOS PLUS 이해하기 (2) - 통신방식 이해하기지난 게시글(클릭 시 이동)을 통해 대신증권의 CYBOS PLUS 내 통신 방식은 어떠한 방식으로 이루어지는지에 대해 알아보았다. 다시 한 번 정리하자면, 대신증권의 통신 방식은 크게 요청/응답 방식과 구독/생산 방식으로 구분할 수 있으나, 그 구분은 어디까지나 단발성 데이터 요청인지 아니면 실시간 주가 데이터 수신과 같은 지속성 데이터 요청인지에만 기준을 두면 되고, 근본적으로 데이터를 입력하는 방식은 `SetInputValue()`를 통해서 이루어지며 데이터 입력 후의 데이터 요청은 `Request()`나 `BlockRequest()` 또는 `Subscribe()` 함수를 통해 데이터를 요청하고 `GetHeaderValue()`나 `GetDataValue()` 함수를 통해 데이터를 불러온다. 이제 사..
2024.07.21 -
지난 게시글에서 CYBOS 5와 CYBOS PLUS를 설치했는데, 이번 게시글에서 부터는 CYBOS PLUS는 어떠한 방식으로 동작하는지와 기본적으로 어떠한 함수들이 존재하는지에 대해 정리해보고자 한다. CYBOS PLUS, 데이터 요청과 수신 방식 알아보기대신증권 홈페이지(클릭 시 이동)에 따르면, 대신증권의 Open API 통신 방식은 크게 ① 요청/응답(Requect/Reply, RQ/RP) 방식과 ② 구독/생산(Subscribe/Publish, SB/PB) 방식으로 동작한다고 설명하고 있다. 대체로 키움증권 영웅문의 동작 방식과 거의 동일한데, ①번의 요청/응답 방식은 단순하게 1회 요청에 대한 1회 응답의 방식을 갖고 있으며 ②번의 구독/생산 방식은 1회 요청에 대한 다회 응답의 방식을 갖고 ..
대신증권 CYBOS PLUS 이해하기 (1) - 통신 방식 알아보기지난 게시글에서 CYBOS 5와 CYBOS PLUS를 설치했는데, 이번 게시글에서 부터는 CYBOS PLUS는 어떠한 방식으로 동작하는지와 기본적으로 어떠한 함수들이 존재하는지에 대해 정리해보고자 한다. CYBOS PLUS, 데이터 요청과 수신 방식 알아보기대신증권 홈페이지(클릭 시 이동)에 따르면, 대신증권의 Open API 통신 방식은 크게 ① 요청/응답(Requect/Reply, RQ/RP) 방식과 ② 구독/생산(Subscribe/Publish, SB/PB) 방식으로 동작한다고 설명하고 있다. 대체로 키움증권 영웅문의 동작 방식과 거의 동일한데, ①번의 요청/응답 방식은 단순하게 1회 요청에 대한 1회 응답의 방식을 갖고 있으며 ②번의 구독/생산 방식은 1회 요청에 대한 다회 응답의 방식을 갖고 ..
2024.07.21 -
키움증권에서 제공하는 개발 가이드 내 실시간 데이터 FID 리스트를 살펴보면 여러 가지 FID들이 제공되고 있지만, 8.19 주문 체결과 8.20 잔고는 OnReceiveRealData 이벤트가 아닌 OnReceiveChejanData 내에서 처리해야한다. OnRecieveChejanData 이벤트 처리하기이 부분은 여타 이벤트 처리 방법과 크게 다르지 않다. 키움증권 내에서 발생하는 이벤트는 아래의 7가지로, 그 외에 발생하는 이벤트는 존재하지 않는다. 따라서 아래 7개의 이벤트만 실행할 함수와 연결해주면 된다.self.kiwoom.OnReceiveTrData.connect(self.receive_trdata) self.kiwoom.OnReceiveRealData.connect(self...
키움증권 Open API - 체결 데이터 및 잔고 관리하기 (1)키움증권에서 제공하는 개발 가이드 내 실시간 데이터 FID 리스트를 살펴보면 여러 가지 FID들이 제공되고 있지만, 8.19 주문 체결과 8.20 잔고는 OnReceiveRealData 이벤트가 아닌 OnReceiveChejanData 내에서 처리해야한다. OnRecieveChejanData 이벤트 처리하기이 부분은 여타 이벤트 처리 방법과 크게 다르지 않다. 키움증권 내에서 발생하는 이벤트는 아래의 7가지로, 그 외에 발생하는 이벤트는 존재하지 않는다. 따라서 아래 7개의 이벤트만 실행할 함수와 연결해주면 된다.self.kiwoom.OnReceiveTrData.connect(self.receive_trdata) self.kiwoom.OnReceiveRealData.connect(self...
2022.05.24 -
지난 게시글에서 언급했듯, 이번 글에서는 개별적 문제점들에 대한 해결 방법을 살펴볼 예정이다. 다만 문제점 ①이 아닌 문제점 ②를 먼저 다룰 예정인데, 이렇게 해야 수순이 맞다. 왜냐하면 관심종목이라는 역할을 수행할 수 있는 데이터베이스를 생성하기 위해서는 일단 대입할 종목코드 리스트가 필요한데, 그 종목코드 리스트는 조건검색식[0151]을 통해야 보다 수월하게 데이터를 조회할 수 있기 때문이다. 키움증권 상에서 조건검색식을 만드는 방법에 대해서는 여타 다른 게시글에서 충분히 설명하고 있으니 검색해서 보시길 바란다. 본격적인 설명에 앞서 영웅문 내에서 설정한 조건검색식의 조건을 바탕으로 선정된 종목을 살펴보도록 하겠다. A : [골든 크로스] 10일 이동평균선이 20일 이동평균선을 D : [골든 크로스]..
키움증권 Open API - 관심종목 관리하기 (2)지난 게시글에서 언급했듯, 이번 글에서는 개별적 문제점들에 대한 해결 방법을 살펴볼 예정이다. 다만 문제점 ①이 아닌 문제점 ②를 먼저 다룰 예정인데, 이렇게 해야 수순이 맞다. 왜냐하면 관심종목이라는 역할을 수행할 수 있는 데이터베이스를 생성하기 위해서는 일단 대입할 종목코드 리스트가 필요한데, 그 종목코드 리스트는 조건검색식[0151]을 통해야 보다 수월하게 데이터를 조회할 수 있기 때문이다. 키움증권 상에서 조건검색식을 만드는 방법에 대해서는 여타 다른 게시글에서 충분히 설명하고 있으니 검색해서 보시길 바란다. 본격적인 설명에 앞서 영웅문 내에서 설정한 조건검색식의 조건을 바탕으로 선정된 종목을 살펴보도록 하겠다. A : [골든 크로스] 10일 이동평균선이 20일 이동평균선을 D : [골든 크로스]..
2022.03.12 -
결론부터 이야기하자면 현재 키움증권 Open API 내에서는 관심종목을 관리할 수 있는 함수를 제공하지 않고 있다. 물론 KOA Studio에서 관심종목을 검색해보면 [OPTKWFID : 관심종목정보요청] 이라는 TR 목록이 존재하지만 이는 우리가 흔히 알고 있는 그 관심종목이 아니다. 코드를 통해 조회할 수 있는 [관심종목정보요청] 은 단순하게 해당 종목에 대한 정보를 요청하고 데이터를 받아오는 것 그 이상도 이하도 아닌 기능이다. 그렇다면 우리가 필요한 관심종목이라는 기능을 어떻게 구현할 수 있을까? 데이터베이스 활용하기 제목에서 알 수 있듯이, 데이터베이스를 활용하는 방법밖엔 없다. 이 과정에서 중요한 건 계좌 잔고에 대한 데이터도 함께 구축해주어야 한다는 것이다. 단순하게 주가 차트를 조회할 수 ..
키움증권 Open API - 관심종목 관리하기 (1)결론부터 이야기하자면 현재 키움증권 Open API 내에서는 관심종목을 관리할 수 있는 함수를 제공하지 않고 있다. 물론 KOA Studio에서 관심종목을 검색해보면 [OPTKWFID : 관심종목정보요청] 이라는 TR 목록이 존재하지만 이는 우리가 흔히 알고 있는 그 관심종목이 아니다. 코드를 통해 조회할 수 있는 [관심종목정보요청] 은 단순하게 해당 종목에 대한 정보를 요청하고 데이터를 받아오는 것 그 이상도 이하도 아닌 기능이다. 그렇다면 우리가 필요한 관심종목이라는 기능을 어떻게 구현할 수 있을까? 데이터베이스 활용하기 제목에서 알 수 있듯이, 데이터베이스를 활용하는 방법밖엔 없다. 이 과정에서 중요한 건 계좌 잔고에 대한 데이터도 함께 구축해주어야 한다는 것이다. 단순하게 주가 차트를 조회할 수 ..
2022.03.12 -
지난 게시글에서는 filtered_code() 함수를 통해 불러온 종목 코드들을 바탕으로 전체 종목의 일봉 차트 데이터를 조회하는 부분까지 알아봤다. 이번 게시글에서 알아볼 내용은 바로 차트 데이터를 DB에 저장하고 그를 어떻게 관리해야 하는지 등에 대한 방법론적인 부분에 대해 다루어볼 예정이다. 차트 데이터 DB에 저장하기 지난 시간에 제작했던 코드를 보면 for code in code_list:라고 제작한 부분이 있는데, 이는 code_list 안에 있는 ['000020', '000040', '000050' ···]와 같은 값들 중에서 code = '000020'이라는 가정 하에 코드를 실행하고, 그 다음 번 반복에서는 code = '000040'이라는 가정 하에 코드를 실행하는 방식으로 동작한다. ..
키움증권 Open API - 차트 데이터 관리 DB 제작 (1)지난 게시글에서는 filtered_code() 함수를 통해 불러온 종목 코드들을 바탕으로 전체 종목의 일봉 차트 데이터를 조회하는 부분까지 알아봤다. 이번 게시글에서 알아볼 내용은 바로 차트 데이터를 DB에 저장하고 그를 어떻게 관리해야 하는지 등에 대한 방법론적인 부분에 대해 다루어볼 예정이다. 차트 데이터 DB에 저장하기 지난 시간에 제작했던 코드를 보면 for code in code_list:라고 제작한 부분이 있는데, 이는 code_list 안에 있는 ['000020', '000040', '000050' ···]와 같은 값들 중에서 code = '000020'이라는 가정 하에 코드를 실행하고, 그 다음 번 반복에서는 code = '000040'이라는 가정 하에 코드를 실행하는 방식으로 동작한다. ..
2021.06.08 -
사실 지난 포스팅들을 바탕으로 대부분의 이벤트 처리가 가능하고 본인 역시 스스로 제작해보길 바라는 마음을 갖고 있긴 하지만 사실 또 제작하다가 오류가 발생했는데 어디서 오류가 발생한 건지, 어떻게 제작하는 것이 올바르게 작동하는 것인지 잘 모를 때에는 누군가의 도움이 필요하기 때문에 이번 포스팅도 제작하게 되었다. 차트 데이터 요청 함수 제작하기앞전 포스팅에서 제작했던 일봉 차트의 경우에는 def rq_chart_data로 제작했으나 분봉은 일봉과는 다른 값을 전송해야 하기 때문에 분봉 차트 조회는 별도의 함수를 제작함으로써 조회 요청을 할 수 있다. 즉 일봉 차트 조회의 경우에는 종목코드, 기준일자, 수정주가구분을 입력했지만 분봉 차트 조회의 경우에는 종목코드, 틱범위, 수정주가구분을 입력해주어야 한..
키움증권 Open API - 3분봉 차트 조회사실 지난 포스팅들을 바탕으로 대부분의 이벤트 처리가 가능하고 본인 역시 스스로 제작해보길 바라는 마음을 갖고 있긴 하지만 사실 또 제작하다가 오류가 발생했는데 어디서 오류가 발생한 건지, 어떻게 제작하는 것이 올바르게 작동하는 것인지 잘 모를 때에는 누군가의 도움이 필요하기 때문에 이번 포스팅도 제작하게 되었다. 차트 데이터 요청 함수 제작하기앞전 포스팅에서 제작했던 일봉 차트의 경우에는 def rq_chart_data로 제작했으나 분봉은 일봉과는 다른 값을 전송해야 하기 때문에 분봉 차트 조회는 별도의 함수를 제작함으로써 조회 요청을 할 수 있다. 즉 일봉 차트 조회의 경우에는 종목코드, 기준일자, 수정주가구분을 입력했지만 분봉 차트 조회의 경우에는 종목코드, 틱범위, 수정주가구분을 입력해주어야 한..
2021.06.07 -
이번 포스팅에서는 영웅문 내에서 설정된 조건검색식을 Open API와 연결된 파이썬을 통해 불러오고, 그를 바탕으로 검색된 종목의 종목코드를 출력하는 방법에 대해 서술하고자 한다. 조건검색식을 사용하면 편한 이유는 파이썬 내에서 특정 조건들을 만들어내지 않아도 된다는 것이다. 즉, 특정 조건에 알맞은 종목을 검색하는 데에 필요한 조건들을 만드는 것이 파이썬 내에 구축하는 것보다 차라리 영웅문 내의 조건검색 화면 내에서 구축하는 것이 백배 천배는 편하다는 것이다. 그러면 왜 굳이 파이썬으로 이러고 앉아있냐는 의문이 들 수 있는데, 그 이유는 영웅문 내에서 제공하지 않는 분석 조건들을 파이썬에서는 구축할 수 있기 때문이다. 물론 이 방법은 영웅문 내에 조건검색식이 구축되어 있지 않다면 사용할 수 없다. 왜냐..
키움증권 Open API - 조건 검색식 불러오기이번 포스팅에서는 영웅문 내에서 설정된 조건검색식을 Open API와 연결된 파이썬을 통해 불러오고, 그를 바탕으로 검색된 종목의 종목코드를 출력하는 방법에 대해 서술하고자 한다. 조건검색식을 사용하면 편한 이유는 파이썬 내에서 특정 조건들을 만들어내지 않아도 된다는 것이다. 즉, 특정 조건에 알맞은 종목을 검색하는 데에 필요한 조건들을 만드는 것이 파이썬 내에 구축하는 것보다 차라리 영웅문 내의 조건검색 화면 내에서 구축하는 것이 백배 천배는 편하다는 것이다. 그러면 왜 굳이 파이썬으로 이러고 앉아있냐는 의문이 들 수 있는데, 그 이유는 영웅문 내에서 제공하지 않는 분석 조건들을 파이썬에서는 구축할 수 있기 때문이다. 물론 이 방법은 영웅문 내에 조건검색식이 구축되어 있지 않다면 사용할 수 없다. 왜냐..
2021.06.01 -
지난 게시글에서 서버에 데이터를 요청하고 그 결과값을 받아오는 부분까지 코드를 제작했고, 이번 포스팅에서는 추가로 조회할 데이터가 남아 있다면 그 데이터를 어떻게 받아올 것인지에 대한 코드를 제작해보도록 하자. 일단 지난 포스팅에서 결과물이 깔끔하게 나오긴 했지만 사실 글을 업로드한 후에 요청 횟수당 600회를 불러올 수 있다는 점과 OnReceiveTrData 내에도 이벤트 루프를 종료하는 코드를 제작해주어야 연속 조회가 가능하다는 점을 깜빡하고 그 내용을 함께 소개하지 못했다. 그래서 이번에는 한 번의 조회로 총 600개의 데이터를 가져오는 것을 먼저 구축한 후 남아 있는 데이터가 있다면 그 데이터도 불러오도록(이하 연속조회) 하는 구조를 구축하도록 하겠다. OnReceiveTrData : "나도 이..
키움증권 Open API 차트 데이터 불러오기 (3)지난 게시글에서 서버에 데이터를 요청하고 그 결과값을 받아오는 부분까지 코드를 제작했고, 이번 포스팅에서는 추가로 조회할 데이터가 남아 있다면 그 데이터를 어떻게 받아올 것인지에 대한 코드를 제작해보도록 하자. 일단 지난 포스팅에서 결과물이 깔끔하게 나오긴 했지만 사실 글을 업로드한 후에 요청 횟수당 600회를 불러올 수 있다는 점과 OnReceiveTrData 내에도 이벤트 루프를 종료하는 코드를 제작해주어야 연속 조회가 가능하다는 점을 깜빡하고 그 내용을 함께 소개하지 못했다. 그래서 이번에는 한 번의 조회로 총 600개의 데이터를 가져오는 것을 먼저 구축한 후 남아 있는 데이터가 있다면 그 데이터도 불러오도록(이하 연속조회) 하는 구조를 구축하도록 하겠다. OnReceiveTrData : "나도 이..
2021.05.31 -
키움증권에서는 자사의 Open API의 사용 방법에 대해 기본적인 가이드 자료를 제공하고 있다. 다만 기본적으로 제공하는 함수의 형태가 파이썬에서 사용하기가 다소 어려운 형태로 되어 있기 때문에, 개발 가이드를 본다고 하더라도 어떻게 사용해야 할지 잘 모르는 경우가 태반이다. 따라서 해당 포스팅에서는 개발 가이드를 어떻게 활용할 수 있는지, 그리고 어떤 함수는 개별적으로 작동하고 어떤 함수는 다른 함수와 함께 사용되는지에 대해 정리해보고자 한다. TR 관련 함수TR 관련 함수란 개발 가이드 자료 중 [5.4 OpenAPI 컨트롤 이벤트] 항목 안에 있는 함수로, 총 8가지의 함수를 제공하고 있다. 또한 이에 대해 "차트 컨트롤에서 발생하는 컨트롤 이벤트 목록은 다음과 같다."고 설명하고 있는데, 솔직히 ..
키움증권 Open API 개발 가이드 사용 설명서 (1)키움증권에서는 자사의 Open API의 사용 방법에 대해 기본적인 가이드 자료를 제공하고 있다. 다만 기본적으로 제공하는 함수의 형태가 파이썬에서 사용하기가 다소 어려운 형태로 되어 있기 때문에, 개발 가이드를 본다고 하더라도 어떻게 사용해야 할지 잘 모르는 경우가 태반이다. 따라서 해당 포스팅에서는 개발 가이드를 어떻게 활용할 수 있는지, 그리고 어떤 함수는 개별적으로 작동하고 어떤 함수는 다른 함수와 함께 사용되는지에 대해 정리해보고자 한다. TR 관련 함수TR 관련 함수란 개발 가이드 자료 중 [5.4 OpenAPI 컨트롤 이벤트] 항목 안에 있는 함수로, 총 8가지의 함수를 제공하고 있다. 또한 이에 대해 "차트 컨트롤에서 발생하는 컨트롤 이벤트 목록은 다음과 같다."고 설명하고 있는데, 솔직히 ..
2021.05.22