행위

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

DB CAFE

12번째 줄: 12번째 줄:
 
# 주식 예약 매수/매도/취소/조회 예제
 
# 주식 예약 매수/매도/취소/조회 예제
 
# 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제
 
# 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제
:#<source lang=python>
+
:<source lang=python>
 
import sys
 
import sys
 
from PyQt5.QtWidgets import *
 
from PyQt5.QtWidgets import *

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

thumb_up 추천메뉴 바로가기


  1. 주식 현재가 조회/실시간
  2. 주식 일자별 조회(다음)
  3. 주식 현재가 조회
  4. 종목정보 구하는 예제
  5. 주식차트 조회(일간/주간/월간/분간/틱) 예제
  6. 지수옵션 최근월물 시세 조회(실시간 포함)
  7. 매매입체분석(투자주체별현황) 예제
  8. 해외선물 현재가/5차 호가 조회(실시간 업데이트 포함)
  9. 주식 현재가(10차호가/시간대별/일자별) 구현하기 예제
  10. 주식 미체결 조회 및 실시간 미체결 업데이트/취소주문/일괄 취소 예제...
  11. 주식 현재가 10차 호가 화면 구현하기
  12. 주식 예약 매수/매도/취소/조회 예제
  13. 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제
<source lang=python>

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")


  1. 감시 중인 현재가 정보 저장 구조체

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 = [코드, 대비부호, 대비, 현재가, 시가, 고가, 저가, 매도호가, 매수호가, 거래량, 장구분, 매도잔량,매수잔량,
       # 공매도수량, 공매도날짜]
  1. 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




  1. 샘플 코드 메인 클래스

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_()

</python>

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