주식자동매매 26강. 계좌관리하기 (3), opt10045 개념 파악 및 기본 셋팅을 위한 QThread_2 코딩
본문 바로가기

주식 자동매매 강의/기초반(모든 코딩의 뿌리)

주식자동매매 26강. 계좌관리하기 (3), opt10045 개념 파악 및 기본 셋팅을 위한 QThread_2 코딩

반응형

25강에서 계좌관리를 위한 기본적인 틀을 마련하였습니다. 이번 강의에서는 계좌관리를 위한 필수 데이터인 기관 매수 정보를 가져오도록 하겠습니다. 

 

[유튜브 강의, 링크]와 같이 보시면 많은 도움이 되실 겁니다.

 

1. KOA Studio 기관매수정보 확인

 종목별기관매매추이요청을 하기 위해서는 opt10045를 사용합니다. 필수 입력값은 아래와 같습니다.

  - 종목코드, 시작일자, 종료일자, 기관 추정 단가 구분, 외인 추정 단가 구분

 이때 반환되는 값은 아래와 같습니다.

  - 싱글 데이터 : 선택한 기간 내에서 기관 추정 평균가, 외인 추정 평균가

    이때 공휴일 또는 일요일은 제외시켜야 됩니다. 이 방법을 설명하려면 강의가 너무 길어지므로 설명 생략하겠습니다. 단, 댓글로 물어보시거나 메일 남겨주시면 말씀드리겠습니다.

  - 멀티 데이터 : 일자, 종가, 전일대비, 등락률 등

KOA Studio opt10045
KOA Studio opt10045

 

2. 코딩 : opt10045 사용을 위한 기본 세팅

25강의 QThread_2의 Thread 2 클래스에 opt10045 기능을 업데이트하겠습니다. 기능 업데이트 시 금일 가격 대비 외국이 또는 기관을 평균가를 확인할 수 있습니다. 우선적으로 opt10045 명령을 전송할 수 있는 기본 세팅을 아래에서 진행하겠습니다.

 

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) 함수를 만들고 계좌에 있는 종목 코드 가져오기

아래와 같이 계좌에 있는 종목 코드번호만 갖도록 하겠습니다.

opt10045 명령어 전송
opt10045 명령어 전송

 

- 계좌에 있는 종목을 불러와 저장하기 위해 code_list = []라는 리스트를 만듭니다.

- 아래 그림과 같이 23강에서 계좌에 있는 종목의 정보를 acc_portfolio에 넣어 두었으며, key()를 이용해 여러 정보 중 코드 번호만 가져옵니다.

acc_portfolio
acc_portfolio

 - 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))
반응형

.link_tit