행위

대신증권 파이썬 api

DB CAFE

Dbcafe (토론 | 기여)님의 2020년 9월 8일 (화) 23:28 판
thumb_up 추천메뉴 바로가기


목차

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

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

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

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

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

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

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

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

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

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

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

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

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 해외선물 잔고(미결제약정)과 실시간 주문체결 처리 예제[편집]