본문 바로가기

xingAPI/자동 매매 프로그램 만들기 (PYQT5)

[xingAPI, 파이썬] 주식차트(N분) 데이터 조회하기

 

GitHub - mujomboy/xingProject

Contribute to mujomboy/xingProject development by creating an account on GitHub.

github.com

 

 

 

[Git] Github 에 있는 파이썬 프로젝트 파이참(PyCharm) 으로 가져오기

1. 파이참에 GitHub Repository URL 연결하기 파이참을 열어 줍니다... 만약 파이참을 열었는데 바로 프로젝트가 오픈 되었다면... 프로젝트를 닫아 주세요. Get From VCS 버튼을 클릭해 줍니다. URL 입력 후

bysik1109.tistory.com

 

 

  • 주식챠트(N분) 데이터조회 [t8412] 전체 코드
더보기
import pythoncom
import win32com.client

from event.query import QueryEvents
from event.session import SessionEvents



# 세션 객체 요청 및 객체 생성
session = win32com.client.DispatchWithEvents("XA_Session.XASession", SessionEvents)

url = 'demo.ebestsec.co.kr'  # 모의 투자
# url = 'hts.ebestsec.co.kr'  # 실제 투자

session.ConnectServer(url, 200001)
session.Login("아이디", "비번", "", 0, 0)

while SessionEvents.state == "":
    # 로그인 상태 변경 메시지 채크
    pythoncom.PumpWaitingMessages()


# 쿼리 이벤트 객체 가져오기
query = win32com.client.DispatchWithEvents("XA_DataSet.XAQuery", QueryEvents)

# 주식챠트(N분)데이터 조회에 해당되는 t8412.res 파일이 있는 경로 가져오기
resfile_path = "C:\\Users\\bysik\\PycharmProjects\\xingProject\\res\\t8412.res"

# 조회 시 입력 파라미터 타입 명 t8412InBlock
inblock = "%sInBlock" % "t8412"
# 조회 시 리턴 파라미터 타입 명 t8412InBlock
outblock1 = "%sOutBlock1" % "t8412"

# 경로를 통해 res 파일를 로드.
query.LoadFromResFile(resfile_path)

# 입력 파리미터를 초기화 합니다.
query.SetFieldData(inblock, "shcode", 0, '009150')  # 종목코드 삼성전기
query.SetFieldData(inblock, "ncnt", 0, '5')  # (N)분  5분 챠트 데이터
query.SetFieldData(inblock, "sdate", 0, '20220707')  # 시작날짜 2022년 7월 7일
query.SetFieldData(inblock, "edate", 0, '20220708')  # 종료날짜 2022년 7월 8일
query.SetFieldData(inblock, "comp_yn", 0, "N")  # 압축여부

# 조회 요청
query.Request(0)

while not QueryEvents.state:
    # 응답 대기
    pythoncom.PumpWaitingMessages()

# 응답이 왔으므로 응답 대기 관련 state 값 초기화
QueryEvents.state = not QueryEvents.state

for i in range(query.GetBlockCount(outblock1)):
    # 리턴 데이터 추출
    date = query.GetFieldData(outblock1, "date", i).strip()  # 날짜
    time = query.GetFieldData(outblock1, "time", i).strip()  # 시간
    open = query.GetFieldData(outblock1, "open", i).strip()  # 시가
    high = query.GetFieldData(outblock1, "high", i).strip()  # 고가
    low = query.GetFieldData(outblock1, "low", i).strip()  # 저가
    close = query.GetFieldData(outblock1, "close", i).strip()  # 종가
    jdiff_vol = query.GetFieldData(outblock1, "jdiff_vol", i).strip()  # 거래량
    value = query.GetFieldData(outblock1, "value", i).strip()  # 거래대금

    print(date, time, open, high, low, close, jdiff_vol, value)




# 세션 클래스
class SessionEvents:

    state = ""
    msg = ""

    def OnLogin(self, code, msg):
        SessionEvents.state = code
        SessionEvents.msg = msg

    def OnLogout(self):
        print("OnLogout")

    def OnDisconnect(self):
        print("OnDisconnect")



# 쿼리 클래스
class QueryEvents:

    state = False
    code = ""

    error = ""
    msgCode = ""
    msg = ""

    def OnReceiveData(self, code):
        QueryEvents.code = code
        QueryEvents.state = True

    def OnReceiveMessage(self, error, msgCode, msg):
        QueryEvents.error = error
        QueryEvents.msgCode = msgCode
        QueryEvents.msg = msg

 

 

날짜, 시간, 시가, 고가, 저가, 종가, 거래량, 거래대금