Repository navigation
Expand file tree
/
Copy pathnewstest.py
More file actions
142 lines (111 loc) · 4.85 KB
/
Copy pathnewstest.py
File metadata and controls
142 lines (111 loc) · 4.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import sys
from PyQt5.QtWidgets import *
import win32com.client
# 복수 종목 실시간 조회 샘플 (조회는 없고 실시간만 있음)
class CpEvent:
def set_params(self, client):
self.client = client
def OnReceived(self):
code = self.client.GetHeaderValue(0) # 초
name = self.client.GetHeaderValue(1) # 초
timess = self.client.GetHeaderValue(18) # 초
exFlag = self.client.GetHeaderValue(19) # 예상체결 플래그
cprice = self.client.GetHeaderValue(13) # 현재가
diff = self.client.GetHeaderValue(2) # 대비
cVol = self.client.GetHeaderValue(17) # 순간체결수량
vol = self.client.GetHeaderValue(9) # 거래량
if (exFlag == ord('1')): # 동시호가 시간 (예상체결)
print("실시간(예상체결)", name, timess, "*", cprice, "대비", diff, "체결량", cVol, "거래량", vol)
elif (exFlag == ord('2')): # 장중(체결)
print("실시간(장중 체결)", name, timess, cprice, "대비", diff, "체결량", cVol, "거래량", vol)
class CpStockCur:
def Subscribe(self, code):
self.objStockCur = win32com.client.Dispatch("DsCbo1.StockCur")
handler = win32com.client.WithEvents(self.objStockCur, CpEvent)
self.objStockCur.SetInputValue(0, code)
handler.set_params(self.objStockCur)
self.objStockCur.Subscribe()
def Unsubscribe(self):
self.objStockCur.Unsubscribe()
class CpMarketEye:
def Request(self, codes, rqField):
# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
return False
# 관심종목 객체 구하기
objRq = win32com.client.Dispatch("CpSysDib.MarketEye")
# 요청 필드 세팅 - 종목코드, 종목명, 시간, 대비부호, 대비, 현재가, 거래량
# rqField = [0,17, 1,2,3,4,10]
objRq.SetInputValue(0, rqField) # 요청 필드
objRq.SetInputValue(1, codes) # 종목코드 or 종목코드 리스트
objRq.BlockRequest()
# 현재가 통신 및 통신 에러 처리
rqStatus = objRq.GetDibStatus()
rqRet = objRq.GetDibMsg1()
print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
return False
cnt = objRq.GetHeaderValue(2)
for i in range(cnt):
rpCode = objRq.GetDataValue(0, i) # 코드
rpName = objRq.GetDataValue(1, i) # 종목명
rpTime= objRq.GetDataValue(2, i) # 시간
rpDiffFlag = objRq.GetDataValue(3, i) # 대비부호
rpDiff = objRq.GetDataValue(4, i) # 대비
rpCur = objRq.GetDataValue(5, i) # 현재가
rpVol = objRq.GetDataValue(6, i) # 거래량
print(rpCode, rpName, rpTime, rpDiffFlag, rpDiff, rpCur, rpVol)
return True
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PLUS API TEST")
self.setGeometry(300, 300, 300, 150)
self.isSB = False
self.objCur = []
btnStart = QPushButton("요청 시작", self)
btnStart.move(20, 20)
btnStart.clicked.connect(self.btnStart_clicked)
btnStop = QPushButton("요청 종료", self)
btnStop.move(20, 70)
btnStop.clicked.connect(self.btnStop_clicked)
btnExit = QPushButton("종료", self)
btnExit.move(20, 120)
btnExit.clicked.connect(self.btnExit_clicked)
def StopSubscribe(self):
if self.isSB:
cnt = len(self.objCur)
for i in range(cnt):
self.objCur[i].Unsubscribe()
print(cnt, "종목 실시간 해지되었음")
self.isSB = False
self.objCur = []
def btnStart_clicked(self):
self.StopSubscribe();
# 요청 종목 배열
codes = ["A003540", "A000660", "A005930", "A035420", "A069500", "Q530031"]
# 요청 필드 배열 - 종목코드, 시간, 대비부호 대비, 현재가, 거래량, 종목명
rqField = [0, 1, 2, 3, 4, 10, 17] #요청 필드
objMarkeyeye = CpMarketEye()
if (objMarkeyeye.Request(codes, rqField) == False):
exit()
cnt = len(codes)
for i in range(cnt):
self.objCur.append(CpStockCur())
self.objCur[i].Subscribe(codes[i])
print("빼기빼기================-")
print(cnt , "종목 실시간 현재가 요청 시작")
self.isSB = True
def btnStop_clicked(self):
self.StopSubscribe()
def btnExit_clicked(self):
self.StopSubscribe()
exit()
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()