CYBOS PLUS
-
대신증권 CYBOS PLUS 프로그램 구현 (23) - 실시간 데이터 수신받기 ③
프로그램 구현 목표요청 개수 자동 초기화 시점 획득하기: LimitRequestRemainTime타입별 요청 개수 자동 초기화 시점 획득하기: GetLimitRemainTime타입별 조회 제한이 걸리기까지 남은 요청 횟수: GetLimitRemainCount실시간 등록 종목의 잔여 횟수 GUI에 표기하기대신증권 Open API는 키움증권에서 제공하는 것과 동일하게, 조회 제한이 걸려 있다. 다만 차이점이 있다면 키움증권의 경우에는 조회 제한이 발생하면 프로그램을 멈추고 다시 실행시켜야 하지만 대신증권의 경우에는 서버 내부적으로 조회 제한 데이터를 확인하여 제한에 걸리면 데이터 조회를 멈추었다가 다시 진행시키도록 하고 있다는 것이다. 그렇다면 얼만큼의 시간이 지나야 다시 데이터를 요청할 수 있는 것일까 ?..
-
대신증권 CYBOS PLUS 프로그램 구현 (22) - 실시간 데이터 수신받기 ②
프로그램 구현 목표실시간 등록 개수 확인하기실시간 해제 기능 구현하기실시간 등록 목록 변수: 중복 처리 방지하기전체 종목 실시간 해제하기 실시간 등록 개수 확인하기대신증권 CYBOS PLUS Open API는 기본적으로 400개 종목에 대한 실시간 등록을 지원하고 있다. 또한 이 400개라는 데이터를 따로 확인할 수 있는 기능도 지원하고 있는데, 바로 CpUtil의 CpCybos에서 사용할 수 있는 `GetLimitRemainCount`함수이다. 이 함수는 기본적으로 3개의 데이터를 반환해주는데 그 목록은 아래와 같다. ※ 아래 이미지의 잔여 요청 횟수 부분 아래에 있는 주문 RQ, 시세 RQ, 시세 구독이라는 세 가지 부분에 대응하는 내용이다.Index 0(LT_TRADE_REQUEST): 주문 및 계..
-
대신증권 CYBOS PLUS 프로그램 구현 (21) - 실시간 데이터 수신받기 ①
프로그램 구현 목표Subscribe/Publish 통신 방식 알아보기실시간 데이터 요청 함수 제작하기실시간 데이터 요청할 GUI 생성하기예전에 작성했던 게시글에서 대신증권 CYBOS PLUS의 통신 방식에 대해 알아보았는데, 그 게시글에서는 대신증권의 통신 방식은 ① 요청/응답(Request/Reply, RQ/RP) 방식과 ② 구독/생산(Subscribe/Publish, SB/PB) 방식의 두 가지로 구분된다고 설명했었다. 이 중 첫 번째 통신 방식은 여태까지 구현했던 코드들의 동작 방식에서 살펴볼 수 있었듯이, `SetInputValue()` 함수를 통해 서버로 특정 데이터를 전달한 후 `Request` 또는 `BlockRequest`를 통해 데이터를 요청하는 방식이었다. 그렇다면 두 번째 방식은 어떠..
-
대신증권 CYBOS PLUS 프로그램 구현 (20) - 전종목 차트 데이터 저장하기 ③
프로그램 구현 목표문제점 보완하기 ③: 조회하는 시점의 날짜 데이터 획득하기문제점 보완하기 ④: 저장된 날짜를 기준으로 차트 데이터를 조회하고 새 날짜 저장하기대신증권 CYBOS PLUS 프로그램 구현 (18) - 전종목 차트 데이터 저장하기 ①대신증권 CYBOS PLUS 프로그램 구현 (19) - 전종목 차트 데이터 저장하기 ②지난 게시글에서 이미 저장되어 있는 차트 데이터 조회 일자를 불러오는 기능까지는 구현했으니 이번 게시글에서는 `time` 라이브러리를 활용하여 차트 데이터를 조회하는 시점의 날짜 데이터를 획득하고, 차트 데이터 조회를 완료한 경우 그 날짜 데이터를 테이블에 저장하는 기능을 구현해볼 예정이다. 아마도 이번 게시글에서 전종목 차트 데이터 저장 기능은 모두 구현할 수 있을 것이다. 문..
-
대신증권 CYBOS PLUS 프로그램 구현 (19) - 전종목 차트 데이터 저장하기 ②
프로그램 구현 목표문제점 확인하기: 이어받기가 안 되네 ?문제점 보완하기 ①: 차트 데이터를 조회한 시점을 저장할 테이블을 생성해보자.문제점 보완하기 ②: 차트 데이터 조회 일자가 저장된 테이블을 불러와보자. 문제점 확인하기: 이어받기가 안 되네 ?기존까지 제작한 프로그램을 다시 실행시켜서 전종목 차트 데이터 조회 버튼을 누르면 차트 데이터를 조회하는 것은 정상적으로 동작하지만 정작 데이터를 조회하는 꼴을 보면 이미 저장되어 있는 종목에 대한 차트 데이터도 조회한다는 것을 확인할 수 있다. 이와 더불어 기존에 `class manage_db`(con_mysql.py 파일) 클래스 내부에서 오류가 발생했을 때(`except`)에 "오류가 발생했습니다. 데이터를 저장하지 않습니다."라는 문구와 함께 오류 메시..
-
대신증권 CYBOS PLUS 프로그램 구현 (18) - 전종목 차트 데이터 저장하기 ①
프로그램 구현 목표전체 종목 차트 데이터 저장하는 버튼과 함수 만들고 연결하기전체 종목 조회한 후 반복문으로 분봉 차트 데이터 조회하기일봉 및 주봉 차트 데이터도 조회하기 전체 종목 차트 데이터 저장하는 버튼과 함수 만들고 연결하기이제 GUI 파일을 열어서 버튼 하나 생성하는 것은 어렵지 않을 것이다. 아래와 같이 버튼을 하나 생성해주도록 하자.이제 전체 종목 차트 데이터를 저장할 함수를 생성하고, 초기화 함수에서 버튼 객체와 함수를 연결해주도록 하자.※ Line: 33 ~ 36## Boss.py ##import win32com.clientfrom pywinauto import applicationimport con_mysqlfrom COM import CpSysDibfrom COM import CpUt..
-
대신증권 CYBOS PLUS 프로그램 구현 (17) - 데이터베이스 관리 자동화
프로그램 구현 목표필요한 데이터베이스 목록 정하기데이터베이스 존재여부 확인하기자동화라고 해서 뭐 거창한 기능이 있을 것 같지만, 그런 부분은 아니고 단순하게 프로그램이 실행되었을 때 우리가 필요로 하는 데이터베이스가 잘 있는지 확인하고 만약에 필요한 데이터베이스가 없다면 생성해주는 작업을 자동적으로 수행하도록 하는 것이다. 필요한 데이터베이스 목록 정하기기본적으로 사람마다 어떠한 데이터베이스를 사용할지는 모르지만, 적어도 분봉 · 일봉 정도로만 구분해놓고 사용할 것이다. 다만 분봉의 경우에는 3분봉이면 3분봉, 5분봉이면 5분봉과 같이 각 분봉별로 데이터베이스를 생성해두어야 차트 데이터를 종류별로 저장하고 사용할 때에도 간편하게 불러와서 사용할 수 있다. 일단 본인의 경우에는 분봉은 5분봉과 15분봉, ..
-
대신증권 CYBOS PLUS 프로그램 구현 (16) - 차트 데이터 저장하기 ③
프로그램 구현 목표차트 데이터 조회하고 종목코드로 MySQL에 저장하기GUI에서 저장 여부 결정하는 기능 추가하기그럼 매번 체크해야 차트 데이터를 저장할 수 있어요 ?조회 구분에 따라 각기 다른 데이터베이스에 저장하기 차트 데이터 조회하고 종목코드로 MySQL에 저장하기차트 데이터 조회는 이전에 만들어두었던 CpSysDib.py 파일의 `class StockChart` 클래스의 `def chart_DWM()` 함수를 사용하면 된다. 이제 이 함수를 아래의 두 가지 기능을 수정할 것이다.※ Line: 10, 68함수의 인자로 차트 데이터 저장 여부(`save_gubun`)) 전달받아서 MySQL에 저장할지 말지 결정하기`return` 활용하여 조회한 차트 데이터 반환하기## CpSysDib.py ##imp..
-
대신증권 CYBOS PLUS 프로그램 구현 (15) - 차트 데이터 저장하기 ②
프로그램 구현 목표파이참에서 MySQL에 데이터베이스 생성하기파이썬의 Magic Methods 활용하기차트 데이터를 저장할 클래스 생성하기지난 게시글에서는 ①데이터베이스의 존재 여부를 확인하는 기능과 ②데이터베이스와 연결하는 기능을 구현하였다. 이번 게시글에서부터는 데이터베이스를 생성하는 기능을 구현하고, 프로그램 시작과 동시에 해당 데이터베이스의 존재 여부를 판단하고 존재하지 않으면 데이터베이스를 생성하도록 하는 기능을 구현할 예정이다. 파이참에서 MySQL에 데이터베이스 생성하기데이터베이스를 생성할 함수를 con_mysql.py 파일의 `class check_db` 클래스 내부에 `def _make_db(self, db_name):`이라는 이름으로 하여 생성해주도록 하자. 이제 이 함수의 인자로 전달..
-
대신증권 CYBOS PLUS 프로그램 구현 (14) - 차트 데이터 저장하기 ①
프로그램 구현 목표MySQL 설치 및 구조 이해하기MySQL과 파이썬 연결하기 : sqlalchemy데이터베이스 존재 여부 확인하기이번 게시글에서는 이전에 제작한 차트 데이터 저장 함수를 활용하여 획득한 차트 데이터를 MySQL이라는 데이터베이스 프로그램을 설치한 후, MySQL의 구조를 이해하고 우리가 조회한 차트 데이터를 저장하고 또 다시 불러오는 방법에 대해 살펴보고자 한다. MySQL 설치 및 구조 이해하기이 프로그램을 설치하는 방법은 워낙에 다양한 게시글에서 설명하고 있으니 이 게시글에서는 설치 방법에 대한 설명은 제외하고, 참고하면 좋은 게시글의 링크를 첨부하여 둘테니 그 게시글의 설치 방법을 참고하도록 하자.※ 설치할 때 입력한 비밀번호는 기억해두도록 하자. 아래에서 사용할 때 필요하다. ..
-
대신증권 CYBOS PLUS 프로그램 구현 (13) - 로그인 시 계좌 조회하기
프로그램 구현 목표주문 초기화 및 계좌번호를 구하기 : CpTrade.CpTdUtil계좌 잔고 조회하기 : CpTrade.CpTd6033로그인과 동시에 계좌 조회하기대신증권에서 계좌를 조회할 때 제공해주는 함수는 `CpTrade`의 `CpTd6033` 모듈을 활용해야 하는데, 이 모듈을 사용하기 위해서는 아래의 세 가지 작업을 반드시 구축해주어야 한다.CpTrade.CpTdUtil 모듈의 TradeInit 함수 → 주문 초기화 기능 구현CpTrade.CpTdUtil 모듈의 AccountNumber 함수 → 계좌번호 조회 기능 구현CpTrade.CpTdUtil 모듈의 GoodsList 함수 → 계좌의 거래 가능 범위 구현 주문 초기화 및 계좌번호 구하기 : CpTrade.CpTdUtil대신증권 Open ..
-
대신증권 CYBOS PLUS 프로그램 구현 (12) - 분봉 차트 조회하기
프로그램 구현 목표최대로 회신 가능한 데이터 확인하기분봉 차트 조회 함수 제작하기연속 조회 기능 구현하기15분봉 말고 다른 분봉도 조회해보죠 ① GUI로 기능 구현하기15분봉 말고 다른 분봉도 조회해보죠 ② 함수의 인자로 전달받기 최대로 회신 가능한 데이터 확인하기여기서 살펴볼 회신 가능한 데이터라는 개념은 일봉 차트를 구현할 때 확인했던 2,856개(분봉은 2,499개임)라는 개념과는 달리, 분봉 차트 데이터의 경우에만 적용되는 조회 가능한 범위의 한계가 있다. 대신증권 운영진 측의 답변에 따르면 아래와 같이 정리된다.1분봉: 2년5분봉: 5년틱봉: 20일 분봉 차트 조회 함수 제작하기분봉 차트는 기존에 살펴봤던 내용과 같이 데이터의 개수로만 조회가 가능하다. 그 전에 앞서 이전에 제작해두었던 일봉·..
Kiwoom Open API
-
키움증권 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...
-
키움증권 Open API. 차트 데이터를 모두 불러올 필요가 있을까?
자동 매매 프로그램을 제작하는 과정에 있어 얼마 지나지 않아 느꼈던 부분이지만, 이전에 백테스팅을 하는 과정에서 제작해두었던 코드를 그대로 사용하다 보니 실제 거래를 진행하기 위해 필요하지 않은 코드가 있었고, 그 코드로 인해 데이터 수집과 처리에 소모되는 시간이 길어지게 되고 자연스럽게 그에 따라 처리해야 할 오류(발생할 수 있는 오류)가 많아졌다. 오늘은 여러 가지 문제점들 중 하나인 차트 데이터에 대해 이야기해볼 예정이다. 차트 데이터는 본인 역시 여러 개의 게시글을 통해 차트 데이터를 불러오고 저장하는 방법들에 대해 다루었다. 하지만 실질적으로 매매 프로그램은 "저장된 차트 데이터"가 필요하지 않다. 특히 단기 거래라면 더더욱 불필요하다. 물론 거래를 진행하는 관점이 단기가 아닌 중장기라면 일봉 ..
-
키움증권 Open API 거래일자 데이터 얻기 (3)
아마 이번 게시글을 마지막으로 거래일 데이터를 조회하는 코드를 모두 구축할 수 있을 것 같다.(아마도) 키움증권 Open API 거래일자 데이터 얻기 (1) 키움증권 Open API 거래일자 데이터 얻기 (2) 우리가 찾는 날짜가 거래일자인지부터 확인해보자. 지난 게시글에서 우리는 day_data라는 변수 내에 \n을 제거한 일자 데이터만을 입력해주었고, 그 일자 데이터들은 모두 거래일에 해당하는 일자들이었다. 이제 우리는 우리가 확인하고자 하는 일자가 day_data 내에 있는지만 확인해주면 된다. result = read_text("거래일데이터", "trade_date") day_data = [] for i in result: date = i.replace("\n", "") day_data.appen..
-
키움증권 Open API 거래일자 데이터 얻기 (2)
이번 게시글에서는 trade_date.txt 파일 내에 거래일 데이터를 임의로 직접 입력한 후에 직접 거래일을 계산해보거나 거래일을 찾는 함수를 제작해볼 예정이다. 그 전에 앞서, 지난 게시글에서 def append_text() 함수를 통해 날짜 데이터를 입력해주는 코드를 구축했었는데 입력하는 데이터를 잘 살펴보면 단순하게 "20220101"과 같은 형태로 입력하도록 제작했었다. 단순히 이런 식으로 데이터를 입력하도록 한다면 열흘이 지난 후에 텍스트 파일에는 다음과 같은 텍스트가 입력되어 있을 것이다. "20220101202201022022010320220104202201052022010620220107202201082022010920220110" 프로그래밍에 있어 우리가 사용할 데이터는 우리가 사용하기..
-
키움증권 Open API 거래일자 데이터 얻기 (1)
오늘도 역시 결론부터 설명하자면, 키움증권 Open API 내에서는 거래일자를 조회할 수 있는 함수가 제공되지 않고 있다. 그니까, 특정 일자를 변수로 입력해주면 해당 일자가 거래일인지 아닌지를 반환하는 함수가 제공되지 않는다는 것이다. 우리는 간혹 거래를 진행하다 보면 특정 일자가 거래가 진행되는 날인지 아닌지를 파악해야 하는 경우가 분명 존재하는데, 키움증권의 Open API는 그런 기능을 제공하지 않고 있다는 것이다. 물론 그 이유에 대해서는 알 수 없다. 다만 우리가 특정 일자가 거래일자였는지를 확인하고자 하는 이유는 바로 거래일이라는 개념이 거래를 진행하는 데에 있어 생각보다 큰 영향력을 갖기 때문이다. 예를 들어 미수를 통해 특정 종목에 비중을 실어 매수를 하는 알고리즘이 있다고 했을 때 매수..
-
자동 매매 프로그램의 가격 데이터 관리 (2)
지난 게시글에서 실시간 데이터가 발생한 후 해당 데이터를 기반으로 가격 데이터를 어떻게 비교하여 거래를 진행하게 되는지에 대해 살펴보았고, 마지막에는 "과연 하나의 알고리즘만 사용할 것인가?"하는 소제목과 함께 끝마쳤다. 그럼 이제 그 부분이 뭔 소린지 다시 한 번 살펴보도록 하자. 나는 진짜 하나의 알고리즘만 쓸 건데? 뭐, 백 번 양보해서 정말 하나의 알고리즘만 사용할 것이라고 가정해보도록 하자. 당신은 얼마 가지 않아 "어.. 이런 유형의 주가 흐름은 비중을 조금 더 싣고, 이런 유형의 주가 흐름은 비중을 조금 더 줄이고 싶은데.."하는 생각이 들 것이다. 이럴 때 사용할 수 있는 것이 바로 해당 종목의 거래 유형 번호를 저장하는 것이다. 아래의 도표를 살펴보도록 하자. 만약 당신의 주가 데이터를 ..
-
자동 매매 프로그램의 가격 데이터 관리 - (1)
이번 게시글에서는 키움증권 Open API를 이용한 자동 매매 시스템을 구축하고자 할 때, 어떠한 로직을 통해 이루어져야 하는지에 대해 간략하게나마 살펴볼 예정이다. 게시글을 통해 "아. 이러이러한 로직을 거쳐 동작하도록 구축하면 되겠구나."하는 정도의 감만 온다면 이 게시글의 목표는 모두 달성한 것이라 볼 수 있다. 키움증권 Open API는 기본적으로 실시간 등록을 통해 데이터 조회가 이루어진다. 그 말인 즉슨, 우리가 거래하고자 하는 종목은 실시간 등록이 되어 있어야 실시간으로 거래를 진행할 수 있다는 것이다. 대략적으로 설명하자면, 실시간 데이터는 아래와 같은 로직으로 이루어진다. SetRealReg(scrno, codelist, fidlist, realtype) : 실시간 조회 종목으로 등록 ↓..
-
키움증권 Open API - 거래 내역 조회하기 (4)
거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 거래 내역 조회하기 (3) 게시글 바로가기 이제 "주문구분"의 값이 무엇인가에 따라 데이터를 다른 곳에 입력하기만 하면 거래 내역은 모두 조회하게 된다. 주문 구분에 따라 데이터 입력하기 : def opw00007(trcode, recordname) 지난 게시글에서 현금 매수와 현금 매도까지 구분해두었다. 다만 이제 본인이 제작한 것은 분할매수의 알고리즘을 가지고 있다고 가정했을 경우에 필요한 데이터들이기 때문에, 매수 데이터가 발생했을 때 해당 매수 거래가 첫 번째 매수인지 두 번째 매수인지를 구분해야 할 것이다. 그러기 위해서는 앞서 제작했던 self.temporary_hold_account 변수의 ['first_b..
-
키움증권 Open API - 거래 내역 조회하기 (3)
거래 내역 조회하기 (1) 게시글 바로가기 거래 내역 조회하기 (2) 게시글 바로가기 이번 게시글에서는 "주문구분"의 값이 "매수"인가 "매도"인가를 바탕으로 주문의 성격을 구분하고, 그를 바탕으로 거래 내역 데이터를 데이터프레임에 입력할 것이다. 다만 정말 중요하고 중요한 주의사항이 있다면, 이는 항상 일관적인 거래 방식을 따라 거래가 이루어졌어야 한다는 것이다. 예를 들어, 최대 2번의 분할매수가 이루어질 수 있고 매도는 최대 2번에 걸쳐 분할 매도가 이루어지는 거래 알고리즘이 있다고 가정해보자. 이 때 본인이 장을 보다가 프로그램이 아닌 본인이 "어, 이 종목은 사야겠는데?"하는 생각에 외부의 개입으로 추가적인 매수가 이루어진 경우에는 2번의 분할매수와 2번의 분할매도라는 기존의 알고리즘에서 벗어나..
-
키움증권 Open API - 거래 내역 조회하기 (2)
거래 내역 조회하기 (1) 게시글 바로가기 이제 지난 게시글에 이어서 요청한 데이터를 받아오는 부분을 구축해보도록 하자. OnReceiveTrData 내에서 함수랑 연결해주기 self._commrqdata("rq_opw00007", "opw00007", 0, '0351') 지난 게시글에서 데이터를 전송하는 commrqdata(rqname, trcode, prenext, scrno) 함수 내에서 rqname 안에 "rq_opw00007"을 입력했었으니, 이제는 OnReceiveTrData 내에서 if rqname == "rq_opw00007"을 통해 특정 함수와 연결해주는 코드를 제작해야 한다. def receive_trdata(self, scrno, rqname, trcode, recordname, pr..
-
키움증권 Open API - 거래 내역 조회하기 (1)
키움증권 Open API의 경우에는 주문이나 차트 데이터 조회 등과 같은 것들에 대해서는 정말 손쉽게 사용할 수 있도록 친절하게 설명하고 있지만, 문제는 주문 내역을 관리하기 위해 주문일자를 제공한다거나 하는 등의 데이터는 잘 제공하지 않고 있다. ※ 키움증권 Open API 관계자가 이 글을 볼 리는 없지만, 만약 본다면 이 부분은 꼭 추가해주길 바랍니다. 본격적으로 거래 내역을 조회하기 전에 앞서, 일단 여기서 사용하고자 하는 트랜잭션(Transaction, 이하 TR)은 opw00007이다. opw00007을 사용하기 위해서는 계좌와 관련된 데이터를 전달해줘야 하는데, 계좌 데이터는 직접 입력을 해주어도 되고 다른 TR을 이용해서 계좌 데이터를 얻어온 후에, 그 데이터를 그대로 전달해줘도 된다. O..
-
키움증권 Open API - 관심종목 관리하기 (3)
키움증권 Open API - 관심종목 관리하기 (1) 키움증권 Open API - 관심종목 관리하기 (2) 지난 게시글에서는 기존에 설정한 조건검색식이 찾아낸 종목코드를 얻어오는 방법까지 확인했다. 다만 관심종목에 추가하기 위해서는 해당 종목의 데이터가 필요하기 마련히고 더군다나 해당 종목을 매수할 계획이 있다면 매수를 진행할 가격까지도 사전에 계산해서 관심종목 데이터 안에 입력해주어야 한다. 아직은 이 프로세스가 어렵게 느껴질 수 있겠지만, 엄밀히 따지면 반드시 필요한 절차에 해당하는 부분이므로 이해가 가지 않는다고 하더라도 그냥 그대로 따라하면 큰 어려움 없이 프로그램을 만들 수 있다. 일단 본격적인 내용을 설명하기 전에 앞서, 조건검색식을 통해 종목을 관리할 수 있는 두 가지 방법에 대해 알아보자...
최신 글
-
3달 간 알아본 보험 가입기
세 줄 요약현재 보유하고 있는 보험의 질병 코드와 진단비를 분석하라부족한 보장 금액을 설정해서 채우고 싶은 부분만 추가해라추가하고자 하는 부족한 보장에 대해 여러 보험사로부터 제안서를 받고 비교·분석해서 가성비를 비교해라 서론하루하루 날이 흘러감에 따라 더 늦기 전에 보험에 가입해야겠다는 생각이 들어서 보험을 알아보고 있던 중, 나에게 실비보험과 암보험(그마저도 옛날에 들어 보장 금액이 적은) 말고는 딱히 들어져 있는 보험이 없다는 걸 알게 되었고 이에 따라 목표치를 설정하고 보험을 알아보던 중에 있었던 일들과 보험을 가입하는 데에 있어 고려해야 하는 점들에 대해 기록을 남겨두고자 한다.나중에 보험 리모델링(보험 수정)을 하거나 추후에 태어날 자녀를 위해 미리 공부했다고 생각하고 그렇게 공부했던 것들..
-
이디야 메뉴 컴플레인 후기 (진행 중)
뭐 대단한 컴플레인을 기대하고 들어오신 분들께는 죄송하지만, 그냥 내가 좋아하는 메뉴에 대한 간단한 컴플레인임을 먼저 밝힌다. 나는 개인적으로 이디야에서 판매하는 (디카페인 여부를 떠나) 콜드브루 라떼를 맛있어 하는 일반적인 소비자다. 다만 스타벅스의 경우에는 아메리카노가 그냥 맛있다기 보다는 그 맛을 잘 못 느끼게 탄 맛이 날 정도로 로스팅을 해서 파는 특징 때문에 '어느 지점을 가든 맛이 일정하다.'는 장점과 동시에 '커피에 탄 맛이 나서 맛이 없다'는 단점이 합쳐져 '어느 지점을 가든 탄 맛이 나서 맛이 없다.'는 결론에 도달한 후로는 직장 동료들과 방문할 때가 아니면 잘 방문하지 않았다. 그나마 자주 가는 카페가 이디야 또는 직장 근처에 커피가 맛있는 카페 두 곳 뿐이었는데, 직장 근처 지점이야 ..
-
키움증권 Open API 시간 간격 설정하기
하나의 종목별로 일봉, 3분봉, 15분봉 데이터에 대해 데이터를 조회하고 `pandas` 라이브러리의 `to_sql` 메서드를 통해 데이터를 저장한다고 가정했을 때, 조회 단위별로 설정해주어야 하는 `time.sleep()` 값은 어떤 값이 적절한지 직접 비교해보았다.비교 대상은 차트 데이터 조회 중에 걸어둔 `time.sleep()` 내에 들어가는 시간과 해당 차트 데이터를 조회하는 데에 소요되는 시간으로, 차트 데이터를 조회하면서 '과다 조회 오류'가 발생하기 전까지 조회할 수 있었던 종목의 개수와 소요된 시간 및 종목당 소요된 시간을 비교하는 것이다. [실험 조건] 1. 일봉, 3분봉, 15분봉을 기준으로 상장기준일 이후의 모든 차트 데이터를 조회한다. 2. 일봉 데이터는 일반적인 ..
-
대신증권 CYBOS PLUS 프로그램 구현 (23) - 실시간 데이터 수신받기 ③
프로그램 구현 목표요청 개수 자동 초기화 시점 획득하기: LimitRequestRemainTime타입별 요청 개수 자동 초기화 시점 획득하기: GetLimitRemainTime타입별 조회 제한이 걸리기까지 남은 요청 횟수: GetLimitRemainCount실시간 등록 종목의 잔여 횟수 GUI에 표기하기대신증권 Open API는 키움증권에서 제공하는 것과 동일하게, 조회 제한이 걸려 있다. 다만 차이점이 있다면 키움증권의 경우에는 조회 제한이 발생하면 프로그램을 멈추고 다시 실행시켜야 하지만 대신증권의 경우에는 서버 내부적으로 조회 제한 데이터를 확인하여 제한에 걸리면 데이터 조회를 멈추었다가 다시 진행시키도록 하고 있다는 것이다. 그렇다면 얼만큼의 시간이 지나야 다시 데이터를 요청할 수 있는 것일까 ?..
-
대신증권 CYBOS PLUS 프로그램 구현 (22) - 실시간 데이터 수신받기 ②
프로그램 구현 목표실시간 등록 개수 확인하기실시간 해제 기능 구현하기실시간 등록 목록 변수: 중복 처리 방지하기전체 종목 실시간 해제하기 실시간 등록 개수 확인하기대신증권 CYBOS PLUS Open API는 기본적으로 400개 종목에 대한 실시간 등록을 지원하고 있다. 또한 이 400개라는 데이터를 따로 확인할 수 있는 기능도 지원하고 있는데, 바로 CpUtil의 CpCybos에서 사용할 수 있는 `GetLimitRemainCount`함수이다. 이 함수는 기본적으로 3개의 데이터를 반환해주는데 그 목록은 아래와 같다. ※ 아래 이미지의 잔여 요청 횟수 부분 아래에 있는 주문 RQ, 시세 RQ, 시세 구독이라는 세 가지 부분에 대응하는 내용이다.Index 0(LT_TRADE_REQUEST): 주문 및 계..
-
대신증권 CYBOS PLUS 프로그램 구현 (21) - 실시간 데이터 수신받기 ①
프로그램 구현 목표Subscribe/Publish 통신 방식 알아보기실시간 데이터 요청 함수 제작하기실시간 데이터 요청할 GUI 생성하기예전에 작성했던 게시글에서 대신증권 CYBOS PLUS의 통신 방식에 대해 알아보았는데, 그 게시글에서는 대신증권의 통신 방식은 ① 요청/응답(Request/Reply, RQ/RP) 방식과 ② 구독/생산(Subscribe/Publish, SB/PB) 방식의 두 가지로 구분된다고 설명했었다. 이 중 첫 번째 통신 방식은 여태까지 구현했던 코드들의 동작 방식에서 살펴볼 수 있었듯이, `SetInputValue()` 함수를 통해 서버로 특정 데이터를 전달한 후 `Request` 또는 `BlockRequest`를 통해 데이터를 요청하는 방식이었다. 그렇다면 두 번째 방식은 어떠..
-
대신증권 CYBOS PLUS 프로그램 구현 (20) - 전종목 차트 데이터 저장하기 ③
프로그램 구현 목표문제점 보완하기 ③: 조회하는 시점의 날짜 데이터 획득하기문제점 보완하기 ④: 저장된 날짜를 기준으로 차트 데이터를 조회하고 새 날짜 저장하기대신증권 CYBOS PLUS 프로그램 구현 (18) - 전종목 차트 데이터 저장하기 ①대신증권 CYBOS PLUS 프로그램 구현 (19) - 전종목 차트 데이터 저장하기 ②지난 게시글에서 이미 저장되어 있는 차트 데이터 조회 일자를 불러오는 기능까지는 구현했으니 이번 게시글에서는 `time` 라이브러리를 활용하여 차트 데이터를 조회하는 시점의 날짜 데이터를 획득하고, 차트 데이터 조회를 완료한 경우 그 날짜 데이터를 테이블에 저장하는 기능을 구현해볼 예정이다. 아마도 이번 게시글에서 전종목 차트 데이터 저장 기능은 모두 구현할 수 있을 것이다. 문..
-
대신증권 CYBOS PLUS 프로그램 구현 (19) - 전종목 차트 데이터 저장하기 ②
프로그램 구현 목표문제점 확인하기: 이어받기가 안 되네 ?문제점 보완하기 ①: 차트 데이터를 조회한 시점을 저장할 테이블을 생성해보자.문제점 보완하기 ②: 차트 데이터 조회 일자가 저장된 테이블을 불러와보자. 문제점 확인하기: 이어받기가 안 되네 ?기존까지 제작한 프로그램을 다시 실행시켜서 전종목 차트 데이터 조회 버튼을 누르면 차트 데이터를 조회하는 것은 정상적으로 동작하지만 정작 데이터를 조회하는 꼴을 보면 이미 저장되어 있는 종목에 대한 차트 데이터도 조회한다는 것을 확인할 수 있다. 이와 더불어 기존에 `class manage_db`(con_mysql.py 파일) 클래스 내부에서 오류가 발생했을 때(`except`)에 "오류가 발생했습니다. 데이터를 저장하지 않습니다."라는 문구와 함께 오류 메시..
-
대신증권 CYBOS PLUS 프로그램 구현 (18) - 전종목 차트 데이터 저장하기 ①
프로그램 구현 목표전체 종목 차트 데이터 저장하는 버튼과 함수 만들고 연결하기전체 종목 조회한 후 반복문으로 분봉 차트 데이터 조회하기일봉 및 주봉 차트 데이터도 조회하기 전체 종목 차트 데이터 저장하는 버튼과 함수 만들고 연결하기이제 GUI 파일을 열어서 버튼 하나 생성하는 것은 어렵지 않을 것이다. 아래와 같이 버튼을 하나 생성해주도록 하자.이제 전체 종목 차트 데이터를 저장할 함수를 생성하고, 초기화 함수에서 버튼 객체와 함수를 연결해주도록 하자.※ Line: 33 ~ 36## Boss.py ##import win32com.clientfrom pywinauto import applicationimport con_mysqlfrom COM import CpSysDibfrom COM import CpUt..
-
대신증권 CYBOS PLUS 프로그램 구현 (17) - 데이터베이스 관리 자동화
프로그램 구현 목표필요한 데이터베이스 목록 정하기데이터베이스 존재여부 확인하기자동화라고 해서 뭐 거창한 기능이 있을 것 같지만, 그런 부분은 아니고 단순하게 프로그램이 실행되었을 때 우리가 필요로 하는 데이터베이스가 잘 있는지 확인하고 만약에 필요한 데이터베이스가 없다면 생성해주는 작업을 자동적으로 수행하도록 하는 것이다. 필요한 데이터베이스 목록 정하기기본적으로 사람마다 어떠한 데이터베이스를 사용할지는 모르지만, 적어도 분봉 · 일봉 정도로만 구분해놓고 사용할 것이다. 다만 분봉의 경우에는 3분봉이면 3분봉, 5분봉이면 5분봉과 같이 각 분봉별로 데이터베이스를 생성해두어야 차트 데이터를 종류별로 저장하고 사용할 때에도 간편하게 불러와서 사용할 수 있다. 일단 본인의 경우에는 분봉은 5분봉과 15분봉, ..
-
대신증권 CYBOS PLUS 프로그램 구현 (16) - 차트 데이터 저장하기 ③
프로그램 구현 목표차트 데이터 조회하고 종목코드로 MySQL에 저장하기GUI에서 저장 여부 결정하는 기능 추가하기그럼 매번 체크해야 차트 데이터를 저장할 수 있어요 ?조회 구분에 따라 각기 다른 데이터베이스에 저장하기 차트 데이터 조회하고 종목코드로 MySQL에 저장하기차트 데이터 조회는 이전에 만들어두었던 CpSysDib.py 파일의 `class StockChart` 클래스의 `def chart_DWM()` 함수를 사용하면 된다. 이제 이 함수를 아래의 두 가지 기능을 수정할 것이다.※ Line: 10, 68함수의 인자로 차트 데이터 저장 여부(`save_gubun`)) 전달받아서 MySQL에 저장할지 말지 결정하기`return` 활용하여 조회한 차트 데이터 반환하기## CpSysDib.py ##imp..
-
대신증권 CYBOS PLUS 프로그램 구현 (15) - 차트 데이터 저장하기 ②
프로그램 구현 목표파이참에서 MySQL에 데이터베이스 생성하기파이썬의 Magic Methods 활용하기차트 데이터를 저장할 클래스 생성하기지난 게시글에서는 ①데이터베이스의 존재 여부를 확인하는 기능과 ②데이터베이스와 연결하는 기능을 구현하였다. 이번 게시글에서부터는 데이터베이스를 생성하는 기능을 구현하고, 프로그램 시작과 동시에 해당 데이터베이스의 존재 여부를 판단하고 존재하지 않으면 데이터베이스를 생성하도록 하는 기능을 구현할 예정이다. 파이참에서 MySQL에 데이터베이스 생성하기데이터베이스를 생성할 함수를 con_mysql.py 파일의 `class check_db` 클래스 내부에 `def _make_db(self, db_name):`이라는 이름으로 하여 생성해주도록 하자. 이제 이 함수의 인자로 전달..