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

 

 

KhOpenApiexcelTest_1.4_주식.xls

 

 

▲ 키움 투자증권 OpenAPI+용 VBA 샘플입니다.

 

▲ Microsoft Office Excel 이 설치되어 있어야 합니다.

 

 

 

Posted by 투자의神
증권사 API2017. 12. 11. 00:30

 

 

이베스트 투자증권 xingAPI의 가이드를 진행한 바 있습니다.

 

 

금번에는 키움 투자증권 OpenAPI+ 개발 가이드편 입니다.

 

 

키움 투자증권의 가이드가 PDF 파일의 형태로 잘 제공되고 있으므로 별도로 "가이드를 위한 가이드"는 진행하지 않습니다.

 

 

본 "키움 OpenAPI+ 개발가이드"에는 Microsoft Excel VBA에 대한 내용은 가이드에 포함되어 있지 않습니다.

 

 

Microsoft Excel VBA의 부분은 별도의 샘플을 등록 해놓을테니 참고 바랍니다.

 

 

kiwoom_openapi_plus_devguide_ver_1.1.pdf

 

 

 

Posted by 투자의神
증권사 API2017. 12. 6. 00:30

 

 

이베스트 투자증권에서 제공하는 "주식현재가및호가_실습교육용_연결체크" 입니다.

 

 

xingAPI Guide #1부터의 내용을 따라오면서 직접 실습 해보기 위해서는

 

1. 이베스트 투자증권 회원가입

 

2. 모의투자 신청 또는 비대면 계좌 개설

 

3. xingAPI 사용등록

 

위 3개는 기본적으로 해두셔야 하며

 

 

이외에 부가적으로 독자분들의 컴퓨터에 Microsoft Excel 이 설치되어 있어야 하며 Excel에서 Visual Basic 옵션이 활성화 되어 있어야 하는데 이 부분은 일전에 포스팅 했던 내용으로 대체할테니 아래의 링크를 확인 해주세요.

( http://systemtraders.tistory.com/183?category=723909 )

 

 

샘플을 별도로 살펴보지는 않겠고 첨부 파일로 등록 해둘테니 필요한분은 다운로드 받아서 천천히 살펴보기 바랍니다.

 

 

이해가 잘 안되는 부분에 대해서는 VBA 코드를 포함한 질문 내용을 Comment로 남겨주세요.

 

 

주식현재가및호가_실습교육용_연결체크.xlsm

 

 

 

Posted by 투자의神
증권사 API2017. 12. 5. 00:30

 

 

이베스트 투자증권에서 제공하는 "xingAPI 활용 교육 샘플의 VBA 버전 v.1.3" 입니다.

 

 

xingAPI Guide #1부터의 내용을 따라오면서 직접 실습 해보기 위해서는

 

1. 이베스트 투자증권 회원가입

 

2. 모의투자 신청 또는 비대면 계좌 개설

 

3. xingAPI 사용등록

 

위 3개는 기본적으로 해두셔야 하며

 

 

이외에 부가적으로 독자분들의 컴퓨터에 Microsoft Excel 이 설치되어 있어야 하며 Excel에서 Visual Basic 옵션이 활성화 되어 있어야 하는데 이 부분은 일전에 포스팅 했던 내용으로 대체할테니 아래의 링크를 확인 해주세요.

( http://systemtraders.tistory.com/183?category=723909 )

 

 

샘플을 별도로 살펴보지는 않겠고 첨부 파일로 등록 해둘테니 필요한분은 다운로드 받아서 천천히 살펴보기 바랍니다.

 

 

이해가 잘 안되는 부분에 대해서는 VBA 코드를 포함한 질문 내용을 Comment로 남겨주세요.

 

 

xingAPI활용교육샘플v1.3.xlsm

 

 

 

Posted by 투자의神
증권사 API2017. 12. 4. 01:00

 

 

지난 5편에서 조회TR을 이용하는 것에 대해 알아보았고 금번 6편에서는 실시간TR을 다루는것에 대해 알아보겠습니다.

 

 

 

 

4편에서는 위 이미지중 1~4번의 과정까지 알아봤고 5편에서는 5~10번의 과정을 조회TR을 이용하여 알아봤습니다.

 

6편인 본편에서는 위 이미지중 5~10번의 과정을 실시간TR을 이용하여 알아보겠습니다.

 

 

 

조회TR을 이용하는 것은 증권사 서버에 저장되어 있는 데이터를 조회 하는 것이며 이러한 데이터들은 대체로 용량이 크지 않고 데이터의 수량이 많지 않기 때문에 일정기간 동안의 데이터는 증권사 서버에 저장되어 있습니다.

 

 

실시간TR을 이용하여 접근하는 데이터들은 대체로 용량이 크고 수량이 많기 때문에 증권사 서버에 저장되지 않는 경우가 대부분입니다.

 

 

두 TR의 특성중 또 다른점은 조회TR은 원하는 데이터를 형식에 맞게 조회 요청하면 원하는 데이터가 1회 전송됨으로써 모든 처리가 끝나지만 실시간TR은 데이터 전송 요청을 하면 요청 시점 이후에 주가가 바뀌었거나 거래량이 바뀌는등 데이터가 변경되면 변경된 데이터를 증권사 서버가 알아서 전송해주게 되며 사용자가 별도로 "데이터 전송 요청의 해제"를 하기 전까지는 증권사 서버가 계속 데이터를 보내줍니다.

 

 

조회TR은 과거의 특정 데이터를 수신받는데 유리한 구조이고 실시간TR은 언제 어떻게 바뀔지 모르는 데이터를 사용자가 매번 증권사 서버에게 "데이터 바뀌었니? 바뀌었으면 보내줘!"라고 요청하지 않아도 증권사 서버가 알아서 처리 해주므로 실시간 데이터 처리에 유리한 구조일 수 밖에 없습니다.

 

 

다만 실시간TR은 "요청 시점 이후"에 데이터가 변경되면 전송해 주기 때문에 요청 시점의 데이터는 전송해주지 않고 변경된 데이터가 없으면 전송해주는 데이터도 없습니다.

 

 

한 예로 필자가 개발해서 배포중인 뉴스 검색기 우측 현재가 조회 화면을 구성함에 있어 조회TR을 이용하면 TR조회제한(증권사 서버는 서버 부하를 낮추기 위해 조회TR의 단위 시간당 이용 가능 빈도를 회원 등급별로 차등 적용하고 있음)이 적용되기 때문에 실시간TR을 이용하여 실시간 시세를 받아서 처리하고 뉴스 본문은 실시간TR이 없고 조회TR을 이용해서 정보를 취할 수 있는 구조이기 때문에 각 사용자별 등급이 다름을 고려하여 1초당 1회에 한해 본문을 조회 하도록 설정하고 있습니다.

(사용자 등급이 높다면 VIP서버에 접속하여 무제한 또는 무제한에 가까운 TR조회제한을 적용받을 수 있음)

 

 

본격적으로 오늘 다룰 내용으로 넘어가겠습니다.

 

 

로그인은 XASession 객체를, 조회TR은 XAQuery 객체를 사용했었는데 실시간TR은 XAReal 객체를 사용하며 사용 방법은 XAQuery 객체의 사용 방법과 유사하기에 어렵지 않습니다.

 

 

S3_ 라는 실시간TR을 이용하여 예제를 보여드릴텐데 이 실시간TR을 이용하면 코스피 체결 데이터를 수신 받을 수 있습니다.

 

 

S3_의 구조를 한번 살펴보겠습니다.

 

 

 

▲ 메모장 등의 에디터로 S3_.res 파일을 열어보면 위와 같이 세부적인 내용을 보여줍니다.

 

 

 

▲ DevCenter를 통해 S3_를 보면 위와 같이 좀 더 보기 쉽게 표현되어 있습니다.

 

 

사용자인 독자분들이 하셔야 할 것은 XAReal 객체를 만들고 S3_.res 가 어디에 있는지 찾아주고 InBlock.shcode에 값을 입력하여 증권사 서버로 전달한 후 서버에서 데이터를 보내주면 받는게 전부입니다.

 

 

참 쉽지요?

 

 

코드부로 넘어 가보겠습니다.

 

 

 

  Dim WithEvents XAReal_S3_As XAReal Set XAReal_S3_

  = CreateObject("XA_DataSet.XAReal")

 

 

▲ S3_는 코스피 체결 데이터를 수신 받을 수 있는 실시간TR의 명칭입니다.

 

▲ XAReal 선언 및 생성하는 코드입니다.

 

▲ 두 줄이 아니라 한줄로 구성되어 있으며 블로그 화면 너비가 좁은 관계로 '=' 부분에서 개행처리 하였습니다.

 

 

 

 

  XAReal_S3_.ResFileName = "S3_.res")

 

 

▲ S3_.res 등록하는 코드입니다.

 

 

 

 

  XAReal_S3_.SetFieldData("InBlock","shcode", "005930") 

 

 

▲ S3_ 형식에 맞게 입력하는 코드이며 005930은 삼성전자의 종목코드로써 예를 위해 임의로 입력한 값입니다.

 

 

 

 

  XAReal_S3_.AdviseRealData()

 

 

▲ 조회TR에서는 Request 함수를 이용하여 서버에 전달하였는데 실시간TR은 AdviseRealData 함수를 이용합니다.

 

▲ 만약 여러 종목의 데이터를 동시에 받고 싶다면 하나의 종목의 값을 입력하고 서버에 전송한 뒤 동일 과정을 반복하면 됩니다.

  

 

 

 

  Sub XAReal_S3_ReceiveRealData(ByVal szTrCode)

      XAReal_S3_.GetFieldData("OutBlock","price")

  End Sub

 

 

▲ 서버로부터 새로운 데이터를 수신 받는 부분입니다.조회TR에서는 Request 함수를 이용하여 서버에 전달하였는데 실시간TR은 AdviseRealData 함수를 이용합니다.

 

▲ 만약 여러 종목의 데이터를 동시에 받고 싶다면 하나의 종목의 값을 입력하고 서버에 전송한 뒤 동일 과정을 반복하면 됩니다.

 

 

 

 

  XAReal_S3_.UnadviseRealData()

 

 

▲ 더 이상 실시간 데이터를 받고 싶지 않을때 서버에 등록한 "실시간 데이터 전송 요청"을 해제하기 위한 코드입니다.

 

 

 

 

  XAReal_S3_.UnadviseRealDataWithKey("005930")

 

 

▲ 더 이상 실시간 데이터를 받고 싶지 않은 종목을 특정할 경우에는 UnadviseRealDataWithKey 함수를 이용합니다.

 

 

 

 

  Dim WithEvents XAReal_S3_As XAReal Set XAReal_S3_
  = CreateObject("XA_DataSet.XAReal")

 

  XAReal_S3_.ResFileName = "S3_.res")

 

  XAReal_S3_.SetFieldData("InBlock","shcode", "005930")

 

  XAReal_S3_.AdviseRealData()

 

  Sub XAReal_S3_ReceiveRealData(ByVal szTrCode)

      XAReal_S3_.GetFieldData("OutBlock","price")

  End Sub

 

 

▲ 전체 코드를 정리 해보면 위와 같습니다.

 

 

이로써 독자분들은 이베스트 투자증권 서버에 로그인하고 과거 데이터를 조회하거나 새로 발생할 데이터를 조회하는 방법까지 VBA 예제 코드와 함께 모두 알아 보았습니다.

 

 

얼마나 빠르고 정확한 처리를 할 것인가는 사용자별로 필요로 하는 정도에 따라 다를 것이고 그에 맞게 VBA를 사용하거나 C계열 혹은 JAVA, Python 등의 여러 프로그래밍 언어를 선택하면 됩니다.

 

 

겨우 몇편으로 알아본게 전부이고 코드가 몇줄 되지 않지만 VBA만 이용하더라도 증권사 서버에 로그인하여 계좌 정보를 조회하고 현재가 정보 등을 수신하여 주문을 넣고 실시간 데이터를 기반으로 차트를 그리거나 연산을 하는 등 자동매매 프로그램을 구현 해볼 수 있습니다.

 

 

처음부터 고급의 프로그래밍 언어를 선택하여 이해하기도 어렵고 진도는 안나가는 상황을 맞이하지 말고 우선은 개념을 조금 더 잡고 다양한 시도들을 손쉽고 빠르게 해볼 수 있도록 VBA로 시작하고 한계가 느껴지고 더욱 빠른 처리가 필요할 때에만 상위의 프로그래밍 언어로 넘어가는편이 좋습니다.

(필자도 동일한 과정을 거쳤습니다.)

 

 

이해가 안되는 부분은 Comment 남겨 주세요.

 

 

 

Posted by 투자의神
증권사 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 투자의神
증권사 API2017. 11. 26. 08:00

 

 

지난 1~3편을 통해 이베스트투자증권(이하 이베스트) xingAPI의 각 개념들과 구성 등에 대해 알아보고 Microsoft Excel에서 VBA를 사용할 수 있도록 이베스트에서 제공하는 API 모듈을 '참조'하는 방법까지 진행했으니 이제 이베스트 서버에 접속하고 로그인을 하는 등의 실전편에 대해 기술하겠습니다.

 

 

지난 시간에 알려드린 내용중 일부를 다시 가져오겠습니다.

 

 

 

 

서두에 말씀드린것의 전체 처리 과정은 아래와 같습니다.

 

 

 

 

1. 참조한 내용을 가져다 쓰겠다고 프로그램에 알려주는 부분입니다.

 

2. XaSession 은 서버연결, 로그인등에 필요한 것이므로 이것을 하겠다고 프로그램에 알려주는 부분입니다.

 

3. 실제 이베스트 서버에 연결하는 과정입니다.

 

4. 실제 이베스트 서버에 연결한 후 로그인을 하는 과정입니다.

 

5. XaQuery 는 이베스트 서버에 저장되어 있는 내용을 조회하기 위해 프로그램에 알려주는 부분입니다.

 

6. Res 등록은 "C:/eBEST/xingAPI/Res" 경로에 저장되어 있는 여러 TR(각 TR은 맡은 기능이 제각각이며 보통 하나의 프로그램을 만들게 되면 적게는 몇개에서 많게는 수십개 이상의 TR을 사용함)들을 사용하겠다고 프로그램에 알려주는 부분입니다.

 

7. 6번에서 미리 등록한 TR중 (복수개 등록 가능) 사용할 TR의 입력 형식에 맞게 값을 입력하는 부분입니다.

 

8. 6번에서 등록하고 7번에서 등록한 내용을 실제 이베스트 서버로 전달하는 과정입니다.

 

9. 조회 요청이 성공하면 이베스트 서버에서 데이터가 내려옵니다.

 

10. 원하는 데이터를 얻었고 이를 프로그램 내에서 다양하게 활용할 수 있습니다.

 

 

위 과정을 글과 그림으로 표현했지만 컴퓨터 프로그램은 이를 인지하지 못하기 때문에 프로그램 코드를 입력해줘야 정상 작동하므로 다음으로는 코드로써 설명하겠습니다.

 

 

2번 XaSession 을 선언하는 부분을 VBA 코드로 적어보면 아래와 같습니다.

 

 

 

  Dim WithEvents XASession_Excel As XASession

 

  Set XASession_Excel = CreateObject("XA_Session.XASession")

 

 

 

API 구성 파일중 XA_Session.dll 에 등록되어 있는 XASession 을 사용할건데 현재 프로그램 코드에서는 XASession_Excel 이라는 이름으로 쓰겠다고 알려주는 부분이며 "XASession_Excel" 은 이 프로그램 내에서 사용자가 이름을 다른것으로 얼마든지 변경할 수 있습니다.

 

 

3번 서버에 연결하는 과정은 아래와 같습니다.

 

 

  bConnect = XASession_Excel.ConnectServer("hts.ebestsec.co.kr", 20001) 

 

 

"bConnect"는 이 프로그램 내에서 사용자가 이름을 다른것으로 변경할 수 있습니다.

(이하 사용자가 변경할 수 있는 이름에 대해서는 (변수)라고 단순 기입하여 대체합니다.)

 

"hts.ebestsec.co.kr"은 이베스트 서버의 도메인 주소인데 독자분들이 다음이나 네이버에 접속할 때 daum.net이나 naver.com 이라고 입력하는 인터넷 도메인 주소이며 "20001"은 해당 도메인의 20001번지에 연결하겠다는 뜻으로 이해하면 됩니다.

 

 

4번 로그인하는 과정은 아래와 같습니다.

 

 

  bLogic = XASession_Excel.Login(아이디, 접속비밀번호, 공인인증비밀번호, 0, False)

 

 

bLogin(변수),

이베스트에 회원가입할 당시의 아이디, 접속비밀번호, 공인인증비밀번호를 적고 0, False는 손대지 말고 그대로 두세요.

 

입력이 완성된 코드의 예제는,

 

bLogic = XASession_Excel.Login(cool, coolman, coolman1234 0, False)

 

의 형태가 됩니다.

 

 

로그인이 성공했는지 실패했는지 알기 위한 방법이 여러가지가 있겠지만 메시지 박스로 알림을 하겠다면 코드는 아래와 같습니다.

 

 

  Private Sub XASession_Excel_Login(ByVal szCode As String, ByVal szMsg As String)
      if szCode = “0000” then MsgBox “로그인 성공”
      else MsgBox “”로그인 실패 : “ & “[" & szCode & "] " & szMsg
      end if
  End Sub

 

 

만약 로그인이 성공하면 "로그인 성공"이라고 출력하게 되며, 실패한 경우에는 "로그인 실패 : "와 더불어 로그인에 실패하게 된 에러 코드를 같이 출력하여 어떤 문제가 있는지 확인할 수 있습니다.

 

 

위 과정까지 전부 하게 되면 아래와 같은 코드가 완성 됩니다.

 

 

위 이미지는 이베스트에 사전 허락을 받고 증권사에서 제공하는 샘플 및 가이드에서 가져온 것인데 이베스트 투자증권이 과거에는 이트레이드 증권 이었고 당시 제작된 것이라 접속 주소가 etrade.co.kr 로 되어 있으나 현재는 ebestsec.co.kr 이 맞는 주소입니다.

(이외 이베스트에서 가져온 자료는 사전 승낙을 받고 사용하고 있음을 알립니다.)

 

 

demo.ebestsec.co.kr 는 모의서버입니다.

 

 

hts.ebestsec.co.kr 는 HTS서버입니다.

 

 

초보자의 경우 복잡하게 보이고 이해하기 어려울 수 있는 부분이 있으나 하나씩 순서대로 따라오다보면 어느순간 이해가 되게 될 것입니다.

 

 

모든것을 다 이해하려고 할 필요 없다는 뜻이지요.

 

 

이번편에서는 로그인하는 과정까지만 하고 다음편에서 5번부터 다시 이어 가겠습니다.

 

 

<자료 출처 : 이베스트투자증권 (http://ebestsec.co.kr)>

 

 

Posted by 투자의神
증권사 API2017. 11. 25. 07:00

 

 

xingAPI 가이드를 위한 가이드 세번째 편입니다.

 

 

독자님들은 지난 두번째 편을 보고 난 뒤에 어떤 프로그래밍 언어를 선택해서 개발을 진행할 것인지 결정하셨나요?

 

 

xingAPI에서는 다양한 언어들을 지원하고 있지만 그 선택은 맹목적으로 편리함만을 추구하거나 빠른속도만을 고집할 이유가 전혀 없습니다.

 

 

프로그래밍 언어의 선택에서 중요한 두가지 요소를 알려드리겠습니다.

○. 원하는 결과물(프로그램)을 최대한 빨리 만들어 볼 수 있는 개발의 생산성

○. 어떤 목적으로 프로그램을 만들것인가의 기준

     (ex. 단순한 매매, 시세데이터 수신, 복잡한 매매, 시뮬레이터 구동 등)

 

 

예로 든 내용들을 기준으로 설명 해드리겠습니다.

 

1. 단순한 매매

: Microsoft Office Excel VBA 만으로 충분히 가능합니다.

 

2. 시세데이터 수신

: Microsoft Office Excel VBA로 가능하지만 Excel 자체가 빠른 처리를 요하는 프로그램이 아니며 메모리 문제로 사용이 불가능한 상태가 될 수 있기에 VBA는 제외하는편이 좋습니다. (이외 언어로 충분히 가능)

 

3. 복잡한 매매

: 2번과 마찬가지입니다.

 

4. 시뮬레이터 구동

: 2번과 마찬가지입니다.

 

어떤 프로그램이든 VBA로 구동하게 되면 Excel (엑셀) 프로그램이 항상 활성화 상태여야 합니다. (전자동 시스템)

 

 

모든면에서라고 할 수는 없겠지만 대체적으로 속도가 빠를수록 프로그래밍 언어를 학습하는데 소요되는 시간은 반비례하게 길어집니다. (예로, 프로그래밍에 대해 아무것도 모르는 사람이 Visual C++ 로 개발하려면 우선 학습에만 최소 1년 이상 소요)

 

 

프로그래밍 언어를 선택하고 어떤 버전의 xingAPI (COM, DLL 중 택일)를 사용할 것인지 결정했다면 이제 본격적으로 시작 해보겠습니다.

 

 

xingAPI를 다운로드 해야 하는데 이 부분은 아래 링크를 참조하여 다운로드 및 설치 하시기 바랍니다.

http://systemtraders.tistory.com/176?category=726546

 

 

xingAPI (증권사 데이터 송수신용 통신 모듈 프로그램)의 내부를 잠시 살펴 보겠습니다.

 

 

* 이후 모든 내용은 이베스트투자증권에서 제공하는 샘플을 설명하기 위해 VBA + COM버전을 기준으로 설명합니다.

 

 

 

 

 

갑자기 어려워 보이는 용어가 튀어나와서 놀래셨나요?

 

 

깊이 알지 못하더라도 크게 상관없는 내용이고 내부적으로 저런 객체들을 제공하며 사용자는 저 범위 내에서 사용할 수 있다고 이해하면 됩니다.

 

 

분명 COM 버전을 선택했는데 파일명이 *.dll 이지요?

xingAPI는 COM버전이라 하더라도 DLL을 사용하게 되어 있습니다.

 

 

DLL은 Dynamic Link Library의 약자로써 쉽게 표현해서 xingAPI에서 제공하는 통신 모듈 프로그램 코드가 저 dll 파일에 들어있다고 이해하면 되고 실제로도 그렇습니다.

 

 

 

 

 

 

이 그림을 보면 필자의 글이 더욱 잘 이해되리라 믿습니다.

 

 

위 *.dll 파일을 독자분들의 프로그램과 연결하여 무언가 원하는 작업을 처리 할 수 있는데 우선 연결하는 과정이 필요합니다.

 

 

우선 엑셀을 구동하여 주시고요.

 

 

 

 

상단 메뉴중 "개발 도구"를 클릭하고 하위 메뉴에서 "Visual Basic" 를 클릭합니다.

 

 

눈치 빠른분들은 VBA가 Visual Basic과도 연관성이 있구나 하실겁니다.

 

 

만약 해당 메뉴가 없다면" Excel 옵션"에서 메뉴를 추가할 수 있습니다.

 

 

 

 

위에서 "Visual Basic"를 클릭하면 별도의 창이 뜨게 될텐데 "도구" > "참조"를 클릭하여 xingAPI와 Excel을 연결하는 첫번째 작업을 할 수 있습니다.

 

 

 

 

 

위 링크(http://systemtraders.tistory.com/176?category=726546)의 내용대로 잘 따라 하였다면 참조 목록에 뜨는 내용중 "Xing DataSet Lib", "Xing Session Lib"를 선택할 수 있습니다.

 

 

위 내용들중 잘 안되는 부분이 있으면 Comment 남겨주세요.

확인하는대로 Reply 하겠습니다.

 

 

다음 시간에 또 뵙지요.

 

 

<자료 출처 : 이베스트투자증권 (http://ebestsec.co.kr)>

 

 

Posted by 투자의神
증권사 API2017. 11. 23. 15:30

 

 

xingAPI 가이드를 위한 가이드 두번째편입니다.

(1편에서 너무 빨리 끝냈으니 진도 좀 나가겠습니다.)

 

 

아래는 이베스트투자증권 홈페이지의 xingAPI 페이지에서 안내하고 있는 내용입니다.

 

 

 

xingAPI는 그 자체로 무언가를 할 수 없고 증권사와 독자님들이 만든 프로그램의 사이에서 데이터를 주거니 받거니 할 수 있게 해주는 일종의 통신모듈입니다.

 

 

 

 

 

각자의 프로그램에서 증권사 서버로 언제 어떤 데이터를 요청할 것인지를 증권사 서버에 전달하는 역할을 담당하며 내부 구조는 다소 복잡해보이지만 사실 제대로 보면 정말 복잡하긴 합니다.

 

 

xingAPI 그 자체로는 YesTrader나 TradeStation 등의 툴과 달리 시각적으로 뭔가 보여지는 매매 프로그램이 아니지만 xingAPI를 이용해서 어떤 프로그램을 만드냐에 따라서는 앞서 언급한 프로그램들보다 백만배 이상 유용하게 사용할 수 있고 빠릅니다.

 

 

xingAPI로 증권사에 데이터를 요청하는 창구(도메인 주소)는 hts.ebestsec.co.kr 이기 때문에 도메인 주소에서도 알 수 있다시피 일반적으로 HTS를 통해 증권사에 접속할 때 사용하는 것과 동일하므로 제공되는 데이터도 동일하다고 보면 됩니다. (모의서버의 도메인 주소는 demo.ebestsec.co.kr 입니다.)

 

 

 

 

xingAPI는 크게 2가지 버전으로 나뉘어져 있습니다.

 

 

일반적으로 사용성이 편리하나 속도가 늦다는 COM 버전과 속도는 빠르나 개발하기가 어렵다는 DLL 버전인데요.

 

 

COM은 Component Object Model이라고 Microsoft에서 내놓은 일종의 프로그래밍 표준이며 COM을 지원하는 모든 프로그래밍 언어에서 각 프로세스간 통신 송수신과 동적 오브젝트 생성이 가능합니다.

 

 

위 열거된 프로그래밍 언어중 필자 기준에는 Delphi, C#까지 빠른 범위에 포함된다고 생각됩니다.

 

 

가장 최악은 엑셀VBA이고요.

 

 

프로그래밍 언어를 상대적으로 쉽게 배우고 얼른 써먹으려면 C#, Delphi, Python 쯤에서 고르는게 가장 이상적일 것 같고 C에 대해 깊은 이해도가 있다면 고민할 것도 없이 C++이 낫습니다. (대신 작업량은 필자가 사용하는 C#에 비해 엄청나게 늘어날지도 모릅니다.)

 

 

xingAPI + 독자 개발 프로그램을 통해 시스템 트레이딩이라는 것을 하게 될텐데요.

 

 

시스템 트레이딩이란, "사람의 자의적 판단이나 편견을 배제하고 시간과 공간에 상관없이 일정한 매매 규칙을 일관되게 매매에 적용하는 방법"입니다.

 

 

API 그 자체로는 통신 프로그램에 불과하기 때문에 API = 시스템 트레이딩의 공식은 성립하지 않습니다.

 

 

얼마전 필자는 약 10일간 여행을 다녀왔는데요.

 

 

사무실의 제 자리는 비어있었지만 미리 만들어둔 프로그램이 알아서 거래를 해서 수익을 냈습니다.

 

 

아마도 시스템 트레이딩의 최장점을 손꼽으라면 위의 예와 더불어 급등, 급락의 공포스러운 흐름에서도 감정적으로 몰입하지 않아도 되고 전혀 무신경하게 내버려두어도 된다는 점이리라 생각됩니다.

 

 

또 실제 거래는 손으로 하더라도 "이렇게 이렇게 하면 돈이 벌어질 것 같은데?"라는 아이디어를 검증하는 과정에서도 시스템이 매우 유용하게 사용되어집니다.

 

 

필자는 최근 수년간의 데이터를 모조리 집어넣고 다양한 시뮬레이션을 진행하고 있는데 이 연산 규모는 사람이 도저히 할 수 없을 규모입니다.

 

 

하루에만 1천만건 이상의 데이터가, 1년이면 25억건 이상의 데이터가, 4년이면 100억건의 데이터가 넘게 쌓이는데 이것은 사람이 하나하나 일일이 처리 할 수 없다고 보는게 맞겠죠.

 

 

시스템을 활용한 시뮬레이션 그리고 시스템 트레이딩이라는 것이 활용하기에 따라 상당히 유용한데 잘 활용하기까지의 과정이 다소 험난할 수 있다는 점 알아두시고, 이번편에서는 이 정도의 설명으로 마무리하고 다음편에서는 조금 더 깊이 들어가보도록 하겠습니다.

 

 

<자료 출처 : 이베스트투자증권 (http://ebestsec.co.kr)>

 

 

Posted by 투자의神
증권사 API2017. 11. 22. 00:30

 

 

이베스트투자증권측에 사전 승낙을 받고 자료를 가져왔음을 알려 드립니다.

 

 

과거 증권사 객장으로 출근하는 사람들이 많이 있었습니다.

 

 

시간이 흐르고 흘러, 인터넷이 널리 보급되고 속도 또한 빨라진덕에 HTS (Home Trading System)를 사용하기 시작하였고 DDE라는 녀석이 툭 튀어나오고 API라는 녀석도 툭 튀어나왔으며 이제는 MTS (Mobile Trading System)가 나온뒤에 알고리즘 시스템이다 인공지능 시스템이다 뭔가 자꾸 새로운게 나오는데 여전히 제자리 걸음만 하고 계신가요?

 

 

증권사 객장에서 주문하던 시절에는 1~2초 혹은 몇분쯤은 그리 중요한 시대가 아니었지만 정보의 홍수 시대에 살고 있는 지금은 필자와 같이 API를 이용하는 사람에게는 0.1초의 지연(Latency)조차 용납하기 어려운 초스피드의 시대로 격변했습니다.

 

 

HTS로 매매하는분들이야 여전히 손에 땀을 흘리며 마우스를 쥐고 계시겠고 그분들에게 조차도 역시나 시간은 비용이며 기회이기도 합니다.

 

 

촌각을 다투는 이 시대를 살면서 API라는 것 한번쯤은 이용 해봐야 되지 않겠습니까?

 

 

지난번에 예고 한대로 이베스트투자증권에서 제공하는 API 모듈의 가이드를 기본교재로 삼아 "가이드를 가이드" 해보겠습니다.

 

 

주의.

수익 로직이 없는분은 본 가이드를 볼 필요가 전혀 없으며 기존에 완성된 수익 로직을 이용하여 손매매로 수익을 내고 계신분들에게만 필요한 내용입니다.

 

 

아래는 이베스트투자증권 홈페이지에서 제공하는 내용이며 본 글은 첫 회이므로 가볍게 시작해보겠습니다.

 

 

 

▲ 위 내용에 따르면 xingAPI는 편리하고 빠르며 최고이다! 라고 하고 있네요.

최근 키움투자증권등 몇몇 증권사의 API가 상당히 많은 개선을 거쳐 제법 괜찮은 수준인데 개인적으로는 키움보다 이베스트의 것이 보기 깔끔한것 같습니다.

 

▲ xingAPI를 이용하면 언제라도 자신의 로직을 대상으로 시뮬레이션 해볼 수 있습니다.

(XingACE. 필자는 사용하지 않음)

 

▲ 예제는 Microsoft Office Excel 을 기반으로 설명하고 있으며 VBA라는 프로그래밍 언어를 사용하게 될텐데 필자 또한 동일한 환경에 맞춰 설명할 예정이며 실제로 사용하고 있는 환경은 COM 버전과 C#의 조합입니다.

 

▲ VBA의 환경은 C/C++/C#/Delphi/Python 등의 프로그래밍 언어에 비해 속도가 심각하게 느린 단점을 안고 있으나 매매 로직이 아주 간단하고 빈번한 매매를 하지 않는다면 충분히 잘 활용하여 자동주문 시스템을 갖출 수 있습니다.

 

▲ xingAPI의 보조도구인 DevCenter에 대해서는 이전에 포스티한 적이 있기에 본 가이드에서 생략합니다.

 

▲ xingAPI의 보조도구인 xingACE는 필자가 사용해보지 않았고 사용해본 사람들의 얘기를 들어보면 썩 유용한것 같지 않아 본 가이드에서 생략합니다.

 

▲ 본 가이드는 VBA강좌가 아니므로 문법적인 부분은 가급적 다루지 않을 예정이므로 VBA에 익숙치 않은분들은 인터넷을 통해 강좌를 찾아보셔야 하며 프로그래밍 언어를 다뤄보지 않은분이라면 VBA에 익숙해지기까지 짧게는 며칠에서 길게는 1개월쯤 걸릴 것으로 생각합니다.

(필자의 경우에는 프로그래밍 언어를 오래전에 조금이나마 다뤄 봤기 때문에 2~3일쯤 소요 된 것으로 기억됩니다.)

 

 

앞으로 어떤 내용들을 포함/제거하여 다룰지 대략 설명이 되었으리라 생각됩니다.

 

 

다음편에서 뵙겠습니다.

 

 

<자료 출처 : 이베스트투자증권 (http://ebestsec.co.kr)>

 

 

Posted by 투자의神