행위

"대신증권 파이썬 api"의 두 판 사이의 차이

DB CAFE

(주식 예약 매수/매도/취소/조회 예제)
(주식 현재가 10차 호가 화면 구현하기)
10번째 줄: 10번째 줄:
 
=== 주식 미체결 조회 및 실시간 미체결 업데이트/취소주문/일괄 취소 예제... ===
 
=== 주식 미체결 조회 및 실시간 미체결 업데이트/취소주문/일괄 취소 예제... ===
 
=== 주식 현재가 10차 호가 화면 구현하기 ===
 
=== 주식 현재가 10차 호가 화면 구현하기 ===
 +
<source lang=python>
 +
import sys
 +
from PyQt5 import QtWidgets
 +
from PyQt5 import uic
 +
from PyQt5.QtCore import pyqtSlot
 +
import win32com.client
 +
 +
# cp object
 +
g_objCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
 +
g_objCpStatus = win32com.client.Dispatch("CpUtil.CpCybos")
 +
g_objCpTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
 +
 +
 +
# 현재가 정보 저장 구조체
 +
class stockPricedData:
 +
    def __init__(self):
 +
        self.dicEx = {ord('0'): "동시호가/장중 아님", ord('1'): "동시호가", ord('2'): "장중"}
 +
        self.code = ""
 +
        self.name = ""
 +
        self.cur = 0        # 현재가
 +
        self.diff = 0      # 대비
 +
        self.diffp = 0      # 대비율
 +
        self.offer = [0 for _ in range(10)]    # 매도호가
 +
        self.bid = [0 for _ in range(10)]      # 매수호가
 +
        self.offervol = [0 for _ in range(10)]    # 매도호가 잔량
 +
        self.bidvol = [0 for _ in range(10)]      # 매수호가 잔량
 +
        self.totOffer = 0      # 총매도잔량
 +
        self.totBid = 0        # 총매수 잔량
 +
        self.vol = 0            # 거래량
 +
        self.baseprice = 0      # 기준가
 +
 +
        # 예상체결가 정보
 +
        self.exFlag= ord('2')
 +
        self.expcur = 0        # 예상체결가
 +
        self.expdiff = 0        # 예상 대비
 +
        self.expdiffp = 0      # 예상 대비율
 +
        self.expvol = 0        # 예상 거래량
 +
        self.objCur = CpPBStockCur()
 +
        self.objOfferbid = CpPBStockBid()
 +
 +
    def __del__(self):
 +
        self.objCur.Unsubscribe()
 +
        self.objOfferbid.Unsubscribe()
 +
 +
 +
    # 전일 대비 계산
 +
    def makediffp(self):
 +
        lastday = 0
 +
        if (self.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
 +
            if self.baseprice > 0  :
 +
                lastday = self.baseprice
 +
            else:
 +
                lastday = self.expcur - self.expdiff
 +
            if lastday:
 +
                self.expdiffp = (self.expdiff / lastday) * 100
 +
            else:
 +
                self.expdiffp = 0
 +
        else:
 +
            if self.baseprice > 0  :
 +
                lastday = self.baseprice
 +
            else:
 +
                lastday = self.cur - self.diff
 +
            if lastday:
 +
                self.diffp = (self.diff / lastday) * 100
 +
            else:
 +
                self.diffp = 0
 +
 +
    def getCurColor(self):
 +
        diff = self.diff
 +
        if (self.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
 +
            diff = self.expdiff
 +
        if (diff > 0):
 +
            return 'color: red'
 +
        elif (diff == 0):
 +
            return  'color: black'
 +
        elif (diff < 0):
 +
            return 'color: blue'
 +
 +
 +
# CpEvent: 실시간 이벤트 수신 클래스
 +
class CpEvent:
 +
    def set_params(self, client, name, rpMst, parent):
 +
        self.client = client  # CP 실시간 통신 object
 +
        self.name = name  # 서비스가 다른 이벤트를 구분하기 위한 이름
 +
        self.parent = parent  # callback 을 위해 보관
 +
        self.rpMst = rpMst
 +
 +
 +
 +
    # PLUS 로 부터 실제로 시세를 수신 받는 이벤트 핸들러
 +
    def OnReceived(self):
 +
        if self.name == "stockcur":
 +
            # 현재가 체결 데이터 실시간 업데이트
 +
            self.rpMst.exFlag = self.client.GetHeaderValue(19)  # 예상체결 플래그
 +
            code = self.client.GetHeaderValue(0)
 +
            diff = self.client.GetHeaderValue(2)
 +
            cur= self.client.GetHeaderValue(13)  # 현재가
 +
            vol = self.client.GetHeaderValue(9)  # 거래량
 +
 +
            # 예제는 장중만 처리 함.
 +
            if (self.rpMst.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
 +
                # 예상체결가 정보
 +
                self.rpMst.expcur = cur
 +
                self.rpMst.expdiff = diff
 +
                self.rpMst.expvol = vol
 +
            else:
 +
                self.rpMst.cur = cur
 +
                self.rpMst.diff = diff
 +
                self.rpMst.makediffp()
 +
                self.vol = vol
 +
 +
            self.rpMst.makediffp()
 +
            # 현재가 업데이트
 +
            self.parent.monitorPriceChange()
 +
 +
            return
 +
 +
        elif self.name == "stockbid":
 +
            # 현재가 10차 호가 데이터 실시간 업데이c
 +
            code = self.client.GetHeaderValue(0)
 +
            dataindex = [3, 7, 11, 15, 19, 27, 31, 35, 39, 43]
 +
            obi = 0
 +
            for i in range(10):
 +
                self.rpMst.offer[i] = self.client.GetHeaderValue(dataindex[i])
 +
                self.rpMst.bid[i] = self.client.GetHeaderValue(dataindex[i] + 1)
 +
                self.rpMst.offervol[i] = self.client.GetHeaderValue(dataindex[i] + 2)
 +
                self.rpMst.bidvol[i] = self.client.GetHeaderValue(dataindex[i] + 3)
 +
 +
            self.rpMst.totOffer = self.client.GetHeaderValue(23)
 +
            self.rpMst.totBid = self.client.GetHeaderValue(24)
 +
            # 10차 호가 변경 call back 함수 호출
 +
            self.parent.monitorOfferbidChange()
 +
            return
 +
 +
# SB/PB 요청 ROOT 클래스
 +
class CpPublish:
 +
    def __init__(self, name, serviceID):
 +
        self.name = name
 +
        self.obj = win32com.client.Dispatch(serviceID)
 +
        self.bIsSB = False
 +
 +
    def Subscribe(self, var, rpMst, parent):
 +
        if self.bIsSB:
 +
            self.Unsubscribe()
 +
 +
        if (len(var) > 0):
 +
            self.obj.SetInputValue(0, var)
 +
 +
        handler = win32com.client.WithEvents(self.obj, CpEvent)
 +
        handler.set_params(self.obj, self.name, rpMst, parent)
 +
        self.obj.Subscribe()
 +
        self.bIsSB = True
 +
 +
    def Unsubscribe(self):
 +
        if self.bIsSB:
 +
            self.obj.Unsubscribe()
 +
        self.bIsSB = False
 +
 +
# CpPBStockCur: 실시간 현재가 요청 클래스
 +
class CpPBStockCur(CpPublish):
 +
    def __init__(self):
 +
        super().__init__("stockcur", "DsCbo1.StockCur")
 +
 +
# CpPBStockBid: 실시간 10차 호가 요청 클래스
 +
class CpPBStockBid(CpPublish):
 +
    def __init__(self):
 +
        super().__init__("stockbid", "Dscbo1.StockJpBid")
 +
 +
 +
# SB/PB 요청 ROOT 클래스
 +
class CpPBConnection:
 +
    def __init__(self):
 +
        self.obj = win32com.client.Dispatch("CpUtil.CpCybos")
 +
        handler = win32com.client.WithEvents(self.obj, CpEvent)
 +
        handler.set_params(self.obj, "connection", None)
 +
 +
 +
# CpRPCurrentPrice:  현재가 기본 정보 조회 클래스
 +
class CpRPCurrentPrice:
 +
    def __init__(self):
 +
        if (g_objCpStatus.IsConnect == 0):
 +
            print("PLUS가 정상적으로 연결되지 않음. ")
 +
            return
 +
        self.objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
 +
        return
 +
 +
 +
    def Request(self, code, rtMst, callbackobj):
 +
        # 현재가 통신
 +
        rtMst.objCur.Unsubscribe()
 +
        rtMst.objOfferbid.Unsubscribe()
 +
 +
        self.objStockMst.SetInputValue(0, code)
 +
        ret = self.objStockMst.BlockRequest()
 +
        if self.objStockMst.GetDibStatus() != 0:
 +
            print("통신상태", self.objStockMst.GetDibStatus(), self.objStockMst.GetDibMsg1())
 +
            return False
 +
 +
 +
        # 수신 받은 현재가 정보를 rtMst 에 저장
 +
        rtMst.code = code
 +
        rtMst.name = g_objCodeMgr.CodeToName(code)
 +
        rtMst.cur =  self.objStockMst.GetHeaderValue(11)  # 종가
 +
        rtMst.diff =  self.objStockMst.GetHeaderValue(12)  # 전일대비
 +
        rtMst.baseprice  =  self.objStockMst.GetHeaderValue(27)  # 기준가
 +
        rtMst.vol = self.objStockMst.GetHeaderValue(18)  # 거래량
 +
        rtMst.exFlag = self.objStockMst.GetHeaderValue(58)  # 예상플래그
 +
        rtMst.expcur = self.objStockMst.GetHeaderValue(55)  # 예상체결가
 +
        rtMst.expdiff = self.objStockMst.GetHeaderValue(56)  # 예상체결대비
 +
        rtMst.makediffp()
 +
 +
        rtMst.totOffer = self.objStockMst.GetHeaderValue(71)  # 총매도잔량
 +
        rtMst.totBid = self.objStockMst.GetHeaderValue(73)  # 총매수잔량
 +
 +
 +
        # 10차호가
 +
        for i in range(10):
 +
            rtMst.offer[i] = (self.objStockMst.GetDataValue(0, i))  # 매도호가
 +
            rtMst.bid[i] = (self.objStockMst.GetDataValue(1, i) ) # 매수호가
 +
            rtMst.offervol[i] = (self.objStockMst.GetDataValue(2, i))  # 매도호가 잔량
 +
            rtMst.bidvol[i] = (self.objStockMst.GetDataValue(3, i) ) # 매수호가 잔량
 +
 +
 +
        rtMst.objCur.Subscribe(code,rtMst, callbackobj)
 +
        rtMst.objOfferbid.Subscribe(code,rtMst, callbackobj)
 +
 +
 +
 +
 +
class Form(QtWidgets.QDialog):
 +
    def __init__(self, parent=None):
 +
        QtWidgets.QDialog.__init__(self, parent)
 +
        self.ui = uic.loadUi("hoga.ui", self)
 +
        self.ui.show()
 +
        self.objMst = CpRPCurrentPrice()
 +
        self.item = stockPricedData()
 +
 +
        self.setCode("000660")
 +
 +
    @pyqtSlot()
 +
    def slot_codeupdate(self):
 +
        code = self.ui.editCode.toPlainText()
 +
        self.setCode(code)
 +
 +
    def slot_codechanged(self):
 +
        code = self.ui.editCode.toPlainText()
 +
        self.setCode(code)
 +
 +
 +
    def monitorPriceChange(self):
 +
        self.displyHoga()
 +
 +
    def monitorOfferbidChange(self):
 +
        self.displyHoga()
 +
 +
    def setCode(self, code):
 +
        if len(code) < 6 :
 +
            return
 +
 +
        print(code)
 +
        if not (code[0] == "A"):
 +
            code = "A" + code
 +
 +
        name = g_objCodeMgr.CodeToName(code)
 +
        if len(name) == 0:
 +
            print("종목코드 확인")
 +
            return
 +
 +
        self.ui.label_name.setText(name)
 +
 +
        if (self.objMst.Request(code, self.item, self) == False):
 +
            return
 +
        self.displyHoga()
 +
 +
    def displyHoga(self):
 +
        self.ui.label_offer10.setText(format(self.item.offer[9],','))
 +
        self.ui.label_offer9.setText(format(self.item.offer[8],','))
 +
        self.ui.label_offer8.setText(format(self.item.offer[7],','))
 +
        self.ui.label_offer7.setText(format(self.item.offer[6],','))
 +
        self.ui.label_offer6.setText(format(self.item.offer[5],','))
 +
        self.ui.label_offer5.setText(format(self.item.offer[4],','))
 +
        self.ui.label_offer4.setText(format(self.item.offer[3],','))
 +
        self.ui.label_offer3.setText(format(self.item.offer[2],','))
 +
        self.ui.label_offer2.setText(format(self.item.offer[1],','))
 +
        self.ui.label_offer1.setText(format(self.item.offer[0],','))
 +
 +
        self.ui.label_offer_v10.setText(format(self.item.offervol[9],','))
 +
        self.ui.label_offer_v9.setText(format(self.item.offervol[8],','))
 +
        self.ui.label_offer_v8.setText(format(self.item.offervol[7],','))
 +
        self.ui.label_offer_v7.setText(format(self.item.offervol[6],','))
 +
        self.ui.label_offer_v6.setText(format(self.item.offervol[5],','))
 +
        self.ui.label_offer_v5.setText(format(self.item.offervol[4],','))
 +
        self.ui.label_offer_v4.setText(format(self.item.offervol[3],','))
 +
        self.ui.label_offer_v3.setText(format(self.item.offervol[2],','))
 +
        self.ui.label_offer_v2.setText(format(self.item.offervol[1],','))
 +
        self.ui.label_offer_v1.setText(format(self.item.offervol[0],','))
 +
 +
        self.ui.label_bid10.setText(format(self.item.bid[9],','))
 +
        self.ui.label_bid9.setText(format(self.item.bid[8],','))
 +
        self.ui.label_bid8.setText(format(self.item.bid[7],','))
 +
        self.ui.label_bid7.setText(format(self.item.bid[6],','))
 +
        self.ui.label_bid6.setText(format(self.item.bid[5],','))
 +
        self.ui.label_bid5.setText(format(self.item.bid[4],','))
 +
        self.ui.label_bid4.setText(format(self.item.bid[3],','))
 +
        self.ui.label_bid3.setText(format(self.item.bid[2],','))
 +
        self.ui.label_bid2.setText(format(self.item.bid[1],','))
 +
        self.ui.label_bid1.setText(format(self.item.bid[0],','))
 +
 +
        self.ui.label_bid_v10.setText(format(self.item.bidvol[9],','))
 +
        self.ui.label_bid_v9.setText(format(self.item.bidvol[8],','))
 +
        self.ui.label_bid_v8.setText(format(self.item.bidvol[7],','))
 +
        self.ui.label_bid_v7.setText(format(self.item.bidvol[6],','))
 +
        self.ui.label_bid_v6.setText(format(self.item.bidvol[5],','))
 +
        self.ui.label_bid_v5.setText(format(self.item.bidvol[4],','))
 +
        self.ui.label_bid_v4.setText(format(self.item.bidvol[3],','))
 +
        self.ui.label_bid_v3.setText(format(self.item.bidvol[2],','))
 +
        self.ui.label_bid_v2.setText(format(self.item.bidvol[1],','))
 +
        self.ui.label_bid_v1.setText(format(self.item.bidvol[0],','))
 +
 +
        cur = self.item.cur
 +
        diff = self.item.diff
 +
        diffp = self.item.diffp
 +
        if (self.item.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
 +
            cur = self.item.expcur
 +
            diff = self.item.expdiff
 +
            diffp = self.item.expdiffp
 +
 +
 +
        strcur = format(cur, ',')
 +
        if (self.item.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
 +
            strcur = "*" + strcur
 +
 +
        curcolor = self.item.getCurColor()
 +
        self.ui.label_cur.setStyleSheet(curcolor)
 +
        self.ui.label_cur.setText(strcur)
 +
        strdiff = str(diff) + "  " + format(diffp, '.2f')
 +
        strdiff += "%"
 +
        self.ui.label_diff.setText(strdiff)
 +
        self.ui.label_diff.setStyleSheet(curcolor)
 +
 +
        self.ui.label_totoffer.setText(format(self.item.totOffer,','))
 +
        self.ui.label_totbid.setText(format(self.item.totBid,','))
 +
 +
 +
 +
if __name__ == '__main__':
 +
        app = QtWidgets.QApplication(sys.argv)
 +
        w = Form()
 +
        sys.exit(app.exec())
 +
</source>
 +
 
=== 주식 예약 매수/매도/취소/조회 예제 ===
 
=== 주식 예약 매수/매도/취소/조회 예제 ===
 
   - 예약매수 전송 - 예약 매수(오늘 종가 기준)
 
   - 예약매수 전송 - 예약 매수(오늘 종가 기준)

2020년 9월 8일 (화) 23:30 판

thumb_up 추천메뉴 바로가기


목차

1 주식 현재가 조회/실시간[편집]

2 주식 일자별 조회(다음)[편집]

3 주식 현재가 조회[편집]

4 종목정보 구하는 예제[편집]

5 주식차트 조회(일간/주간/월간/분간/틱) 예제[편집]

6 지수옵션 최근월물 시세 조회(실시간 포함)[편집]

7 매매입체분석(투자주체별현황) 예제[편집]

8 해외선물 현재가/5차 호가 조회(실시간 업데이트 포함)[편집]

9 주식 현재가(10차호가/시간대별/일자별) 구현하기 예제[편집]

10 주식 미체결 조회 및 실시간 미체결 업데이트/취소주문/일괄 취소 예제...[편집]

11 주식 현재가 10차 호가 화면 구현하기[편집]

import sys
from PyQt5 import QtWidgets
from PyQt5 import uic
from PyQt5.QtCore import pyqtSlot
import win32com.client
 
# cp object
g_objCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
g_objCpStatus = win32com.client.Dispatch("CpUtil.CpCybos")
g_objCpTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
 
 
# 현재가 정보 저장 구조체
class stockPricedData:
    def __init__(self):
        self.dicEx = {ord('0'): "동시호가/장중 아님", ord('1'): "동시호가", ord('2'): "장중"}
        self.code = ""
        self.name = ""
        self.cur = 0        # 현재가
        self.diff = 0       # 대비
        self.diffp = 0      # 대비율
        self.offer = [0 for _ in range(10)]     # 매도호가
        self.bid = [0 for _ in range(10)]       # 매수호가
        self.offervol = [0 for _ in range(10)]     # 매도호가 잔량
        self.bidvol = [0 for _ in range(10)]       # 매수호가 잔량
        self.totOffer = 0       # 총매도잔량
        self.totBid = 0         # 총매수 잔량
        self.vol = 0            # 거래량
        self.baseprice = 0      # 기준가
 
        # 예상체결가 정보
        self.exFlag= ord('2')
        self.expcur = 0         # 예상체결가
        self.expdiff = 0        # 예상 대비
        self.expdiffp = 0       # 예상 대비율
        self.expvol = 0         # 예상 거래량
        self.objCur = CpPBStockCur()
        self.objOfferbid = CpPBStockBid()
 
    def __del__(self):
        self.objCur.Unsubscribe()
        self.objOfferbid.Unsubscribe()
 
 
    # 전일 대비 계산
    def makediffp(self):
        lastday = 0
        if (self.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
            if self.baseprice > 0  :
                lastday = self.baseprice
            else:
                lastday = self.expcur - self.expdiff
            if lastday:
                self.expdiffp = (self.expdiff / lastday) * 100
            else:
                self.expdiffp = 0
        else:
            if self.baseprice > 0  :
                lastday = self.baseprice
            else:
                lastday = self.cur - self.diff
            if lastday:
                self.diffp = (self.diff / lastday) * 100
            else:
                self.diffp = 0
 
    def getCurColor(self):
        diff = self.diff
        if (self.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
            diff = self.expdiff
        if (diff > 0):
            return 'color: red'
        elif (diff == 0):
            return  'color: black'
        elif (diff < 0):
            return 'color: blue'
 
 
# CpEvent: 실시간 이벤트 수신 클래스
class CpEvent:
    def set_params(self, client, name, rpMst, parent):
        self.client = client  # CP 실시간 통신 object
        self.name = name  # 서비스가 다른 이벤트를 구분하기 위한 이름
        self.parent = parent  # callback 을 위해 보관
        self.rpMst = rpMst
 
 
 
    # PLUS 로 부터 실제로 시세를 수신 받는 이벤트 핸들러
    def OnReceived(self):
        if self.name == "stockcur":
            # 현재가 체결 데이터 실시간 업데이트
            self.rpMst.exFlag = self.client.GetHeaderValue(19)  # 예상체결 플래그
            code = self.client.GetHeaderValue(0)
            diff = self.client.GetHeaderValue(2)
            cur= self.client.GetHeaderValue(13)  # 현재가
            vol = self.client.GetHeaderValue(9)  # 거래량
 
            # 예제는 장중만 처리 함.
            if (self.rpMst.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
                # 예상체결가 정보
                self.rpMst.expcur = cur
                self.rpMst.expdiff = diff
                self.rpMst.expvol = vol
            else:
                self.rpMst.cur = cur
                self.rpMst.diff = diff
                self.rpMst.makediffp()
                self.vol = vol
 
            self.rpMst.makediffp()
            # 현재가 업데이트
            self.parent.monitorPriceChange()
 
            return
 
        elif self.name == "stockbid":
            # 현재가 10차 호가 데이터 실시간 업데이c
            code = self.client.GetHeaderValue(0)
            dataindex = [3, 7, 11, 15, 19, 27, 31, 35, 39, 43]
            obi = 0
            for i in range(10):
                self.rpMst.offer[i] = self.client.GetHeaderValue(dataindex[i])
                self.rpMst.bid[i] = self.client.GetHeaderValue(dataindex[i] + 1)
                self.rpMst.offervol[i] = self.client.GetHeaderValue(dataindex[i] + 2)
                self.rpMst.bidvol[i] = self.client.GetHeaderValue(dataindex[i] + 3)
 
            self.rpMst.totOffer = self.client.GetHeaderValue(23)
            self.rpMst.totBid = self.client.GetHeaderValue(24)
            # 10차 호가 변경 call back 함수 호출
            self.parent.monitorOfferbidChange()
            return
 
# SB/PB 요청 ROOT 클래스
class CpPublish:
    def __init__(self, name, serviceID):
        self.name = name
        self.obj = win32com.client.Dispatch(serviceID)
        self.bIsSB = False
 
    def Subscribe(self, var, rpMst, parent):
        if self.bIsSB:
            self.Unsubscribe()
 
        if (len(var) > 0):
            self.obj.SetInputValue(0, var)
 
        handler = win32com.client.WithEvents(self.obj, CpEvent)
        handler.set_params(self.obj, self.name, rpMst, parent)
        self.obj.Subscribe()
        self.bIsSB = True
 
    def Unsubscribe(self):
        if self.bIsSB:
            self.obj.Unsubscribe()
        self.bIsSB = False
 
# CpPBStockCur: 실시간 현재가 요청 클래스
class CpPBStockCur(CpPublish):
    def __init__(self):
        super().__init__("stockcur", "DsCbo1.StockCur")
 
# CpPBStockBid: 실시간 10차 호가 요청 클래스
class CpPBStockBid(CpPublish):
    def __init__(self):
        super().__init__("stockbid", "Dscbo1.StockJpBid")
 
 
# SB/PB 요청 ROOT 클래스
class CpPBConnection:
    def __init__(self):
        self.obj = win32com.client.Dispatch("CpUtil.CpCybos")
        handler = win32com.client.WithEvents(self.obj, CpEvent)
        handler.set_params(self.obj, "connection", None)
 
 
# CpRPCurrentPrice:  현재가 기본 정보 조회 클래스
class CpRPCurrentPrice:
    def __init__(self):
        if (g_objCpStatus.IsConnect == 0):
            print("PLUS가 정상적으로 연결되지 않음. ")
            return
        self.objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
        return
 
 
    def Request(self, code, rtMst, callbackobj):
        # 현재가 통신
        rtMst.objCur.Unsubscribe()
        rtMst.objOfferbid.Unsubscribe()
 
        self.objStockMst.SetInputValue(0, code)
        ret = self.objStockMst.BlockRequest()
        if self.objStockMst.GetDibStatus() != 0:
            print("통신상태", self.objStockMst.GetDibStatus(), self.objStockMst.GetDibMsg1())
            return False
 
 
        # 수신 받은 현재가 정보를 rtMst 에 저장
        rtMst.code = code
        rtMst.name = g_objCodeMgr.CodeToName(code)
        rtMst.cur =  self.objStockMst.GetHeaderValue(11)  # 종가
        rtMst.diff =  self.objStockMst.GetHeaderValue(12)  # 전일대비
        rtMst.baseprice  =  self.objStockMst.GetHeaderValue(27)  # 기준가
        rtMst.vol = self.objStockMst.GetHeaderValue(18)  # 거래량
        rtMst.exFlag = self.objStockMst.GetHeaderValue(58)  # 예상플래그
        rtMst.expcur = self.objStockMst.GetHeaderValue(55)  # 예상체결가
        rtMst.expdiff = self.objStockMst.GetHeaderValue(56)  # 예상체결대비
        rtMst.makediffp()
 
        rtMst.totOffer = self.objStockMst.GetHeaderValue(71)  # 총매도잔량
        rtMst.totBid = self.objStockMst.GetHeaderValue(73)  # 총매수잔량
 
 
        # 10차호가
        for i in range(10):
            rtMst.offer[i] = (self.objStockMst.GetDataValue(0, i))  # 매도호가
            rtMst.bid[i] = (self.objStockMst.GetDataValue(1, i) ) # 매수호가
            rtMst.offervol[i] = (self.objStockMst.GetDataValue(2, i))  # 매도호가 잔량
            rtMst.bidvol[i] = (self.objStockMst.GetDataValue(3, i) ) # 매수호가 잔량
 
 
        rtMst.objCur.Subscribe(code,rtMst, callbackobj)
        rtMst.objOfferbid.Subscribe(code,rtMst, callbackobj)
 
 
 
 
class Form(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)
        self.ui = uic.loadUi("hoga.ui", self)
        self.ui.show()
        self.objMst = CpRPCurrentPrice()
        self.item = stockPricedData()
 
        self.setCode("000660")
 
    @pyqtSlot()
    def slot_codeupdate(self):
        code = self.ui.editCode.toPlainText()
        self.setCode(code)
 
    def slot_codechanged(self):
        code = self.ui.editCode.toPlainText()
        self.setCode(code)
 
 
    def monitorPriceChange(self):
        self.displyHoga()
 
    def monitorOfferbidChange(self):
        self.displyHoga()
 
    def setCode(self, code):
        if len(code) < 6 :
            return
 
        print(code)
        if not (code[0] == "A"):
            code = "A" + code
 
        name = g_objCodeMgr.CodeToName(code)
        if len(name) == 0:
            print("종목코드 확인")
            return
 
        self.ui.label_name.setText(name)
 
        if (self.objMst.Request(code, self.item, self) == False):
            return
        self.displyHoga()
 
    def displyHoga(self):
        self.ui.label_offer10.setText(format(self.item.offer[9],','))
        self.ui.label_offer9.setText(format(self.item.offer[8],','))
        self.ui.label_offer8.setText(format(self.item.offer[7],','))
        self.ui.label_offer7.setText(format(self.item.offer[6],','))
        self.ui.label_offer6.setText(format(self.item.offer[5],','))
        self.ui.label_offer5.setText(format(self.item.offer[4],','))
        self.ui.label_offer4.setText(format(self.item.offer[3],','))
        self.ui.label_offer3.setText(format(self.item.offer[2],','))
        self.ui.label_offer2.setText(format(self.item.offer[1],','))
        self.ui.label_offer1.setText(format(self.item.offer[0],','))
 
        self.ui.label_offer_v10.setText(format(self.item.offervol[9],','))
        self.ui.label_offer_v9.setText(format(self.item.offervol[8],','))
        self.ui.label_offer_v8.setText(format(self.item.offervol[7],','))
        self.ui.label_offer_v7.setText(format(self.item.offervol[6],','))
        self.ui.label_offer_v6.setText(format(self.item.offervol[5],','))
        self.ui.label_offer_v5.setText(format(self.item.offervol[4],','))
        self.ui.label_offer_v4.setText(format(self.item.offervol[3],','))
        self.ui.label_offer_v3.setText(format(self.item.offervol[2],','))
        self.ui.label_offer_v2.setText(format(self.item.offervol[1],','))
        self.ui.label_offer_v1.setText(format(self.item.offervol[0],','))
 
        self.ui.label_bid10.setText(format(self.item.bid[9],','))
        self.ui.label_bid9.setText(format(self.item.bid[8],','))
        self.ui.label_bid8.setText(format(self.item.bid[7],','))
        self.ui.label_bid7.setText(format(self.item.bid[6],','))
        self.ui.label_bid6.setText(format(self.item.bid[5],','))
        self.ui.label_bid5.setText(format(self.item.bid[4],','))
        self.ui.label_bid4.setText(format(self.item.bid[3],','))
        self.ui.label_bid3.setText(format(self.item.bid[2],','))
        self.ui.label_bid2.setText(format(self.item.bid[1],','))
        self.ui.label_bid1.setText(format(self.item.bid[0],','))
 
        self.ui.label_bid_v10.setText(format(self.item.bidvol[9],','))
        self.ui.label_bid_v9.setText(format(self.item.bidvol[8],','))
        self.ui.label_bid_v8.setText(format(self.item.bidvol[7],','))
        self.ui.label_bid_v7.setText(format(self.item.bidvol[6],','))
        self.ui.label_bid_v6.setText(format(self.item.bidvol[5],','))
        self.ui.label_bid_v5.setText(format(self.item.bidvol[4],','))
        self.ui.label_bid_v4.setText(format(self.item.bidvol[3],','))
        self.ui.label_bid_v3.setText(format(self.item.bidvol[2],','))
        self.ui.label_bid_v2.setText(format(self.item.bidvol[1],','))
        self.ui.label_bid_v1.setText(format(self.item.bidvol[0],','))
 
        cur = self.item.cur
        diff = self.item.diff
        diffp = self.item.diffp
        if (self.item.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
            cur = self.item.expcur
            diff = self.item.expdiff
            diffp = self.item.expdiffp
 
 
        strcur = format(cur, ',')
        if (self.item.exFlag == ord('1')):  # 동시호가 시간 (예상체결)
            strcur = "*" + strcur
 
        curcolor = self.item.getCurColor()
        self.ui.label_cur.setStyleSheet(curcolor)
        self.ui.label_cur.setText(strcur)
        strdiff = str(diff) + "  " + format(diffp, '.2f')
        strdiff += "%"
        self.ui.label_diff.setText(strdiff)
        self.ui.label_diff.setStyleSheet(curcolor)
 
        self.ui.label_totoffer.setText(format(self.item.totOffer,','))
        self.ui.label_totbid.setText(format(self.item.totBid,','))
 
 
 
if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        w = Form()
        sys.exit(app.exec())

12 주식 예약 매수/매도/취소/조회 예제[편집]

 - 예약매수 전송 - 예약 매수(오늘 종가 기준)
 - 예약매도 전송 - 예약 매수(오늘 종가 기준)
 - 예약주문 취소 - 미체결 예약주문 리스트에서 첫번째 예약 주문 취소
 - 예약내역 가져오기 - 예약주문 리스트 가져와 미체결 건만 리스트에 저장(취소 주문 할 수 있도록)
# 예약매수/매도/예약주문 내역 조회 예제
# 화면 설명
#   예약매수 전송 - 예약 매수(오늘 종가 기준)
#   예약매도 전송 - 예약 매수(오늘 종가 기준)
#   예약주문 취소 - 미체결 예약주문 리스트에서 첫번째 예약 주문 취소
#   예약내역 가져오기 - 예약주문 리스트 가져와 미체결 건만 리스트에 저장(취소 주문 할 수 있도록)

import sys
from PyQt5.QtWidgets import *
from enum import Enum
import win32com.client
import time
import pythoncom
 
 
g_objCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
g_objCpStatus = win32com.client.Dispatch("CpUtil.CpCybos")
g_objCpTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
 
# enum 주문 상태 세팅용
class EorderBS(Enum):
    buy = 1          # 매수
    sell= 2          # 매도
    none =3
 
# 현재가 정보 저장 구조체
class stockPricedData:
    def __init__(self):
        self.dicEx = {ord('0'): "동시호가/장중 아님", ord('1'): "동시호가", ord('2'): "장중"}
        self.code = ""
        self.name = ""
        self.cur = 0        # 현재가
        self.open = self.high = self.low = 0 # 시/고/저
        self.diff = 0
        self.diffp = 0
        self.objCur = None
        self.objBid = None
        self.vol = 0 # 거래량
        self.offer = [0 for _ in range(10)]     # 매도호가
        self.bid = [0 for _ in range(10)]       # 매수호가
        self.offervol = [0 for _ in range(10)]     # 매도호가 잔량
        self.bidvol = [0 for _ in range(10)]       # 매수호가 잔량
 
    # 전일 대비 계산
    def makediffp(self, baseprice):
        lastday = 0
        if baseprice :
            lastday =baseprice
        else:
            lastday = self.cur - self.diff
        if lastday:
            self.diffp = (self.diff / lastday) * 100
        else:
            self.diffp = 0
 
    def debugPrint(self, type):
        if type == 0  :
            print("%s, %s %s, 현재가 %d 대비 %d, (%.2f), 1차매도 %d(%d) 1차매수 %d(%d)"
                  %(self.dicEx.get(self.exFlag), self.code,
                    self.name, self.cur, self.diff, self.diffp,
                    self.offer[0], self.offervol[0],self.bid[0], self.bidvol[0] ) )
        else :
            print("%s %s, 현재가 %.2f 대비 %.2f, (%.2f), 1차매도 %.2f(%d) 1차매수 %.2f(%d)"
                  % (self.code,
                     self.name, self.cur, self.diff, self.diffp,
                     self.offer[0], self.offervol[0], self.bid[0], self.bidvol[0]))
 
# 주문 데이터
class orderData:
    def __init__(self):
        self.dicEx = {EorderBS.buy: "매수", EorderBS.sell: "매도", EorderBS.none: "없음"}
        self.orderNum = 0
        self.bs = EorderBS.none  # 0 : buy 1: sell
        self.code = ""
        self.amount = 0
        self.price = 0
 
    def debugPrint(self):
        print(self.dicEx.get(self.bs), self.code, self.orderNum, self.amount, self.price)
 
 
# CpRPCurrentPrice:  현재가 기본 정보 조회 클래스
class CpRPCurrentPrice:
    def __init__(self):
        if (g_objCpStatus.IsConnect == 0):
            print("PLUS가 정상적으로 연결되지 않음. ")
            return
        self.objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
        return
 
    def Request(self, code, rtMst):
        # 현재가 통신
        rqtime = time.time()
 
        self.objStockMst.SetInputValue(0, code)
        ret = self.objStockMst.BlockRequest()
        if self.objStockMst.GetDibStatus() != 0:
            print("통신상태", self.objStockMst.GetDibStatus(), self.objStockMst.GetDibMsg1())
            return False
 
 
        # 수신 받은 현재가 정보를 rtMst 에 저장
        rtMst.code = code
        rtMst.name = g_objCodeMgr.CodeToName(code)
        rtMst.cur =  self.objStockMst.GetHeaderValue(11)  # 종가
        rtMst.diff =  self.objStockMst.GetHeaderValue(12)  # 전일대비
        rtMst.baseprice  =  self.objStockMst.GetHeaderValue(27)  # 기준가
        rtMst.exFlag = self.objStockMst.GetHeaderValue(58)  # 예상플래그
        if rtMst.baseprice :
            rtMst.diffp = (rtMst.diff / rtMst.baseprice) * 100
 
 
        # 10차호가
        for i in range(10):
            rtMst.offer[i] = (self.objStockMst.GetDataValue(0, i))  # 매도호가
            rtMst.bid[i] = (self.objStockMst.GetDataValue(1, i) ) # 매수호가
            rtMst.offervol[i] = (self.objStockMst.GetDataValue(2, i))  # 매도호가 잔량
            rtMst.bidvol[i] = (self.objStockMst.GetDataValue(3, i) ) # 매수호가 잔량
        return True
 
# CpRPPreOrder - 예약 주문 매수/매도/취소/내역 조회 클래스
class CpRPPreOrder:
    def __init__(self):
        if (g_objCpStatus.IsConnect == 0):
            print("PLUS가 정상적으로 연결되지 않음. ")
            return
        if (g_objCpTrade.TradeInit(0) != 0):
            print("주문 초기화 실패")
            exit
        self.objOrder = win32com.client.Dispatch("CpTrade.CpTdNew9061")
        self.objCancel = win32com.client.Dispatch("CpTrade.CpTdNew9064")
        self.objResult = win32com.client.Dispatch("CpTrade.CpTd9065")
 
        self.acc = g_objCpTrade.AccountNumber[0]  # 계좌번호
        self.accFlag = g_objCpTrade.GoodsList(self.acc, 1)  # 주식상품 구분
 
        return
 
    # 예약 매수 또는 매도
    def RequestOrder(self, bs, code, price, amount, data):
        data.code = code
        data.amount = amount
        data.price = price;
        rqBS = "2"
        if bs == EorderBS.buy:  # 매수
            rqBS = "2"
            data.bs = EorderBS.buy
        elif bs == EorderBS.sell: # 매도
            data.bs = EorderBS.sell
            rqBS = "1"
 
        # 예약 주문
        print(self.acc, self.accFlag[0])
        self.objOrder.SetInputValue(0, self.acc)
        self.objOrder.SetInputValue(1, self.accFlag[0])
        self.objOrder.SetInputValue(2, rqBS)
        self.objOrder.SetInputValue(3, code)
        self.objOrder.SetInputValue(4, amount)
        self.objOrder.SetInputValue(5, "01") # 주문호가 구분 01: 보통
        self.objOrder.SetInputValue(6, price)
 
        # 예약 주문 요청
        self.objOrder.BlockRequest()
 
        if self.objOrder.GetDibStatus() != 0:
            print("통신상태", self.objOrder.GetDibStatus(), self.objOrder.GetDibMsg1())
            return False
 
        data.orderNum = self.objOrder.GetHeaderValue(0)  # 예약번호
        print("예약주문 성공, 예약번호 #", data.orderNum)
 
 
    # 예약 취소 주문
    def RequestCancel(self, ordernum, code):
        # 예약주문 취소
        print(self.acc, self.accFlag[0])
        self.objCancel.SetInputValue(0, ordernum)
        self.objCancel.SetInputValue(1, self.acc)
        self.objCancel.SetInputValue(2, self.accFlag[0])
        self.objCancel.SetInputValue(3, code)
 
        # 예약 취소  주문 요청
        self.objCancel.BlockRequest()
 
        if self.objCancel.GetDibStatus() != 0:
            print("통신상태", self.objCancel.GetDibStatus(), self.objCancel.GetDibMsg1())
            return False
 
        print("예약주문 취소 ", ordernum, self.objCancel.GetDibMsg1() )
 
    # 예약 주문 내역 조회 및 미체결 리스트 구하기
    def RequestOrderList(self, orderList):
        print(self.acc, self.accFlag[0])
        self.objResult.SetInputValue(0, self.acc)
        self.objResult.SetInputValue(1, self.accFlag[0])
        self.objResult.SetInputValue(2, 20)
 
        while True: # 연속 조회로 전체 예약 주문 가져온다.
            self.objResult.BlockRequest()
            if self.objResult.GetDibStatus() != 0:
                print("통신상태", self.objResult.GetDibStatus(), self.objResult.GetDibMsg1())
                return False
 
            cnt = self.objResult.GetHeaderValue(4)
            if cnt == 0 :
                break
 
            for i in range(cnt):
                i1 = self.objResult.GetDataValue(1, i)  # 주문구분(매수 또는 매도)
                i2 =  self.objResult.GetDataValue(2, i)  # 코드
                i3 = self.objResult.GetDataValue(3, i)  # 주문 수량
                i4 = self.objResult.GetDataValue(4, i)  # 주문호가구분
                i5 = self.objResult.GetDataValue(6, i)  # 예약번호
                i6 = self.objResult.GetDataValue(12, i)  # 처리구분내용 - 주문취소 또는 주문예정
                i7 = self.objResult.GetDataValue(9, i)  # 주문단가
                i8= self.objResult.GetDataValue(11, i)  # 주문번호
                i9 = self.objResult.GetDataValue(12, i)  # 처리구분코드
                i10= self.objResult.GetDataValue(13, i)  # 거부코드
                i11 = self.objResult.GetDataValue(14, i)  # 거부내용
                print(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
 
                # 미체결
                if (i6 == "주문예정") :
                    item = orderData()
                    item.orderNum = i5
                    if (i1 == "매수") :
                        item.bs = EorderBS.buy
                    else:
                        item.bs = EorderBS.sell
                    item.code = i2
                    item.amount = i3
                    item.price = i7
 
                    orderList.append(item)
 
            # 연속 처리 체크 - 다음 데이터가 없으면 중지
            if self.objResult.Continue == False :
                break
 
# 샘플 코드  메인 클래스
class testMain():
    def __init__(self):
        self.orderList = []
        self.objMst = CpRPCurrentPrice()
        self.obj9061 = CpRPPreOrder()
 
        # 미체결 된 예약 주문 처음부터 받아옴.
        self.resultOrder()
        return
 
    def newBuyOrder(self, code, amount):
        mstData = stockPricedData()
        if self.objMst.Request(code, mstData) == False :
            print("현재가 요청 실패")
            return
 
        item = orderData()
        ret = self.obj9061.RequestOrder(EorderBS.buy, code, mstData.cur, amount, item )
        if (ret == False):
            return False
        self.orderList.append(item)
        item.debugPrint()
 
    def newSellOrder(self, code, amount):
        mstData = stockPricedData()
        if self.objMst.Request(code, mstData) == False :
            print("현재가 요청 실패")
            return
 
        item = orderData()
        ret = self.obj9061.RequestOrder(EorderBS.sell, code, mstData.cur, amount, item )
        if (ret == False):
            return False
        self.orderList.append(item)
        item.debugPrint()
 
    def cancelOrder(self):
        if len(self.orderList) == 0:
            print("취소 할 주문 확인하세요")
            return
        item = self.orderList[0]
        ret = self.obj9061.RequestCancel(item.orderNum, item.code)
        if (ret == False):
            return False
 
        del (self.orderList[0])
 
    def resultOrder(self):
        self.orderList = []
        # 미체결 주문만 받아 보자
        ret = self.obj9061.RequestOrderList(self.orderList)
        if (ret == False):
            return False
 
 
 
 
class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.main = testMain()
        self.setWindowTitle("PLUS API TEST")
        w = 200
        h = 30
 
        nHeight = 20
        btnBuy = QPushButton("예약매수 전송", self)
        btnBuy.move(20, nHeight)
        btnBuy.resize(w, h)
        btnBuy.clicked.connect(self.btnBuy_clicked)
 
        nHeight += 50
        btnSell = QPushButton("예약 매도 전송", self)
        btnSell.move(20, nHeight)
        btnSell.resize(w, h)
        btnSell.clicked.connect(self.btnSell_clicked)
 
        nHeight += 50
        btnCancel = QPushButton("예약 주문 취소", self)
        btnCancel.move(20, nHeight)
        btnCancel.resize(w, h)
        btnCancel.clicked.connect(self.btnCancel_clicked)
 
        nHeight += 50
        btnResult= QPushButton("예약 내역 가져오기", self)
        btnResult.move(20, nHeight)
        btnResult.resize(w, h)
        btnResult.clicked.connect(self.btnResult_clicked)
 
        nHeight += 50
        btnExit = QPushButton("종료", self)
        btnExit.move(20, nHeight)
        btnExit.resize(w, h)
        btnExit.clicked.connect(self.btnExit_clicked)
 
        nHeight += 50
        self.setGeometry(300, 500, 300, nHeight)
 
    def btnBuy_clicked(self):
        self.main.newBuyOrder("A003540", 10)
        return
 
    def btnSell_clicked(self):
        self.main.newSellOrder("A003540", 10)
        return
 
    def btnCancel_clicked(self):
        self.main.cancelOrder()
        return
 
 
    def btnResult_clicked(self):
        self.main.resultOrder()
        return
 
 
    def btnExit_clicked(self):
        exit()
        return
 
 
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

13 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제[편집]

import sys
from PyQt5.QtWidgets import *
from enum import Enum
import win32com.client
import time
import pythoncom
 
 
g_objCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
g_objCpStatus = win32com.client.Dispatch("CpUtil.CpCybos")
g_objElwMgr = win32com.client.Dispatch("CpUtil.CpElwCode")
g_objFutureMgr = win32com.client.Dispatch("CpUtil.CpFutureCode")
g_objOptionMgr = win32com.client.Dispatch("CpUtil.CpOptionCode")
 
 
=== 감시 중인 현재가 정보 저장 구조체===
class stockPricedData:
    def __init__(self):
        self.dicEx = {ord('0'): "동시호가/장중 아님", ord('1'): "동시호가", ord('2'): "장중"}
        self.code = ""
        self.name = ""
        ===elf.cur = 0        # 현재가===
        ===elf.open = self.high = self.low = 0 # 시/고/저===
        self.diff = 0
        self.diffp = 0
        self.objCur = None
        self.objBid = None
        #self.Zoffer = 0
        #self.ZodfferDate = 0
        ===elf.vol = 0 # 거래량===
        ===elf.offer = [0 for _ in range(10)]     # 매도호가===
        ===elf.bid = [0 for _ in range(10)]       # 매수호가===
        ===elf.offervol = [0 for _ in range(10)]     # 매도호가 잔량===
        ===elf.bidvol = [0 for _ in range(10)]       # 매수호가 잔량===
 
    === 전일 대비 계산===
    def makediffp(self, baseprice):
        lastday = 0
        if baseprice :
            lastday =baseprice
        else:
            lastday = self.cur - self.diff
        if lastday:
            self.diffp = (self.diff / lastday) * 100
        else:
            self.diffp = 0
 
    def debugPrint(self, type):
        if type == 0  :
            print("%s, %s %s, 현재가 %d 대비 %d, (%.2f), 1차매도 %d(%d) 1차매수 %d(%d)"
                  %(self.dicEx.get(self.exFlag), self.code,
                    self.name, self.cur, self.diff, self.diffp,
                    self.offer[0], self.offervol[0],self.bid[0], self.bidvol[0] ) )
        else :
            print("%s %s, 현재가 %.2f 대비 %.2f, (%.2f), 1차매도 %.2f(%d) 1차매수 %.2f(%d)"
                  % (self.code,
                     self.name, self.cur, self.diff, self.diffp,
                     self.offer[0], self.offervol[0], self.bid[0], self.bidvol[0]))
 
 
class CpMarketEye:
    def __init__(self):
        if (g_objCpStatus.IsConnect == 0):
            print("PLUS가 정상적으로 연결되지 않음. ")
            return False
        self.objRq = win32com.client.Dispatch("CpSysDib.MarketEye")
        self.RpFiledIndex = 0
 
    def Request(self, codes, dicCodes):
        #rqField = [코드, 대비부호, 대비, 현재가, 시가, 고가, 저가, 매도호가, 매수호가, 거래량, 장구분, 매도잔량,매수잔량,
        === 공매도수량, 공매도날짜]===
===        rqField = [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 127, 128]  # 요청 필드===
        ===qField = [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16]  # 요청 필드===
 
        ===elf.objRq.SetInputValue(0, rqField)  # 요청 필드===
        ===elf.objRq.SetInputValue(1, codes)  # 종목코드 or 종목코드 리스트===
        self.objRq.BlockRequest()
 
        === 현재가 통신 및 통신 에러 처리===
        rqStatus = self.objRq.GetDibStatus()
        print("통신상태", rqStatus, self.objRq.GetDibMsg1())
        if rqStatus != 0:
            return False
 
        cnt = self.objRq.GetHeaderValue(2)
 
        for i in range(cnt):
            ===ode = self.objRq.GetDataValue(0, i)  # 코드===
            record = None
            if code in dicCodes:
                record = dicCodes.get(code)
            else:
                record = stockPricedData()
 
            record.code = code
            record.name = g_objCodeMgr.CodeToName(code)
 
            ===ecord.diff = self.objRq.GetDataValue(2, i)  # 전일대비===
            ===ecord.cur = self.objRq.GetDataValue(3, i)  # 현재가===
            ===ecord.open = self.objRq.GetDataValue(4, i)  # 시가===
            ===ecord.high = self.objRq.GetDataValue(5, i)  # 고가===
            ===ecord.low = self.objRq.GetDataValue(6, i)  # 저가===
            ===ecord.offer[0] =  self.objRq.GetDataValue(7, i)  # 매도호가===
            ===ecord.bid[0] = self.objRq.GetDataValue(8, i)  # 매수호가===
            ===ecord.vol = self.objRq.GetDataValue(9, i)  # 거래량===
            ===ecord.exFlag = self.objRq.GetDataValue(10, i)  # 장구분===
            ===ecord.offervol[0] = self.objRq.GetDataValue(11, i)  # 매도잔량===
            ===ecord.bidvol[0] = self.objRq.GetDataValue(12, i)  # 매수잔량===
            ===record.Zoffer = self.objRq.GetDataValue(13, i)  # 공매도수량===
            ===record.ZofferDate = self.objRq.GetDataValue(14, i)  # 공매도날짜===
 
            record.makediffp(0)
            dicCodes[code] = record
 
        return True
 
 
 
 
=== 샘플 코드  메인 클래스===
class testMain():
    def __init__(self):
        ===elf.dicStockCodes = dict()  # 주식 전 종목 시세 ===
        ===elf.dicElwCodes = dict()  # ELW 전종목 시세 ===
        ===elf.dicFutreCodes = dict()  # 선물 전종목 시세 ===
        ===elf.dicOptionCodes = dict()  # 옵션 전종목 시세 ===
        ===elf.dicUpjongCodes = dict()  # 업종 전종목 시세 ===
        self.obj = CpMarketEye()
        return
 
    def ReqeustStockMst(self):
        ===odeList = g_objCodeMgr.GetStockListByMarket(1)  # 거래소===
        ===odeList2 = g_objCodeMgr.GetStockListByMarket(2)  # 코스닥===
 
        allcodelist = codeList + codeList2
        print("전체 종목 코드 #", len(allcodelist))
 
 
        rqCodeList = []
        for i, code in enumerate(allcodelist):
            rqCodeList.append(code)
            if len(rqCodeList) == 200:
                self.obj.Request(rqCodeList, self.dicStockCodes)
                rqCodeList = []
                continue
 
        if len(rqCodeList) > 0 :
            self.obj.Request(rqCodeList, self.dicStockCodes)
 
        print("거래소 + 코스닥 전 종목 ", len(self.dicStockCodes))
        for key in self.dicStockCodes :
            self.dicStockCodes[key].debugPrint(0)
 
 
    def ReqeustElwMst(self):
 
        allcodelist = []
        for i in range(g_objElwMgr.GetCount()) :
            allcodelist.append(g_objElwMgr.GetData(0,i))
 
        print("전체 종목 코드 #", len(allcodelist))
 
 
        rqCodeList = []
        for i, code in enumerate(allcodelist):
            rqCodeList.append(code)
            if len(rqCodeList) == 200:
                self.obj.Request(rqCodeList, self.dicElwCodes)
                rqCodeList = []
                continue
 
        if len(rqCodeList) > 0 :
            self.obj.Request(rqCodeList, self.dicElwCodes)
 
        print("ELW 전종목", len(self.dicElwCodes))
        for key in self.dicElwCodes :
            self.dicElwCodes[key].debugPrint(0)
 
    def ReqeustFutreMst(self):
        allcodelist = []
        for i in range(g_objFutureMgr.GetCount()) :
            allcodelist.append(g_objFutureMgr.GetData(0,i))
 
        print("전체 종목 코드 #", len(allcodelist))
 
 
        rqCodeList = []
        for i, code in enumerate(allcodelist):
            rqCodeList.append(code)
            if len(rqCodeList) == 200:
                self.obj.Request(rqCodeList, self.dicFutreCodes)
                rqCodeList = []
                continue
 
        if len(rqCodeList) > 0 :
            self.obj.Request(rqCodeList, self.dicFutreCodes)
 
        print("선물 전종목 ", len(self.dicFutreCodes))
        for key in self.dicFutreCodes :
            self.dicFutreCodes[key].debugPrint(1)
 
    def ReqeustOptionMst(self):
        allcodelist = []
        for i in range(g_objOptionMgr.GetCount()) :
            allcodelist.append(g_objOptionMgr.GetData(0,i))
 
        print("전체 종목 코드 #", len(allcodelist))
 
 
        rqCodeList = []
        for i, code in enumerate(allcodelist):
            rqCodeList.append(code)
            if len(rqCodeList) == 200:
                self.obj.Request(rqCodeList, self.dicOptionCodes)
                rqCodeList = []
                continue
 
        if len(rqCodeList) > 0 :
            self.obj.Request(rqCodeList, self.dicOptionCodes)
 
        print("옵션 전종목 ", len(self.dicOptionCodes))
        for key in self.dicOptionCodes :
            self.dicOptionCodes[key].debugPrint(1)
 
    def ReqeustUpjongMst(self):
        ===odeList = g_objCodeMgr.GetIndustryList() # 증권 산업 업종 리스트===
 
        allcodelist = codeList
        print("전체 종목 코드 #", len(allcodelist))
 
 
        rqCodeList = []
        for i, code in enumerate(allcodelist):
            code2 = "U" + code
            rqCodeList.append(code2)
            if len(rqCodeList) == 200:
                self.obj.Request(rqCodeList, self.dicUpjongCodes)
                rqCodeList = []
                continue
 
        if len(rqCodeList) > 0 :
            self.obj.Request(rqCodeList, self.dicUpjongCodes)
 
        print("증권산업업종 리스트", len(self.dicUpjongCodes))
        for key in self.dicUpjongCodes :
            self.dicUpjongCodes[key].debugPrint(1)
 
class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.main = testMain()
        self.setWindowTitle("PLUS API TEST")
        self.setGeometry(300, 500,  300, 500)
 
        nHeight = 20
        btnStock = QPushButton("주식 전 종목", self)
        btnStock.move(20, nHeight)
        btnStock.clicked.connect(self.btnStock_clicked)
 
        nHeight += 50
        btnElw = QPushButton("ELW 전 종목", self)
        btnElw.move(20, nHeight)
        btnElw.clicked.connect(self.btnElw_clicked)
 
        nHeight += 50
        btnFuture = QPushButton("선물 전 종목", self)
        btnFuture.move(20, nHeight)
        btnFuture.clicked.connect(self.btnFuture_clicked)
 
        nHeight += 50
        btnOption= QPushButton("옵션 전 종목", self)
        btnOption.move(20, nHeight)
        btnOption.clicked.connect(self.btnOption_clicked)
 
        nHeight += 50
        btnUpjong= QPushButton("업종 전 종목", self)
        btnUpjong.move(20, nHeight)
        btnUpjong.clicked.connect(self.btnUpjong_clicked)
 
        nHeight += 50
        btnExit = QPushButton("종료", self)
        btnExit.move(20, nHeight)
        btnExit.clicked.connect(self.btnExit_clicked)
 
    def btnStock_clicked(self):
        self.main.ReqeustStockMst()
        return
 
    def btnElw_clicked(self):
        self.main.ReqeustElwMst()
        return
 
    def btnFuture_clicked(self):
        self.main.ReqeustFutreMst()
        return
 
    def btnOption_clicked(self):
        self.main.ReqeustOptionMst()
        return
 
    def btnUpjong_clicked(self):
        self.main.ReqeustUpjongMst()
        return
 
 
    def btnExit_clicked(self):
        exit()
        return
 
 
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

14 시세 연속 조회 제한 확인용 예제[편집]

15 VI 발동 종목에 대한 현재가 변화 추이 감시 예제[편집]

16 주식 주문 체결 실시간 처리 예제[편집]

17 주식 잔고 종목 조회 및 실시간 현재가 업데이트[편집]

18 당일 상승률 상위 200 종목 실시간 통신 예제[편집]

19 MACD 차트지표 계산(실시간)[편집]

20 차트 데이터 구하는 예제[편집]

21 주식 현금 매도주문[편집]

22 주식 현금 매수주문[편집]

23 주식 복수종목 조회/실시간[편집]

24 주식 복수종목 실시간 등록/해지[편집]

25 ETF NAV , ETN IIV 실시간 수신 예제[편집]

26 데이터 요청 방법 2가지 BlockRequest 와 Request 방식 비교 예제[편집]

27 주식 5분 차트 MACD 신호[편집]

28 종목검색 조회 및 실시간 감시 예제[편집]

29 선물 현재가/시간대별/일자별/주문/잔고/미체결 예제[편집]

30 투자자별 매매 종합 예제[편집]

31 전종목 시가총액 구하기 예제[편집]

32 차트 지표 계산(MACD/RSI 등)[편집]

33 선물 분 차트 그리기(matplotlib 이용)[편집]

34 체결기준 주식 당일 매매 손익 예제[편집]

35 실시간 분차트 데이터 만들기[편집]

36 주식 잔고 실시간 조회(현재가 및 주문 체결 실시간 반영)[편집]

37 해외선물 주문 예제[편집]

38 특징주 포착(뉴스/공시/차트/외국인 신호) 예제[편집]

39 보유 주식 잔고 일괄 매도 예제[편집]

40 주식 IOC/FOK 주문 테스트 예제[편집]

41 종목검색 서비스를 이용하여 예제 전략 조건 조회하기 예제[편집]

42 종목별 투자자 매매동향 (잠정)데이터[편집]

43 주식 분할 주문 예제[편집]

44 해외선물 잔고(미결제약정)과 실시간 주문체결 처리 예제[편집]