25강에서 계좌관리를 위한 기본적인 틀을 마련하였습니다. 이번 강의에서는 계좌관리를 위한 필수 데이터인 기관 매수 정보를 가져오도록 하겠습니다.
[유튜브 강의, 링크]와 같이 보시면 많은 도움이 되실 겁니다.
1. KOA Studio 기관매수정보 확인
종목별기관매매추이요청을 하기 위해서는 opt10045를 사용합니다. 필수 입력값은 아래와 같습니다.
- 종목코드, 시작일자, 종료일자, 기관 추정 단가 구분, 외인 추정 단가 구분
이때 반환되는 값은 아래와 같습니다.
- 싱글 데이터 : 선택한 기간 내에서 기관 추정 평균가, 외인 추정 평균가
이때 공휴일 또는 일요일은 제외시켜야 됩니다. 이 방법을 설명하려면 강의가 너무 길어지므로 설명 생략하겠습니다. 단, 댓글로 물어보시거나 메일 남겨주시면 말씀드리겠습니다.
- 멀티 데이터 : 일자, 종가, 전일대비, 등락률 등
2. 코딩 : opt10045 사용을 위한 기본 세팅
25강의 QThread_2의 Thread 2 클래스에 opt10045 기능을 업데이트하겠습니다. 기능 업데이트 시 금일 가격 대비 외국이 또는 기관을 평균가를 확인할 수 있습니다. 우선적으로 opt10045 명령을 전송할 수 있는 기본 세팅을 아래에서 진행하겠습니다.
self.k = Kiwoom() 까지는 25강에서 설명을 드렸습니다.
- self.Find_down_Screen = "1200" : 입력할 스크린 번호를 인스턴스화 합니다. 이때, 스크린은 저번에도 설명드렸지만 하나의 방이라 생각하시고 50개까지의 물건을 넣을 수 있습니다. 50개가 넘어가면 스크린 번호를 1201로 바꾸셔야 됩니다.
- self.code_in_all = None : 계좌에 있는 종목 코드를 임시 저장하는 객체입니다.
- self.k.kiwoom.OnreceiveTrData.connet(self.trdata_slot) : self.k.kiwoom을 이용하여 키움 서버에 명령을 보낼 준비를 하고 OnreceiveTrData를 이용해 키움에서 반환된 정보들을 받을 준비를 합니다. connect함수를 이용하여 self.trdata_slot에 반화된 데이터를 저장합니다.
- self.detail_account_info_event_loop = QEventloop() : 이벤트 루프 생성하는 구간으로 이벤트 루프란 키움에 특정 명령을 전송 후 반환될 때까지 일련을 코드들이 실시되는 것을 막는 것입니다. 특정 정보가 반환되지 않은 상태에서 다음 코드가 실행된다면 정보가 부적하여 에러가 날 수 있기 때문이 입니다.
- self_C_K_F_class() : opt10045를 실행할 함수를 실행하는 것입니다.
3. 코딩 : C_K_F_class(self) 함수를 만들고 계좌에 있는 종목 코드 가져오기
아래와 같이 계좌에 있는 종목 코드번호만 갖도록 하겠습니다.
- 계좌에 있는 종목을 불러와 저장하기 위해 code_list = []라는 리스트를 만듭니다.
- 아래 그림과 같이 23강에서 계좌에 있는 종목의 정보를 acc_portfolio에 넣어 두었으며, key()를 이용해 여러 정보 중 코드 번호만 가져옵니다.
- key()란 딕셔너리형테로 저장된 값의 메인 값만 가져오는 것으로 a = {음식 : [짜장면, 짬뽕, 삼겹살]}으로 저장된 a가 있다면 음식이 key 값이고 a의 key 값인 음식만 가져오기 위해서는 a.keys()라고 하면 됩니다.
- for code in self.k.acc_portfolio.keys() : 절대 언어 kiwoom 스크립트의 acc_portfolio에 있는 종목 번호 값을 code에 입력합니다. 그리고 그 값을 다시 code_list에 리스트 형태로 값을 집어넣습니다.
- 리스트 형태란 여러분들이 일반적으로 보시는 1 by N 행렬 형태로 [철수, 갑수, 말수....]등의 형태입니다. 즉 [100239, 123234, 43424...] 형태로 계좌에 있는 종목 코드 번호가 저장되는 것입니다.
4. 요약 및 코드 공유
opt100045 기능을 KOA_Studio를 통해 알아보았으며, 기능 사용을 위한 기본 세팅을 완료했습니다. 그리고 절대 언어 acc_portfolio에 저장된 계좌 종목 코드 번호를 가져왔습니다. 다음 강의에서는 opt100045 명령을 키움으로 전송하도록 하겠습니다.
from PyQt5.QtCore import * # eventloop/스레드를 사용 할 수 있는 함수 가져옴.
from kiwoom import Kiwoom # 로그인을 위한 클래스
from PyQt5.QtWidgets import * # PyQt import
from PyQt5.QtTest import * # 시간관련 함수
from datetime import datetime, timedelta # 특정 일자를 조회
class Thread2(QThread):
def __init__(self, parent): # 부모의 윈도우 창을 가져올 수 있다.
super().__init__(parent) # 부모의 윈도우 창을 초기화 한다.
self.parent = parent # 부모의 윈도우를 사용하기 위한 조건
################## 키움서버 함수를 사용하기 위해서 kiwoom의 능력을 상속 받는다.
self.k = Kiwoom()
################## 사용되는 변수
self.Find_down_Screen = "1200" # 계좌평가잔고내역을 받기위한 스크린
self.code_in_all = None # 1600개 코드 중 1개 코드, 쌓이지 않고 계속 갱신
###### 슬롯
self.k.kiwoom.OnReceiveTrData.connect(self.trdata_slot) # 내가 알고 있는 Tr 슬롯에다 특정 값을 던져 준다.
###### EventLoop
self.detail_account_info_event_loop = QEventLoop() # 계좌 이벤트루프
###### 기관외국인 평균가 가져오기
self.C_K_F_class()
def C_K_F_class(self):
code_list = []
for code in self.k.acc_portfolio.keys():
code_list.append(code)
print("계좌 종목 개수 %s" % (code_list))
'주식 자동매매 강의 > 기초반(모든 코딩의 뿌리)' 카테고리의 다른 글
주식자동매매 28강. 계좌관리하기 (5), opt10045 전송 주문 결과 받아오기 (8) | 2022.05.17 |
---|---|
주식자동매매 27강. 계좌관리하기 (4), opt10045 주문 전송하기 (4) | 2022.05.16 |
주식자동매매 25강. 계좌 관리하기(2), GUI 및 스크립트 만들기 (0) | 2022.05.12 |
주식자동매매 24강. 계좌 관리하기(1), 알고리즘 및 방법 개념 설명 (0) | 2022.05.11 |
주식자동매매 23강. 계좌평가잔고내역요청 최종 코드 모음 공개 (17) | 2022.05.10 |