행위

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

DB CAFE

329번째 줄: 329번째 줄:
 
     myWindow.show()
 
     myWindow.show()
 
     app.exec_()
 
     app.exec_()
</python>
+
</source>
 
# 시세 연속 조회 제한 확인용 예제  
 
# 시세 연속 조회 제한 확인용 예제  
 
# VI 발동 종목에 대한 현재가 변화 추이 감시 예제
 
# VI 발동 종목에 대한 현재가 변화 추이 감시 예제

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

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 = ""
        self.cur = 0        # 현재가
        self.open = self.high = self.low = 0 # 시/고/저
        self.diff = 0
        self.diffp = 0
        self.objCur = None
        self.objBid = None
        #self.Zoffer = 0
        #self.ZodfferDate = 0
        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 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]  # 요청 필드
        rqField = [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16]  # 요청 필드
 
        self.objRq.SetInputValue(0, rqField)  # 요청 필드
        self.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):
            code = 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)
 
            record.diff = self.objRq.GetDataValue(2, i)  # 전일대비
            record.cur = self.objRq.GetDataValue(3, i)  # 현재가
            record.open = self.objRq.GetDataValue(4, i)  # 시가
            record.high = self.objRq.GetDataValue(5, i)  # 고가
            record.low = self.objRq.GetDataValue(6, i)  # 저가
            record.offer[0] =  self.objRq.GetDataValue(7, i)  # 매도호가
            record.bid[0] = self.objRq.GetDataValue(8, i)  # 매수호가
            record.vol = self.objRq.GetDataValue(9, i)  # 거래량
            record.exFlag = self.objRq.GetDataValue(10, i)  # 장구분
            record.offervol[0] = self.objRq.GetDataValue(11, i)  # 매도잔량
            record.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):
        self.dicStockCodes = dict()  # 주식 전 종목 시세 
        self.dicElwCodes = dict()  # ELW 전종목 시세 
        self.dicFutreCodes = dict()  # 선물 전종목 시세 
        self.dicOptionCodes = dict()  # 옵션 전종목 시세 
        self.dicUpjongCodes = dict()  # 업종 전종목 시세 
        self.obj = CpMarketEye()
        return
 
    def ReqeustStockMst(self):
        codeList = g_objCodeMgr.GetStockListByMarket(1)  # 거래소
        codeList2 = 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):
        codeList = 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_()
  1. 시세 연속 조회 제한 확인용 예제
  2. VI 발동 종목에 대한 현재가 변화 추이 감시 예제
  3. 주식 주문 체결 실시간 처리 예제
  4. 주식 잔고 종목 조회 및 실시간 현재가 업데이트
  5. 당일 상승률 상위 200 종목 실시간 통신 예제
  6. MACD 차트지표 계산(실시간)
  7. 차트 데이터 구하는 예제
  8. 주식 현금 매도주문
  9. 주식 현금 매수주문
  10. 주식 복수종목 조회/실시간
  11. 주식 복수종목 실시간 등록/해지
  12. ETF NAV , ETN IIV 실시간 수신 예제
  13. 데이터 요청 방법 2가지 BlockRequest 와 Request 방식 비교 예제
  14. 주식 5분 차트 MACD 신호
  15. 종목검색 조회 및 실시간 감시 예제
  16. 선물 현재가/시간대별/일자별/주문/잔고/미체결 예제
  17. 투자자별 매매 종합 예제
  18. 전종목 시가총액 구하기 예제
  19. 차트 지표 계산(MACD/RSI 등)
  20. 선물 분 차트 그리기(matplotlib 이용)
  21. 체결기준 주식 당일 매매 손익 예제
  22. 실시간 분차트 데이터 만들기
  23. 주식 잔고 실시간 조회(현재가 및 주문 체결 실시간 반영)
  24. 해외선물 주문 예제
  25. 특징주 포착(뉴스/공시/차트/외국인 신호) 예제
  26. 보유 주식 잔고 일괄 매도 예제
  27. 주식 IOC/FOK 주문 테스트 예제
  28. 종목검색 서비스를 이용하여 예제 전략 조건 조회하기 예제
  1. 종목별 투자자 매매동향 (잠정)데이터
  2. 주식 분할 주문 예제
  3. 해외선물 잔고(미결제약정)과 실시간 주문체결 처리 예제