주식자동매매 16강. 계좌평가잔고내역요청(4), 주식 종목 가져오기
본문 바로가기

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

주식자동매매 16강. 계좌평가잔고내역요청(4), 주식 종목 가져오기

반응형

이번 강의에서는 15강(Tr 슬롯 구성 등)에 이어 계좌평가잔고내역을 요청하는 하기위해 주식 종목(코스피/코스닥)을 가져 오겠스빈다. 11강에서 배운 로그인 메시지 전송 및 받아오기와 유사하니참고하십시요.

 

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

 

코스피/코스닥 종목 가져오기

 내가 원하는 종목의 코드번호를 가져오기 위해서 KOA Studio를 살펴보겠습니다.

GetCodeListByMarket()에다가 0 또는 10을 넣으면 코스피/코스닥 전 종목의 코드번호를 가져올 수 있다. 종목코드를 가져오는 이유는 키움에서 모든 주문전송은 종목 코드로 하기 때문입니다.

 

KOA Studio 종목코드 가져오기
KOA Studio 종목코드 가져오기

우선 저번 코드에 이어 종목 코드를 가져오기 위해  getItemList(self)라는 함수를 생성하였습니다.

 

코스피/코스닥 종목 가져오기
코스피/코스닥 종목 가져오기

 ◈ marketList = ["0", "10"]  : marketList안에 0과 10의 숫자를 넣습니다.

 ◈ for market in marketList : marketList안에 들어있는 0과 10을 하나씩 순차적으로 market에 대입합니다.

 ◈ self.k. 를 이용하여 키움 함수(클래스)를 사용할 준비를 합니다.

 ◈ kiwoom.dynamicCall을 이용하여 주문 전송을 할 수 있는 조건을 확립합니다.

 ◈ 최종 요청을 위해 GetCodeListByMarket()이며 () 안에 QString과 market이 들어가는데 QString은 여러분들이 사용하는 문자 등을 손쉽게 들고는 용도라고 생각하시면 됩니다. market에는 0과 10이 순차적으로 들어갑니다.

 ◈ slpit(";")[:-1]은 self.k.kiwoom.dynamicCall("GetCodeListByMarket(QString,market)")을 하게 되면 코스닥 코스피의 모든 종목들이 12345;67891; 이런 식으로 codeList에 저장되는데 세미클론(;)을 제거하고 codeList에 [12345, 67891....]이런 식으로 저장하기 위함입니다. 그리고 파이썬은 열을 카운팅 할 때 1부터 10까지 가는 것이 아니라 0부터 시작해 9까지 카운팅 됩니다. 따라서, -1을 해줍니다.

 

다음으로 받아온 코드들을 한글로 바꿔주는 코딩을 합니다. 개발자 입장에서는 크게 필요 없으나 여러 사용자를 배려하는 차원에서 한글로 된 주식 종목을 가져오는 것입니다. 이때, GetMasterCodeName()을 사용합니다.

종목 이름 가져오기
종목 이름 가져오기

 

 ◈ for code in codeList : codeList에 담긴 3200개 종목을 순차적으로 code에 대입합니다.

 ◈ self.k.kiwoom.dynamicCall("GetMasterCodeName(QString,code)")를 이용해 name에 3200개 종목을 저장합니다.

 ◈ self.k.ALL_Stock_Code.update({code : {종목명 : name}}) 

   -이 부분 상세 설명 들어가겠습니다.

   - self.k는 메인 스크립트 또는 어떠한 스레드도 다 접속할 수 있는 통신관입니다.(코드 및 설명은 8강에 전~부 다 있습니다.)

   - 이때 self.k에(kiwoom) ALL_Stock_Code라는 딕셔너리를 생성합니다. 앞으로 누구든 종목 코드와 이름을 알고 싶으면 ALL_Stock_Code에 접속만 하시면 됩니다.

  - 딕셔너리는 이름 : 홍길동, 과일 : 사과 등의 형태로 이뤄진 것을 의미합니다.

 

ALL_Stock_Code 딕셔너리 생성
ALL_Stock_Code

전체적인 코드는 아래와 같습니다. Qthread_1을 계속해서 업데이트 중입니다.

전체적 코드
전체적 코드

반응형
from PyQt5.QtCore import *         # 쓰레드 함수를 불러온다.
from kiwoom import Kiwoom          # 로그인을 위한 클래스
from PyQt5.QtWidgets import *      #PyQt import


class Thread1(QThread):
    def __init__(self, parent):   # 부모의 윈도우 창을 가져올 수 있다.
        super().__init__(parent)  # 부모의 윈도우 창을 초기화 한다.
        self.parent = parent      # 부모의 윈도우를 사용하기 위한 조건


        ################## 키움서버 함수를 사용하기 위해서 kiwoom의 능력을 상속 받는다.
        self.k = Kiwoom()
        ##################

        ################## 사용되는 변수
        self.Acc_Screen = "1000"         # 계좌평가잔고내역을 받기위한 스크린

        ###### 슬롯
        self.k.kiwoom.OnReceiveTrData.connect(self.trdata_slot)  # 내가 알고 있는 Tr 슬롯에다 특정 값을 던져 준다.
        ###### EventLoop
        self.detail_account_info_event_loop = QEventLoop()  # 계좌 이벤트루프
        ###### 계좌정보 가져오기
        self.getItemList()               # 종목 이름 받아오기

    def getItemList(self):
        marketList = ["0", "10"]

        for market in marketList:
            codeList = self.k.kiwoom.dynamicCall("GetCodeListByMarket(QString)", market).split(";")[:-1]

            for code in codeList:
                name = self.k.kiwoom.dynamicCall("GetMasterCodeName(QString)", code)
                self.k.All_Stock_Code.update({code: {"종목명": name}})

 

17강 바로가기 : 17강에서는 키움 서버에 계좌평가잔고내역을 요청해 봅시다. 차 후에 유튜브로 다 설명드릴 테니 코드를 저장하며 달려봅시다.

반응형

.link_tit