자동매매
-
학습 목표캡슐화 이해하기IsConnect 함수 캡슐화하기캡슐화라는 것은 특정 함수를 어디서 호출하든지 간에 동일한 논리 구조에 따라 동작하는 함수를 생성하는 것이라 생각하면 된다. 이번 게시글에서는 `IsConnect()` 함수를 하나의 캡슐화를 통해 프로그램 실행과 동시에 연결 성공 여부를 판단하도록 하는 함수를 제작할 예정이다. (1) 캡슐화란기본적으로 A라는 값을 전달했을 때 A라는 숫자에 10을 더한 숫자를 반환해주는 기능을 구현하고 싶다고 가정해보자. 그렇다면 캡슐화라는 이름을 가진 함수(`capsulation()`)는 A와 같이 특정 값을 전달받아야 하는데, 이를 함수의 인자(parameter)라고 한다. 함수는 얼마든지 많은 인자를 전달받을 수 있고 인자를 전달받지 않고도 얼마든지 구현할 ..
005. 대신증권 CYBOS PLUS 시작하기 (2) - 연결함수 캡슐화학습 목표캡슐화 이해하기IsConnect 함수 캡슐화하기캡슐화라는 것은 특정 함수를 어디서 호출하든지 간에 동일한 논리 구조에 따라 동작하는 함수를 생성하는 것이라 생각하면 된다. 이번 게시글에서는 `IsConnect()` 함수를 하나의 캡슐화를 통해 프로그램 실행과 동시에 연결 성공 여부를 판단하도록 하는 함수를 제작할 예정이다. (1) 캡슐화란기본적으로 A라는 값을 전달했을 때 A라는 숫자에 10을 더한 숫자를 반환해주는 기능을 구현하고 싶다고 가정해보자. 그렇다면 캡슐화라는 이름을 가진 함수(`capsulation()`)는 A와 같이 특정 값을 전달받아야 하는데, 이를 함수의 인자(parameter)라고 한다. 함수는 얼마든지 많은 인자를 전달받을 수 있고 인자를 전달받지 않고도 얼마든지 구현할 ..
2024.07.26 -
이전에 첫 번째 게시글에서는 대신증권 CYBOS PLUS의 통신 방식을 간략하게 알아보았고, 두 번째 게시글에서는 통신 방식에 대해 하나의 예시를 들어 조금 더 자세하게 살펴보았다. 이번 게시글에서는 대신증권 CYBOS PLUS와 연결해보도록 하자. 그 전에, 대신증권의 CYBOS PLUS는 파이썬 언어를 통해 구현할 예정이며, 해당 시스템을 구현하기 위한 IDE인 파이참의 설치와 파이참 설정 방법은 해당 텍스트에 걸려 있는 링크를 통해 설치하고 설정을 변경하고 오도록 하자. (1) trade_cybos 프로젝트 생성프로젝트명은 `trade_cybos`로 하고, 해당 프로젝트의 전체적인 내용을 담을 파일 명을 `Boss.py`로 하여 프로젝트를 생성했다. 프로젝트 생성은 파일(F) - 새 프로젝트를 ..
004. 대신증권 CYBOS PLUS 시작하기 (1) - 기본구조 구현하기이전에 첫 번째 게시글에서는 대신증권 CYBOS PLUS의 통신 방식을 간략하게 알아보았고, 두 번째 게시글에서는 통신 방식에 대해 하나의 예시를 들어 조금 더 자세하게 살펴보았다. 이번 게시글에서는 대신증권 CYBOS PLUS와 연결해보도록 하자. 그 전에, 대신증권의 CYBOS PLUS는 파이썬 언어를 통해 구현할 예정이며, 해당 시스템을 구현하기 위한 IDE인 파이참의 설치와 파이참 설정 방법은 해당 텍스트에 걸려 있는 링크를 통해 설치하고 설정을 변경하고 오도록 하자. (1) trade_cybos 프로젝트 생성프로젝트명은 `trade_cybos`로 하고, 해당 프로젝트의 전체적인 내용을 담을 파일 명을 `Boss.py`로 하여 프로젝트를 생성했다. 프로젝트 생성은 파일(F) - 새 프로젝트를 ..
2024.07.22 -
지난 게시글(클릭 시 이동)을 통해 대신증권의 CYBOS PLUS 내 통신 방식은 어떠한 방식으로 이루어지는지에 대해 알아보았다. 다시 한 번 정리하자면, 대신증권의 통신 방식은 크게 요청/응답 방식과 구독/생산 방식으로 구분할 수 있으나, 그 구분은 어디까지나 단발성 데이터 요청인지 아니면 실시간 주가 데이터 수신과 같은 지속성 데이터 요청인지에만 기준을 두면 되고, 근본적으로 데이터를 입력하는 방식은 `SetInputValue()`를 통해서 이루어지며 데이터 입력 후의 데이터 요청은 `Request()`나 `BlockRequest()` 또는 `Subscribe()` 함수를 통해 데이터를 요청하고 `GetHeaderValue()`나 `GetDataValue()` 함수를 통해 데이터를 불러온다. 이제 사..
003. 대신증권 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회 요청에 대한 다회 응답의 방식을 갖고 ..
002. 대신증권 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...
035. 키움증권 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 -
▼ 이전 게시글 바로가기키움증권 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", ""..
034. 키움증권 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", ""..
2022.04.10 -
오늘도 역시 결론부터 설명하자면, 키움증권 Open API 내에서는 거래일자를 조회할 수 있는 함수가 제공되지 않고 있다. 그니까, 특정 일자를 변수로 입력해주면 해당 일자가 거래일인지 아닌지를 반환하는 함수가 제공되지 않는다는 것이다. 우리는 간혹 거래를 진행하다 보면 특정 일자가 거래가 진행되는 날인지 아닌지를 파악해야 하는 경우가 분명 존재하는데, 키움증권의 Open API는 그런 기능을 제공하지 않고 있다는 것이다.물론 그 이유에 대해서는 알 수 없다. 다만 우리가 특정 일자가 거래일자였는지를 확인하고자 하는 이유는 바로 거래일이라는 개념이 거래를 진행하는 데에 있어 생각보다 큰 영향력을 갖기 때문이다.예를 들어 미수를 통해 특정 종목에 비중을 실어 매수를 하는 알고리즘이 있다고 했을 때 매수한 ..
032. 키움증권 Open API 거래일자 데이터 얻기 (1)오늘도 역시 결론부터 설명하자면, 키움증권 Open API 내에서는 거래일자를 조회할 수 있는 함수가 제공되지 않고 있다. 그니까, 특정 일자를 변수로 입력해주면 해당 일자가 거래일인지 아닌지를 반환하는 함수가 제공되지 않는다는 것이다. 우리는 간혹 거래를 진행하다 보면 특정 일자가 거래가 진행되는 날인지 아닌지를 파악해야 하는 경우가 분명 존재하는데, 키움증권의 Open API는 그런 기능을 제공하지 않고 있다는 것이다.물론 그 이유에 대해서는 알 수 없다. 다만 우리가 특정 일자가 거래일자였는지를 확인하고자 하는 이유는 바로 거래일이라는 개념이 거래를 진행하는 데에 있어 생각보다 큰 영향력을 갖기 때문이다.예를 들어 미수를 통해 특정 종목에 비중을 실어 매수를 하는 알고리즘이 있다고 했을 때 매수한 ..
2022.04.10 -
지난 게시글에서 실시간 데이터가 발생한 후 해당 데이터를 기반으로 가격 데이터를 어떻게 비교하여 거래를 진행하게 되는지에 대해 살펴보았고, 마지막에는 "과연 하나의 알고리즘만 사용할 것인가?"하는 소제목과 함께 끝마쳤다. 그럼 이제 그 부분이 뭔 소린지 다시 한 번 살펴보도록 하자. 나는 진짜 하나의 알고리즘만 쓸 건데?뭐, 백 번 양보해서 정말 하나의 알고리즘만 사용할 것이라고 가정해보도록 하자. 당신은 얼마 가지 않아 "어.. 이런 유형의 주가 흐름은 비중을 조금 더 싣고, 이런 유형의 주가 흐름은 비중을 조금 더 줄이고 싶은데.."하는 생각이 들 것이다. 이럴 때 사용할 수 있는 것이 바로 해당 종목의 거래 유형 번호를 저장하는 것이다. 아래의 도표를 살펴보도록 하자.만약 당신의 주가 데이터를 기..
031. 자동 매매 프로그램의 가격 데이터 관리 (2)지난 게시글에서 실시간 데이터가 발생한 후 해당 데이터를 기반으로 가격 데이터를 어떻게 비교하여 거래를 진행하게 되는지에 대해 살펴보았고, 마지막에는 "과연 하나의 알고리즘만 사용할 것인가?"하는 소제목과 함께 끝마쳤다. 그럼 이제 그 부분이 뭔 소린지 다시 한 번 살펴보도록 하자. 나는 진짜 하나의 알고리즘만 쓸 건데?뭐, 백 번 양보해서 정말 하나의 알고리즘만 사용할 것이라고 가정해보도록 하자. 당신은 얼마 가지 않아 "어.. 이런 유형의 주가 흐름은 비중을 조금 더 싣고, 이런 유형의 주가 흐름은 비중을 조금 더 줄이고 싶은데.."하는 생각이 들 것이다. 이럴 때 사용할 수 있는 것이 바로 해당 종목의 거래 유형 번호를 저장하는 것이다. 아래의 도표를 살펴보도록 하자.만약 당신의 주가 데이터를 기..
2022.04.09 -
이번 게시글에서는 키움증권 Open API를 이용한 자동 매매 시스템을 구축하고자 할 때, 어떠한 로직을 통해 이루어져야 하는지에 대해 간략하게나마 살펴볼 예정이다. 게시글을 통해 "아. 이러이러한 로직을 거쳐 동작하도록 구축하면 되겠구나."하는 정도의 감만 온다면 이 게시글의 목표는 모두 달성한 것이라 볼 수 있다. 키움증권 Open API는 기본적으로 실시간 등록을 통해 데이터 조회가 이루어진다.그 말인 즉슨, 우리가 거래하고자 하는 종목은 실시간 등록이 되어 있어야 실시간으로 거래를 진행할 수 있다는 것이다. 대략적으로 설명하자면, 실시간 데이터는 아래와 같은 로직으로 이루어진다.SetRealReg(scrno, codelist, fidlist, realtype) : 실시간 조회 종목으로 등록↓실시..
030. 자동 매매 프로그램의 가격 데이터 관리 - (1)이번 게시글에서는 키움증권 Open API를 이용한 자동 매매 시스템을 구축하고자 할 때, 어떠한 로직을 통해 이루어져야 하는지에 대해 간략하게나마 살펴볼 예정이다. 게시글을 통해 "아. 이러이러한 로직을 거쳐 동작하도록 구축하면 되겠구나."하는 정도의 감만 온다면 이 게시글의 목표는 모두 달성한 것이라 볼 수 있다. 키움증권 Open API는 기본적으로 실시간 등록을 통해 데이터 조회가 이루어진다.그 말인 즉슨, 우리가 거래하고자 하는 종목은 실시간 등록이 되어 있어야 실시간으로 거래를 진행할 수 있다는 것이다. 대략적으로 설명하자면, 실시간 데이터는 아래와 같은 로직으로 이루어진다.SetRealReg(scrno, codelist, fidlist, realtype) : 실시간 조회 종목으로 등록↓실시..
2022.04.09 -
키움증권 Open API의 경우에는 주문이나 차트 데이터 조회 등과 같은 것들에 대해서는 정말 손쉽게 사용할 수 있도록 친절하게 설명하고 있지만, 문제는 주문 내역을 관리하기 위해 주문일자를 제공한다거나 하는 등의 데이터는 잘 제공하지 않고 있다.※ 키움증권 Open API 관계자가 이 글을 볼 리는 없지만, 만약 본다면 이 부분은 꼭 추가해주길 바랍니다.본격적으로 거래 내역을 조회하기 전에 앞서, 일단 여기서 사용하고자 하는 트랜잭션(Transaction, 이하 TR)은 opw00007이다. opw00007을 사용하기 위해서는 계좌와 관련된 데이터를 전달해줘야 하는데, 계좌 데이터는 직접 입력을 해주어도 되고 다른 TR을 이용해서 계좌 데이터를 얻어온 후에, 그 데이터를 그대로 전달해줘도 된다. OP..
026. 키움증권 Open API - 거래 내역 조회하기 (1)키움증권 Open API의 경우에는 주문이나 차트 데이터 조회 등과 같은 것들에 대해서는 정말 손쉽게 사용할 수 있도록 친절하게 설명하고 있지만, 문제는 주문 내역을 관리하기 위해 주문일자를 제공한다거나 하는 등의 데이터는 잘 제공하지 않고 있다.※ 키움증권 Open API 관계자가 이 글을 볼 리는 없지만, 만약 본다면 이 부분은 꼭 추가해주길 바랍니다.본격적으로 거래 내역을 조회하기 전에 앞서, 일단 여기서 사용하고자 하는 트랜잭션(Transaction, 이하 TR)은 opw00007이다. opw00007을 사용하기 위해서는 계좌와 관련된 데이터를 전달해줘야 하는데, 계좌 데이터는 직접 입력을 해주어도 되고 다른 TR을 이용해서 계좌 데이터를 얻어온 후에, 그 데이터를 그대로 전달해줘도 된다. OP..
2022.04.06 -
▼ 이전 편 바로가기키움증권 Open API - 관심종목 관리하기 (1)키움증권 Open API - 관심종목 관리하기 (2) 지난 게시글에서는 기존에 설정한 조건검색식이 찾아낸 종목코드를 얻어오는 방법까지 확인했다. 다만 관심종목에 추가하기 위해서는 해당 종목의 데이터가 필요하기 마련히고 더군다나 해당 종목을 매수할 계획이 있다면 매수를 진행할 가격까지도 사전에 계산해서 관심종목 데이터 안에 입력해주어야 한다.아직은 이 프로세스가 어렵게 느껴질 수 있겠지만, 엄밀히 따지면 반드시 필요한 절차에 해당하는 부분이므로 이해가 가지 않는다고 하더라도 그냥 그대로 따라하면 큰 어려움 없이 프로그램을 만들 수 있다.일단 본격적인 내용을 설명하기 전에 앞서, 조건검색식을 통해 종목을 관리할 수 있는 두 가지 방법에 ..
025. 키움증권 Open API - 관심종목 관리하기 (3)▼ 이전 편 바로가기키움증권 Open API - 관심종목 관리하기 (1)키움증권 Open API - 관심종목 관리하기 (2) 지난 게시글에서는 기존에 설정한 조건검색식이 찾아낸 종목코드를 얻어오는 방법까지 확인했다. 다만 관심종목에 추가하기 위해서는 해당 종목의 데이터가 필요하기 마련히고 더군다나 해당 종목을 매수할 계획이 있다면 매수를 진행할 가격까지도 사전에 계산해서 관심종목 데이터 안에 입력해주어야 한다.아직은 이 프로세스가 어렵게 느껴질 수 있겠지만, 엄밀히 따지면 반드시 필요한 절차에 해당하는 부분이므로 이해가 가지 않는다고 하더라도 그냥 그대로 따라하면 큰 어려움 없이 프로그램을 만들 수 있다.일단 본격적인 내용을 설명하기 전에 앞서, 조건검색식을 통해 종목을 관리할 수 있는 두 가지 방법에 ..
2022.04.02 -
지난 게시글에서 언급했듯, 이번 글에서는 개별적 문제점들에 대한 해결 방법을 살펴볼 예정이다. 다만 문제점 ①이 아닌 문제점 ②를 먼저 다룰 예정인데, 이렇게 해야 수순이 맞다.왜냐하면 관심종목이라는 역할을 수행할 수 있는 데이터베이스를 생성하기 위해서는 일단 대입할 종목코드 리스트가 필요한데, 그 종목코드 리스트는 조건검색식[0151]을 통해야 보다 수월하게 데이터를 조회할 수 있기 때문이다. 키움증권 상에서 조건검색식을 만드는 방법에 대해서는 여타 다른 게시글에서 충분히 설명하고 있으니 검색해서 보시길 바란다. 본격적인 설명에 앞서 영웅문 내에서 설정한 조건검색식의 조건을 바탕으로 선정된 종목을 살펴보도록 하겠다.A : [골든 크로스] 10일 이동평균선이 20일 이동평균선을D : [골든 크로스] 5일..
024. 키움증권 Open API - 관심종목 관리하기 (2)지난 게시글에서 언급했듯, 이번 글에서는 개별적 문제점들에 대한 해결 방법을 살펴볼 예정이다. 다만 문제점 ①이 아닌 문제점 ②를 먼저 다룰 예정인데, 이렇게 해야 수순이 맞다.왜냐하면 관심종목이라는 역할을 수행할 수 있는 데이터베이스를 생성하기 위해서는 일단 대입할 종목코드 리스트가 필요한데, 그 종목코드 리스트는 조건검색식[0151]을 통해야 보다 수월하게 데이터를 조회할 수 있기 때문이다. 키움증권 상에서 조건검색식을 만드는 방법에 대해서는 여타 다른 게시글에서 충분히 설명하고 있으니 검색해서 보시길 바란다. 본격적인 설명에 앞서 영웅문 내에서 설정한 조건검색식의 조건을 바탕으로 선정된 종목을 살펴보도록 하겠다.A : [골든 크로스] 10일 이동평균선이 20일 이동평균선을D : [골든 크로스] 5일..
2022.03.12