Skip to content

Instantly share code, notes, and snippets.

@jayu108
Last active October 19, 2018 03:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jayu108/6e8ee600a7ec1e23225cc913154b13d9 to your computer and use it in GitHub Desktop.
Save jayu108/6e8ee600a7ec1e23225cc913154b13d9 to your computer and use it in GitHub Desktop.
creonplus 체결창 TR data 가져오기 기본 sample, python3.6, pyqt5
import time
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import *
import win32com.client
class Creon_StockBid(QObject):
"""
체결창 TR data 받기 class -- dscbo1.StockBid
**** TR data 수신중에, 다른 종목 수신요청하면 error 발생함 --> 받던 data 중간에 날라감..****
"""
receive_tr_stockbid_signal = pyqtSignal(tuple) # pyqtSignal(object) 로 해도됨..
continue_tr_stockbid_signal = pyqtSignal(str) # 다음 연속 data 있는 경우 signal
end_tr_stockbid_signal = pyqtSignal(str) # TR 종료 신호 -- 종목코드 전송함.
def __init__(self):
super().__init__()
# self.name = "StockBid"
# self.cnt = 0
pass
def set_input(self, stockcode="005930"):
code = 'A' + stockcode # 대신은 주식 종목코드가 'A'로 시작해야함.
self.SetInputValue(0, code) # 0 - (string) 종목코드
self.SetInputValue(2, 80) # 2 - (short)요청개수 (최대 80)
self.SetInputValue(3, ord('H')) # 3 - (char)체결비교방식 ; 'H' --> 호가비교방식
# self.SetInputValue(4, "0930") # 4 - (string) 시간검색 (ex "0910")
# print("stockbid 추가.. ---->", stockcode)
self.__request()
def __request(self, stockcode: str=""):
try:
self.Request()
except Exception as e:
# print("---error---", stockcode)
QMessageBox.warning(None, "치명적인 error", str(e))
# def block_request(self):
# self.BlockRequest()
def OnReceived(self):
code = self.GetHeaderValue(0) # 0 - (string) 종목코드
stockcode = code[1:] # 'A' 제외시킴.
sell_che = self.GetHeaderValue(3) # 3 - (long) 누적매도체결량
buy_che = self.GetHeaderValue(4) # 4 - (long) 누적매수체결량
data_count = self.GetHeaderValue(2) # 2 - (long) 수신개수
# self.cnt += 1
# print("------ creon tr che ---", self.cnt, stockcode, sell_che, buy_che, data_count)
for i in range(data_count):
ttime = self.GetDataValue(9, i) # 9 - (long) 시각(초)
sell_hoga = self.GetDataValue(2, i) # 2 - (long) 매도호가
buy_hoga = self.GetDataValue(3, i) # 3 - (long) 매수호가
price = self.GetDataValue(4, i) # 4 - (long) 현재가
vol = self.GetDataValue(5, i) # 5 - (long) 거래량 ; 누적 거래량
che_vol = self.GetDataValue(6, i) # 6 - (long) 순간체결량
pos = chr(self.GetDataValue(7, i)) # 7 - (char)체결상태 ; '1' -> 매수, '2' -> 매도
che_strength = self.GetDataValue(8, i) # 8 - (float) 체결강도
jang = chr(self.GetDataValue(10, i)) # 10 - (char)장구분플래그 ; '1'-동시호가시간(예상체결), '2'-장중(체결)
tick = (stockcode, ttime, price, che_vol, vol, sell_hoga, buy_hoga, pos, che_strength, jang)
self.receive_tr_stockbid_signal.emit(tick)
if self.Continue == 1:
self.continue_tr_stockbid_signal.emit(stockcode)
# time.sleep(0.3) #“계좌등급으로 시세제한 메세지 나올때 사용"
self.__request(stockcode)
else:
self.end_tr_stockbid_signal.emit(stockcode) # TR 종료 신호
@classmethod
def get_instance(cls):
cp_bid = win32com.client.DispatchWithEvents("dscbo1.StockBid", cls)
return cp_bid
if __name__ == "__main__":
import sys
class MyMain(QWidget):
def __init__(self):
super().__init__()
self.qtxt = QTextEdit(self)
hbox = QHBoxLayout()
label = QLabel("종목코드")
self.lineed = QLineEdit("900100", self)
self.btn = QPushButton("조회하기")
hbox.addWidget(label)
hbox.addWidget(self.lineed)
hbox.addWidget(self.btn)
vbox = QVBoxLayout()
vbox.addWidget(self.qtxt)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(100, 50, 600, 600)
self.btn.clicked.connect(self.__btn_clicked)
self.stockbid = Creon_StockBid.get_instance()
self.stockbid.receive_tr_stockbid_signal.connect(self.__receive_tr_stockbid)
self.stockbid.continue_tr_stockbid_signal.connect(self.__continue_tr_stockbid)
self.stockbid.end_tr_stockbid_signal.connect(self.__end_tr_sotkcbid)
self.setWindowTitle("creon plus 체결창 TR data 가져오기 -- StockBid 사용")
self.show()
@pyqtSlot()
def __btn_clicked(self):
# print("조회하기")
code = self.lineed.text()
self.stockbid.set_input(code)
@pyqtSlot(tuple)
def __receive_tr_stockbid(self, tuple_data):
# print(tuple_data)
self.qtxt.append(str(tuple_data))
@pyqtSlot(str)
def __continue_tr_stockbid(self, stockcode: str):
# print(tuple_data)
msg = "----- {0}---- TR 연속 data 수신중..... ----".format(stockcode)
self.qtxt.append(msg)
@pyqtSlot(str)
def __end_tr_sotkcbid(self, stockcode: str):
# print(tuple_data)
msg = "----- {0}---- TR data 수신 종료 ----".format(stockcode)
self.qtxt.append(msg)
app = QApplication(sys.argv)
mywin = MyMain()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment