본문 바로가기
programming language/Autohotkey

Autohotkey 강좌, 이베스트증권 xingAPI 로 주식 현재가 가져오기

by 남성 2018. 10. 8.

아래 포스팅에 이어서 오늘은 Autohotkey 로 이베스트증권 xingAPI 를 사용하여 주식 현재가를 가져 오는 방법에 대해서 소개하려 합니다. 아래 포스팅에 이은 소개이므로 해당 내용을 어느 정도 숙지하고 오셔야 이해가 될 것입니다.

http://iamaman.tistory.com/2224

아래 xingAPI 메뉴얼에 나와 있는 바와 같이 로그인이나 계좌 정보와 관련된 내용들은 XASession 을 사용하지만 조회를 하기 위해서는 XAQuery 를 사용해야 합니다. 또한 실시간 정보를 얻기 위해서는 XAReal 을 사용합니다.

http://www.ebestsec.co.kr/apiguide/guide.jsp?cno=100

또한 xingAPI 에는 TR 이라는 개념이 있는데~ xingAPI 를 사용할 때의 입출력 데이터 규격이라고 보시면 될 것 같습니다. TR 에 정의되어 있는 대로 입력을 넣어주면 증권사 서버에서 출력을 받을 수 있다는 것입니다. TR 은 파일로 되어 있는데 xingAPI 를 설치하면 DevCenter 라는 프로그램이 설치 되고 DevCenter 에서 아래와 같이 버튼을 누르면 한번에 다운로드 받을 수 있고 C:\eBEST\xingAPI\Res 폴더에 res 라는 확장자로 설치 됩니다. 각 TR 에 대한 입출력 정보는 DevCenter 에서 확인하실 수 있습니다.

주식 현재가 조회를 하기 위해서는 t1101 또는 t1102 TR 을 사용할 수 있습니다. 본 포스팅에서는 어떤 질문자 분이 계셔서 t1101 TR 을 사용해 보겠습니다. 해당 TR 의 res 파일 위치는 C:\eBEST\xingAPI\Res\t1101.res 이고~ 주식 현재가를 가져오기 위한 Autohotkey 코드는 아래와 같습니다.

아래 코드를 실행하기 전에 당연히 이전 포스팅에서 사용을 했던 로그인은 먼저 해야 되겠죠~

;~ ------------------------ 주식 현재가 가져오기 Start ----------------------------------------

instXAQueryT1102 := ComObjCreate("XA_DataSet.XAQuery")

ComObjConnect(instXAQueryT1102, "query_") ; event binding to query_ReceiveData

login_query := 0

instXAQueryT1102.ResFileName := "C:\\eBEST\\xingAPI\\Res\\t1101.res"

instXAQueryT1102.SetFieldData("t1101InBlock", "shcode", 0, "078020") ; 이베스트 투자 증권 코드

instXAQueryT1102.Request(0)

while login_query = 0 ; hold for ReceiveData event

{

}

name := instXAQueryT1102.GetFieldData("t1101OutBlock", "hname", 0)

price := instXAQueryT1102.GetFieldData("t1101OutBlock", "price", 0)

MsgBox %name% 종목의 현재 가격은 %price% 입니다.

;~ --------------------- 주식 현재가 가져오기 End ----------------------------------------

query_ReceiveData(code, msg)

{

global login_query:= 1

}

위 코드에서 입력으로 준 078020 은 이베스트 투자 증권의 코드 번호입니다. 정상적으로 동작을 하면 아래와 같이 이베스트투자증권의 현재 가격이 9770 원이라고 나오는 것을 확인할 수 있습니다.

위 코드의 동작중 중요한 부분에 대한 설명은 다음과 같습니다.

0. XAQuery 에 대해 ComObjCreate 를 하고 응답 함수를 ComObjConnect() 를 통해 binding 합니다.

1. SetFieldData 를 통해 t1101 TR 에 대한 입력값을 설정하고~

2. 서버에 Request 를 하고

3. whle 문을 통해 서버 응답을 기다립니다.

4. ReceiveData 함수를 통해 응답이 왔음을 확인하면 while 문을 빠져나가게 되고~

5. GetFieldData 를 통해 서버로부터 온 값 중 필요한 부분을 읽습니다.

혹시나 로그인을 안 한 상태로 위코드를 실행하고 안 돌아간다고 댓글 다실 분들을 위해 전체 코드를 첨부합니다. 아래 코드에서 증권사의 아이디,  패스워드,  공인인증서 비번은 본인의 것을 넣어야 된다는 설명은 굳이 안 해도 되겠죠?

위 코드의 동작만 확실히 이해하게 된다면 다른 대부분의 조회 TR도 이해할 수 있을 거라고 생각합니다.

Autohotkey 를 사용하여 이런것도 할 수 있다는 소개를 위해 작성해 봤는데~ 정말 Autohotkey 의 기능은 쓰면 쓸수록 무궁무진한 것 같습니다. 즐거운 Autohotkey 코딩 하시기 바랍니다.



댓글7

  • 이베스트 2018.10.09 14:31

    역시 남성 방장님의 친절한 답변에 감사합니다.열심히 연구 노력해보겠습니다.^^
    답글

  • 키움 2019.04.07 21:31

    여기 글을 보고 키움증권 api를 통해 만들어 보려고 하는데 막히는 부분이 있어서 여쭙니다

    k1:=ComObjCreate("KHOPENAPI.KHOpenAPICtrl.1")
    k1.CommConnect() -> 여기서 오류가 납니다


    파이썬 코드를 보면
    self.kiwoom = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1")
    self.kiwoom.dynamicCall("CommConnect()")


    혹시 해결방안에 대해 아시면 답해주시면 감사하겠습니다. ㅠㅠ
    답글

    • 남성 2019.04.07 22:33 신고

      글쎄요 제가 키움증권 API 를 사용하고 있지는 않아서.... Connect 부분에서 에러나는 거면 키움증권 API 관련 사이트에 질문 하면 쉽게 해결 될 수 있지 않을까 합니다.

  • 2019.07.29 12:57

    비밀댓글입니다
    답글

    • 남성 2019.07.29 14:08 신고

      github 에 올려 놓은거라 복사됩니다. 위 코드의 아래 부분에 있는 view raw 라고 써 있는 부분을 클릭하면 새창에서 코드가 열리니 복사 하셔도 되고 그냥 파일로 받고 싶으면 그 옆에 파일명을 클릭하면 github 사이트로 넘어가서 다운로드 받을 수 있습니다. 방문해 주셔서 감사합니다. ^^

  • 2020.05.21 12:53

    비밀댓글입니다
    답글