XINGAPI로 실시간데이터를 가져오는 코드를 구성해봤다.
일단 Devcenter를 실행한 후 Real 목록에 있는 항목 중 원하는 것들을 골라서 코드를 구성하면 된다.
해외선물은 아래와 같이 7개의 항목이 있는데 이 중 실시간체결정보는 '[OVC] 해외선물 체결' 정보를 가져오면 된다.
TR이나 Real도 모두 마찬가지인데 서버에 요청사항을 보내는 과정은 아래와 같다.
1. ResFileName
요청할 TR이나 Real에 해당하는 res파일 지정
2. SetFieldData
Inblock, 입력데이터에서 정의하고 있는 사항들을 SetFieldData로 정의해야한다.
그런데 위의 경우에는 symbol, 종목코드만 입력하면 된다.
3. AdviseRealData (TR의 경우 Request)
위의 1, 2에서 정의한 사항을 한꺼번에 서버로 넘겨주는 과정이라고 보면 된다.
4. GetFieldData
3번까지 완료되면 서버는 이후에 데이터를 받아왔다는 신호를 유저에게 넘겨주게 된다.
최초에 선언한 Handler가 지정하는 클래스로 이 신호를 보내게 된다.
아래 코드에서는 체결정보가 발생할 경우 XARealHandler_OVC로 체결사항이 발생했음을 알려준다.
XARealHandler_OVC.OnReceiveRealData에서 type변수를 받는데 이 변수를 출력해보면 'OVC'라고만 나온다.
Real목록 중 'OVC'와 관련된 데이터가 도착했음을 유저에게 알려주는 셈이다.
OutBlock에 해당하는 항목들을 GetFieldData함수를 통해서 하나씩 가져오면 되는데
아래에서는 가져온 정보들을 딕셔너리에 넣어서 한꺼번에 화면에 출력한다.
미니항셍 2022년 7월물(HMHN22)의 체결정보를 화면에 출력하는 전체 코드는 아래와 같다.
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
|
from PyQt5.QtWidgets import QApplication
from PyQt5.QAxContainer import QAxWidget
import sys
import win32com.client
import pythoncom
# 로그인용 EventHandler
class XASessionEventHandler:
login_state = 0
def OnLogin(self, code, msg):
if code == "0000":
XASessionEventHandler.login_state = 1
class XARealHandler_OVC:
def OnReceiveRealData(self, type):
# Real목록 중 OVC의 Outblock값
outblock = {'종목코드': 'symbol', '체결일자(현지)': 'ovsdate', '체결일자(한국)': 'kordate', '체결시간(현지)': 'trdtm',
'체결시간(한국)': 'kortm', '체결가격': 'curpr', '전일대비': 'ydiffpr', '전일대비기호': 'ydiffSign',
'시가': 'open', '고가': 'high', '저가': 'low', '등락율': 'chgrate',
'건별체결수량': 'trdq', '누적체결수량': 'totq'}
# outblock 데이터 가져오기
ret_outblock = {}
for item in outblock:
ret_outblock[item] = main.XAreal_OVC.GetFieldData("OutBlock", outblock[item])
# 체결데이터 출력
print(ret_outblock)
class Main(QAxWidget):
def __init__(self):
super().__init__()
# RealDataHandler 등록
self.XAreal_OVC = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XARealHandler_OVC)
# 로그인 함수
def connect(self):
id = ""
passwd = ""
cert_passwd = ""
instXASession = win32com.client.DispatchWithEvents("XA_Session.XASession", XASessionEventHandler)
instXASession.ConnectServer("demo.ebestsec.co.kr", 20001)
instXASession.Login(id, passwd, cert_passwd, 0, 0)
while XASessionEventHandler.login_state == 0:
pythoncom.PumpWaitingMessages()
# [OVC]해외선물 체결
def req_realtime_price(self, symbol):
# res파일 지정
self.XAreal_OVC.ResFileName = 'C:/eBEST/xingAPI/Res/OVC.res'
# Inblock 데이터 정의
self.XAreal_OVC.SetFieldData("InBlock", "symbol", symbol)
# RealData 요청
self.XAreal_OVC.AdviseRealData()
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
main.connect()
symbol = 'HMHN22'
main.req_realtime_price(symbol)
app.exec_()
|
cs |
'Python, API' 카테고리의 다른 글
[XINGAPI] 해외선물 실시간 주문접수/응답/체결 정보 가져오기 - TC1/TC2/TC3 (0) | 2022.06.30 |
---|---|
[XINGAPI] 해외선물 분봉데이터 조회 - o3123 (0) | 2022.06.29 |
텔레그램의 I/O Bound 해결 (0) | 2021.09.13 |
CMD 실행창 이름 변경하기 (0) | 2021.09.03 |
QEventloop (0) | 2021.07.14 |