"대신증권 파이썬 api"의 두 판 사이의 차이
DB CAFE
12번째 줄: | 12번째 줄: | ||
# 주식 예약 매수/매도/취소/조회 예제 | # 주식 예약 매수/매도/취소/조회 예제 | ||
# 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제 | # 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제 | ||
− | # | + | :#<source lang=python> |
import sys | import sys | ||
from PyQt5.QtWidgets import * | from PyQt5.QtWidgets import * |
2020년 9월 8일 (화) 23:25 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
- 주식 현재가 조회/실시간
- 주식 일자별 조회(다음)
- 주식 현재가 조회
- 종목정보 구하는 예제
- 주식차트 조회(일간/주간/월간/분간/틱) 예제
- 지수옵션 최근월물 시세 조회(실시간 포함)
- 매매입체분석(투자주체별현황) 예제
- 해외선물 현재가/5차 호가 조회(실시간 업데이트 포함)
- 주식 현재가(10차호가/시간대별/일자별) 구현하기 예제
- 주식 미체결 조회 및 실시간 미체결 업데이트/취소주문/일괄 취소 예제...
- 주식 현재가 10차 호가 화면 구현하기
- 주식 예약 매수/매도/취소/조회 예제
- 주식/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")
- 감시 중인 현재가 정보 저장 구조체
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_()
</python>
- 시세 연속 조회 제한 확인용 예제
- VI 발동 종목에 대한 현재가 변화 추이 감시 예제
- 주식 주문 체결 실시간 처리 예제
- 주식 잔고 종목 조회 및 실시간 현재가 업데이트
- 당일 상승률 상위 200 종목 실시간 통신 예제
- MACD 차트지표 계산(실시간)
- 차트 데이터 구하는 예제
- 주식 현금 매도주문
- 주식 현금 매수주문
- 주식 복수종목 조회/실시간
- 주식 복수종목 실시간 등록/해지
- ETF NAV , ETN IIV 실시간 수신 예제
- 데이터 요청 방법 2가지 BlockRequest 와 Request 방식 비교 예제
- 주식 5분 차트 MACD 신호
- 종목검색 조회 및 실시간 감시 예제
- 선물 현재가/시간대별/일자별/주문/잔고/미체결 예제
- 투자자별 매매 종합 예제
- 전종목 시가총액 구하기 예제
- 차트 지표 계산(MACD/RSI 등)
- 선물 분 차트 그리기(matplotlib 이용)
- 체결기준 주식 당일 매매 손익 예제
- 실시간 분차트 데이터 만들기
- 주식 잔고 실시간 조회(현재가 및 주문 체결 실시간 반영)
- 해외선물 주문 예제
- 특징주 포착(뉴스/공시/차트/외국인 신호) 예제
- 보유 주식 잔고 일괄 매도 예제
- 주식 IOC/FOK 주문 테스트 예제
- 종목검색 서비스를 이용하여 예제 전략 조건 조회하기 예제
- 종목별 투자자 매매동향 (잠정)데이터
- 주식 분할 주문 예제
- 해외선물 잔고(미결제약정)과 실시간 주문체결 처리 예제