대신증권 파이썬 api
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
- 1 주식 현재가 조회/실시간
- 2 주식 일자별 조회(다음)
- 3 주식 현재가 조회
- 4 종목정보 구하는 예제
- 5 주식차트 조회(일간/주간/월간/분간/틱) 예제
- 6 지수옵션 최근월물 시세 조회(실시간 포함)
- 7 매매입체분석(투자주체별현황) 예제
- 8 해외선물 현재가/5차 호가 조회(실시간 업데이트 포함)
- 9 주식 현재가(10차호가/시간대별/일자별) 구현하기 예제
- 10 주식 미체결 조회 및 실시간 미체결 업데이트/취소주문/일괄 취소 예제...
- 11 주식 현재가 10차 호가 화면 구현하기
- 12 주식 예약 매수/매도/취소/조회 예제
- 13 주식/ELW/선물/옵션/업종 전 종목 시세 조회 예제
- 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 해외선물 잔고(미결제약정)과 실시간 주문체결 처리 예제
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_()