증권사 API2017. 12. 3. 00:30

 

 

아래는 xingAPI를 이용하는 전체 처리 과정입니다.

 

 

 

 

 

지난 4편에서 이베스트투자증권(이하 이베스트) HTS 서버에 로그인(위 이미지의 4번에 해당하는 )하는 부분까지 진행을 했었습니다.

 

 

바쁜 일정속에 후속편 진행이 더뎌지고 있다고 느껴질 즈음 잠시 시간을 내어 5편을 작성합니다.

 

 

무궁무진한 정보가 잔뜩 쌓여 있을것만 같은 이베스트 서버에 로그인 했으니 필요한 정보에 대해서 조회를 요청 해보겠습니다.

 

 

우선 독자분들이 조회 해보고 싶은 데이터가 이베스트 서버에 저장되어 있는지 알아야 합니다.

 

 

실시간 정보(호가 데이터, 체결 (틱) 데이터)는 그 갯수와 용량이 엄청나게 많기 때문에 증권사 서버에서도 모두 저장하지 못하고 흘러가는 데이터라 과거 데이터는 구할 수 없습니다.

 

 

여담이지만 이러한 속성 때문에 필자는 과거의 체결 데이터, 호가 데이터를 모두 수집하여 서버 컴퓨터의 데이터베이스에 차곡차곡 모아두고 있고 이는 언제든 새로운 아이디어가 떠 올랐을때 시뮬레이터를 구성하여 결과값을 볼 수 있습니다.

 

 

다시 본론으로 돌아와 이러한 실시간 데이터를 제외하고는 어지간한 데이터들이 많이 저장되어 있습니다.

 

 

독자분들이 가장 많이 보는 데이터가 무엇일까요?

 

 

필자가 밤낮없이 주식 공부를 하던 시절에는 주식 일봉 차트와 주식 분봉 차트를 가장 많이 봤던것 같은데요.

 

 

주식 일 데이터와 분 데이터를 조회 할 수 있는 TR이 DevCenter 목록에 포함되어 있는지 알아야 합니다.

 

 

결과적으로 해당 TR은 이베스트에서 기본 제공하고 있긴하지만 독자분들이 조회 해보고자 하는 데이터를 증권사에서 TR의 형태로 제공해주지 않는다면 정보를 조회 할 수 없습니다.

 

 

TR이란 Transaction (트랜잭션 혹은 트랜스액션)의 줄임말이고 "서버로부터 데이터를 주고 받는 행위"라고 이베스트 가이드에서 정의하고 있습니다.

 

 

다시 말해 데이터를 주고 받는데 한국어로 주고 받을것이냐 영어로 주고 받을 것이냐 중국어로 주고 받을것이냐 최대 몇글자까지 주고 받을것이냐 어떤 정보들을 주고 받을것이냐 이런것들에 대해 정의 되어 있는 것을 기반으로 데이터를 주고 받는 행위라고 보면 됩니다.

 

 

주식을 기준으로 보면 종목코드를 입력하여 현재가를 받아오거나 계좌번호와 비밀번호를 입력하여 손익 내역을 포함한 잔고를 받아오는 것도 TR을 통해서 가능합니다.

 

 

컴퓨터는 전혀 감각이라는 것이 없기 때문에 만약 독자분들이 종목코드 값만 넘겨주면 이베스트 서버는 아마도 이렇게 생각할 겁니다.

 

"이걸 왜 준거지?"

"이걸로 뭘 해달라는거야?"
"주문을 하겠다는거야?"
"현재가 조회를 하겠다는거야?"

"뉴스를 조회 하겠다는거야?"

"차트 데이터를 보고 싶다는거야?"

물론 실제로 이베스트 서버가 이렇게 생각하는것은 아니지만 무엇을 위해 넘겨진 값인지 알수 없다는 것이죠.

 

 

때문에 각 각의 통신 규약을 만들어두었으니 데이터 조회시 필요로 하는 TR을 이용하여 "규격에 맞게" 통신을 해야 합니다.

 

 

 

 

 

위 그림처럼 이베스트 서버에 "이거줘" 라고 말을 하면 전혀 알아 들을 수 없습니다.

 

 

삼성전자라는 종목의 2017년 01월 01일부터 2017년 12월 31일까지 데이터를 줘. 그리고 데이터의 시각 기준은 '일(daily)'야. 라고 알려줘야 이해를 하고 해당 데이터를 독자분들의 컴퓨터로 보내줍니다.

 

 

주고 받을 데이터의 종류에 따라 그 형식이 다양하며 이러한 형식을 통칭하여 TR Layout (Transaction Layout) 이라고 하며 여러 형식들을 각 각 정의 해둔 파일이 *.RES 파일이며 조금 더 구체적으로 말하면 RES는 TR Layout을 COM 버전에서 인식할 수 있는 형식으로 변경한 구조를 뜻하고 COM 버전은 RES를 입력해줘야 동작이 가능합니다.

 

 

형식이 어떻게 정의 되어 있는지 확인하려면 *.RES 파일을 메모장 등으로 열어 봐도 되고 DevCenter 를 통해 확인 할 수도 있습니다.

 

 

 

▲ 메모장 등의 프로그램을 이용해 주식종목조회를 할 수 있는 t8430.res 파일을 열어봤습니다.

 

▲ t8430InBlock 은 gubun 필드에 0,1,2 중에서 선택적으로 입력할 수 있게 되어 있으며 독자분들이 채워 넣어야 할 부분입니다.

 

▲ t8430OutBlock 은 종목명, 단축코드, 확장코드, ETF구분, 상한가, 하한가, 전일가, 주문수량단위, 기준가, 구분 등 다양한 값을 가지는데 이것은 이베스트 서버가 이러한 형식을 가지는 데이터를 내려주겠다는 뜻입니다.

 

▲ 모든 조회 TR은 독자분들이 입력해야 할 InBlock과 이베스트에서 데이터를 내려주는 형식을 뜻하는 OutBlock 으로 구성되어 있습니다.

 

 

 

 

 

▲ DevCenter를 통해 t8430을 확인한 모습입니다.

 

▲ 직접적으로 t8430.res를 열어본 것보다 보기에 쉽게 되어 있는데 과거에는 API를 제공하는 증권사가 많지도 않았고 그나마 제공하는 곳도 거의 대부분이 아주 간단한 메뉴얼과 *.res 파일만 제공했었는데 요즘은 보조 도구(DevCenter 등)를 잘 제공해주기 때문에 개발 환경이 아주 좋아졌습니다.

 

 

위에서 예로 든 주식종목조회 (t8430)을 이용해서 데이터를 가져오는 연습을 해볼텐데 우선 여러 데이터를 다 받지 않고 종목명 정보만 받아 보겠고 이를 위해서는 우선 XAQuery 를 선언하고 생성해줘야 합니다.

 

방법은 XASession 의 그것과 비슷합니다.

 

 

 

 

  Dim With Events XAQuery_t8403 As XAQuery

 

   Set XASession_t8430 = CreateObject("XA_DataSet.XAQuery")

 

 

 

어때요 쉽지요?

 

 

로그인을 할 때는 XASession 을 이용하고 데이터 조회시에는 XAQuery를 이용한다고 지난편에서 말씀드렸는데 기억하고 계실겁니다.

(혹 잊어버렸어도 괜찮습니다. 여러번 반복 작업 하다보면 자연스레 알게 되는 내용입니다.)

 

 

t8430에 대한 XAQuery의 선언과 생성이 완료 되었으면 t8430.res 파일이 어디에 있는지 프로그램에게 알려줘야 합니다.

 

 

 

  XAQuery_t8430.ResFileName = "t8430.res" 

 

 

 

 

InBlock.gubun 에서 어떤 범위의 데이터를 조회 할 것인지를 이베스트 서버에 알려줘야 합니다.

 

여기에서는 코스피 + 코스닥 전종목 데이터를 조회 하기 위해 gubun 필드의 값을 0으로 입력 하겠습니다.

 

 

 

  XAQuery_t8430.SetFieldData("t8430InBlock","gubun",0,"0") 

 

 

 

 

SetFieldData라는 함수를 이용하여 t8430InBlock의 gubun 필드에 0 값을 입력했고 그 다음줄에서는 위에 입력한 값을 이베스트 서버로 전송하라는 의미라고 이해하면 됩니다.

 

 

이로써 데이터 조회를 위해 독자분들이 해야 할 일의 1단계가 끝났습니다.

 

 

이베스트 서버에서는 독자분이 보낸 정보를 보고 "아! 이 정보가 필요하다고 하는구나. 보내줘야지"라고 인식하여 요청한 데이터에 대해 값을 내려줍니다.

 

 

요청한 데이터에 대해 서버가 값을 내려주는데 어디에서 어떻게 받을지 미리 정해둬야 합니다.

 

 

  XAQuery_t8430_ReceiveData(ByVal szTrCode As String)

 

 

 

 

이렇게 해두면 서버로부터 t8430에 대한 데이터가 도착하면 프로그램이 이런 이벤트를 알아차리고 데이터를 받을 수 있습니다.

 

 

이벤트를 받았으면 서버가 건너준 데이터를 실질적으로 프로그램에 불러오거나 저장해야 되는데 이 때는 XAQuery 객체의 GetFieldData라는 함수를 이용합니다.

(아까 데이터 입력시에는 XAQuery 객체의 SetFieldData 함수를 이용했었죠?)

 

 

  sName = XAQuery_t8430_GetFieldData("t8430","t8430OutBlock","hname",0)

 

 

 

 

t8430 TR을 통해 받은 이벤트를 알아차리고 t8430OutBlock의 hname 필드에서 첫번째(0) 값을 sName에 저장하는 코드입니다.

 

우리가 흔히 숫자를 셀 때 1부터 세지만 컴퓨터는 0부터이므로 0 값을 입력한 것이고 만약 10번째의 데이터를 알고 싶으면 10이 아니라 0부터 시작했으므로 9를 입력해야 합니다.

 

컴퓨터 상에서 데이터들의 순서에 대한 색인을 index (인덱스)라고 합니다.

 

 

이로써 데이터 조회를 위해 독자분들이 해야 할 일의 2단계이자 마지막 단계가 끝났습니다.

 

 

 

 

 

 

지금까지 "5번 XAQuery 객체 선언 및 생성"부터 "10번 Output 값 얻기"까지의 과정에 대해 t8430 TR을 이용하여 데이터를 조회하고 확인하는 과정까지 진행 해봤는데 뭔가 많이 한것 같지만 실제 프로그램 코드를 정리 해보면 아래와 같이 아주 간단합니다.

 

 

  Dim WithEvents XAQuery_t8430 As XAQuery

 

  Set XASession_t8430 = CreateObject("XA_DataSet.XAQuery")

 

  XAQuery_t8430.ResFileName = "t8430.res"

 

  XAQuery_t8430.SetFieldData("t8430InBlock","gubun",0,"0")

 

  XAQuery_t8430.Request(False)

 

  XAQuery_t8430_ReceiveData(ByVal szTrCode As String)

 

  sName = XAQuery_t8430_GetFieldData("t8430","t8430OutBlock","hname", 0)

 

 

 

 

 

각 코드마다 설명도 드렸으므로 생각보다 어렵지 않을것입니다.

 

 

금번에는 조회TR을 이용하는 예제로 설명 드렸는데 다음번에는 실시간TR을 이용하여 장중에 살아 움직이듯 쏟아지는 실시간 데이터를 조회 해보는 것으로 진행할 예정임을 알려 드리며 마칩니다.

 

 

Posted by 투자의神
뉴스 검색기2017. 12. 2. 09:33

 

 

아주 급한 용무는 일단락 되었고 잠시 짬을 내어 그동안 접수된 의견들에 대해 뉴스 검색기 업데이트 작업을 진행할 예정입니다.

 

 

빠르면 오늘중, 늦어도 내일중으로 배포 예정임을 알려드리며, 버전 업데이트가 되면 기존 버전은 사용할 수 없으니 업데이트 공지를 반드시 확인하고 업데이트 되어 배포 된 프로그램으로 교체 사용 하세요.

 

 

v0.985 변경 내용 (배포 완료) - 전달받지 못한 필드 테스터분이 계시면 Comment 남겨주세요.

 

- 뉴스 본문에 대한 검색 정확도 상향 되도록 수정.

 

- 제목, 키워드 뉴스 수신시 등록된 키워드의 내용이 아닐 경우 본문 조회가 안되는 구조적인 문제 수정.

 

- 수신된 뉴스가 키워드를 포함하고 있어도 소리 알람이 되지 않는 경우 수정.

 

- 제목, 제목 + 내용과 키워드 뉴스 제거 동시 선택시 등록된 키워드에 대해 정상적으로 제거되지 않는 문제가 수정.

 

- 공백 키워드 삽입 방지 기능 추가.

 

- 띄어쓰기가 포함된 키워드 삽입 방지 기능 추가.

 

- 좌측 폴딩시 창 크기의 최대 크기가 수정.

 

- 최소화 버튼 또는 최소화 버튼을 대체할 기능 추가.

좌측 상단의 시계 출력부를 클릭하면 TrayIcon으로 최소화 되도록 변경하였고 TrayIcon을 클릭하면 다시 활성화.

 

- 뉴스 내용 출력시 내용 첫줄에 제목을 출력하거나 제목 선택시 색상을 변경하는 등 제목과 내용의 연계성을 시각적으로 인지하기 쉽게 수정.

 

- 뉴스 제목 수신시 우측 현재가 출력은 제목 클릭시 조회하도록 수정.

(한분의 단독 의견이기에 자동조회가 필요하면 추후 업데이트시 자동/수동 선택 옵션을 추가 할 예정.)

 

- 등록된 키워드 더블 클릭시 삭제 기능 추가.

 

- 등록된 제목 더블 클릭시 삭제 기능 추가.

 

- 개장일 장중일때만 우측 현재가 화면 확장/축소 가능하게 변경.

 

 

작업을 위해 메모 된 것은 위 내용이 전부이며 누락된 부분이 있으면 Comment 남겨주세요.

 

 

추후 업데이트 계획중 하나로 본문 내용중 html tag가 포함된 경우에는 일부 tag에 대해 제거하여 가독성을 높이도록 할 예정입니다만 작업 시간 할애 여건에 따라 차기 업데이트가 될지 그 이후가 될지 장담할 수 없습니다.

(예, 이미지 링크-img src, 바로가기 하이퍼링크-a href)

 

 

필요성이 인정되나 현재 처리하기에는 시간적 여유가 부족하니 정리하였다가 추후 전달을 부탁드린 내용들도 본문 아래에 Comment 남겨주세요.

 

 

여러 채널을 통해 의견을 접수받다보니 누가 어떤 의견을 주셨는지 구분이 안되는 경우가 있어서 v.0.985 배포 이후 차기 업데이트시까지 모든 의견은 본문 아래에 Comment 남겨주세요.

 

 

여러 필드테스터 분들의 의견을 상호간에 비교, 공유 할 수 있도록 소통 채널을 한정할 필요가 있다고 생각됩니다.

 

 

글로써 표현하기 힘든 경우에는 그림이나 영상을 카카오톡이나 이메일로 전달 해주시고 필요시 필자에게 전화 연락 주세요.

 

 

 

필드 테스터 분들께서 다양한 의견을 주고 계시지만 보다 많은 사용 환경에서 문제점을 조기에 발견할 수 있도록 필드 테스터 추가 모집하겠습니다.

 

참여 희망자는 비밀댓글로 휴대전화 번호 남겨주세요. (꼭! 비밀댓글로 남겨주세요.)

 

 

본 프로그램은 Windows 7 에서 개발 및 테스트가 되었기에 해당 환경이 아닐시 정상 이용이 불가능할 수 있습니다.

 

 

 

Posted by 투자의神
시스템 성과 합산2017. 12. 1. 18:30

 

 

 

 

예상된 시나리오중 적은 수익의 경우가 나왔으니 다음 거래일에는 큰 손실을 맞을 차례인가 궁금하네요.

 

 

당분간은 바쁜 관계로 오늘도 짧게 적고 조만간 다시 시간적 여유를 가지게 되면 시장 이야기도 적겠습니다.

 

 

Posted by 투자의神
시스템 03호2017. 12. 1. 18:00

 

 

 

 

 

Posted by 투자의神
시스템 02호2017. 12. 1. 17:30

 

 

 

 

 

Posted by 투자의神
시스템 01호2017. 12. 1. 17:00

 

 

 

 

 

Posted by 투자의神
이런저런2017. 12. 1. 16:00

 

 

 

 

 

Posted by 투자의神
시스템 성과 합산2017. 11. 30. 19:30

 

 

 

 

오늘도 거래가 없군요.

 

 

이로써 12월물 옵션 만기일은 오늘로 2주가 남았으니 다음주에는 슬슬 거래를 시작하지 않을까 생각합니다.

 

 

첫 거래 재개일이 손실이거나 약수익후 그 다음날 손실이 날것만같은 예감이 드네요.

 

 

하루종일 바빠서 장 마감후에도 HTS를 잠시라도 보지 못했는데 한 며칠은 더 그럴것 같습니다.

 

 

일이 많은 관계로 간단히 적고 마무리 합니다.

 

 

Posted by 투자의神
시스템 03호2017. 11. 30. 19:00

 

 

 

 

 

Posted by 투자의神
시스템 02호2017. 11. 30. 18:30

 

 

 

 

 

Posted by 투자의神