Created
September 1, 2017 00:09
-
-
Save esstory/d31de99e9e7173e37d92d85a5e2e323b to your computer and use it in GitHub Desktop.
PLUS API EX - 파이썬 현재가 실시간 예제
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from PyQt5.QtWidgets import * | |
import win32com.client | |
class CpEvent: | |
instance = None | |
def OnReceived(self): | |
# time = CpEvent.instance.GetHeaderValue(3) # 시간 | |
timess = CpEvent.instance.GetHeaderValue(18) # 초 | |
exFlag = CpEvent.instance.GetHeaderValue(19) # 예상체결 플래그 | |
cprice = CpEvent.instance.GetHeaderValue(13) # 현재가 | |
diff = CpEvent.instance.GetHeaderValue(2) # 대비 | |
cVol = CpEvent.instance.GetHeaderValue(17) # 순간체결수량 | |
vol = CpEvent.instance.GetHeaderValue(9) # 거래량 | |
if (exFlag == ord('1')): # 동시호가 시간 (예상체결) | |
print("실시간(예상체결)", timess, "*", cprice, "대비", diff, "체결량", cVol, "거래량", vol) | |
elif (exFlag == ord('2')): # 장중(체결) | |
print("실시간(장중 체결)", timess, cprice, "대비", diff, "체결량", cVol, "거래량", vol) | |
class CpStockCur: | |
def Subscribe(self, code): | |
self.objStockCur = win32com.client.Dispatch("DsCbo1.StockCur") | |
win32com.client.WithEvents(self.objStockCur, CpEvent) | |
self.objStockCur.SetInputValue(0, code) | |
CpEvent.instance = self.objStockCur | |
self.objStockCur.Subscribe() | |
def Unsubscribe(self): | |
self.objStockCur.Unsubscribe() | |
class CpStockMst: | |
def Request(self, code): | |
# 연결 여부 체크 | |
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos") | |
bConnect = objCpCybos.IsConnect | |
if (bConnect == 0): | |
print("PLUS가 정상적으로 연결되지 않음. ") | |
return False | |
# 현재가 객체 구하기 | |
objStockMst = win32com.client.Dispatch("DsCbo1.StockMst") | |
objStockMst.SetInputValue(0, code) # 종목 코드 - 삼성전자 | |
objStockMst.BlockRequest() | |
# 현재가 통신 및 통신 에러 처리 | |
rqStatus = objStockMst.GetDibStatus() | |
rqRet = objStockMst.GetDibMsg1() | |
print("통신상태", rqStatus, rqRet) | |
if rqStatus != 0: | |
return False | |
# 현재가 정보 조회 | |
code = objStockMst.GetHeaderValue(0) # 종목코드 | |
name = objStockMst.GetHeaderValue(1) # 종목명 | |
time = objStockMst.GetHeaderValue(4) # 시간 | |
cprice = objStockMst.GetHeaderValue(11) # 종가 | |
diff = objStockMst.GetHeaderValue(12) # 대비 | |
open = objStockMst.GetHeaderValue(13) # 시가 | |
high = objStockMst.GetHeaderValue(14) # 고가 | |
low = objStockMst.GetHeaderValue(15) # 저가 | |
offer = objStockMst.GetHeaderValue(16) # 매도호가 | |
bid = objStockMst.GetHeaderValue(17) # 매수호가 | |
vol = objStockMst.GetHeaderValue(18) # 거래량 | |
vol_value = objStockMst.GetHeaderValue(19) # 거래대금 | |
print("코드 이름 시간 현재가 대비 시가 고가 저가 매도호가 매수호가 거래량 거래대금") | |
print(code, name, time, cprice, diff, open, high, low, offer, bid, vol, vol_value) | |
return True | |
class MyWindow(QMainWindow): | |
def __init__(self): | |
super().__init__() | |
self.setWindowTitle("PLUS API TEST") | |
self.setGeometry(300, 300, 300, 150) | |
self.isRq = False | |
self.objStockMst = CpStockMst() | |
self.objStockCur = CpStockCur() | |
btn1 = QPushButton("요청 시작", self) | |
btn1.move(20, 20) | |
btn1.clicked.connect(self.btn1_clicked) | |
btn2 = QPushButton("요청 종료", self) | |
btn2.move(20, 70) | |
btn2.clicked.connect(self.btn2_clicked) | |
btn3 = QPushButton("종료", self) | |
btn3.move(20, 120) | |
btn3.clicked.connect(self.btn3_clicked) | |
def StopSubscribe(self): | |
if self.isRq: | |
self.objStockCur.Unsubscribe() | |
self.isRq = False | |
def btn1_clicked(self): | |
testCode = "A000660" | |
if (self.objStockMst.Request(testCode) == False): | |
exit() | |
# 하이닉스 실시간 현재가 요청 | |
self.objStockCur.Subscribe(testCode) | |
print("-------------------") | |
print("실시간 현재가 요청 시작") | |
self.isRq = True | |
def btn2_clicked(self): | |
self.StopSubscribe() | |
def btn3_clicked(self): | |
self.StopSubscribe() | |
exit() | |
if __name__ == "__main__": | |
app = QApplication(sys.argv) | |
myWindow = MyWindow() | |
myWindow.show() | |
app.exec_() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment