이트레이드 API 사용해보기
준비물
TR Header Files (2010.03.19) - Header(2010.03.19)[0].zip
< t0431 >
(1) t0431OutBlock1.price 의 크기 수정(2010.03.11)
- 6.2 -> 9.2
< t0433 >
(1) Attribute 사용이라고 선언되어 있으나 현실적으로는 Attribute를 사용하고 있지 않음
< 유가증권 주문번호 10자리 증가 >
(1) 4월 2일 반영예정인 TR들. 자세한 내용은 공지를 확인하여주시기 바랍니다.
RES Files (2010.04.09) - Res(2010.04.09).zip
RES File 2010.04.09 버전입니다.
DLL 버전 Program Files (2010.04.09) - Programs(2010.04.09).zip
DLL 버전 Program File 2010.04.09 버전입니다.
<변경된 내용>
1. 초당 조회건수 제한을 TR별로 나누었습니다.
주문인 경우 초당 10번까지 가능합니다.
2. ETK_Request() 함수가 추가되었습니다.
- 장점
1. RequestData, RequestDataEx 두개의 함수를 통합하여 Header 에 상관없이 사용이 가능
2. 계좌의 위치를 요구하지 않음
3. Header Type을 요구하지 않음
4. Header Type이 B 일 경우 서비스 코드를 요구하지 않음
5. TR에 따라 암호화, 공인인증 등을 자동으로 설정
- 반환값 : Request ID
- 파라미터
hWnd : Window Handle
szTrCode : TR Code
lpData : Data Pointer
nDataSize : Data Size
bNext : 첫 조회시 0, 다음조회시 0이 아닌 값
pszNextKey : 다음조회키
nTimeOut : Time Out 시간
COM 버전 Program Files (2010.04.12) - COM(2010.04.12).zip
COM 버전 Program File 2010.04.12 버전입니다.
[변경내용]
<2010.04.12>
- XingAPI DLL 파일을 찾는 위치가 BIN 폴더에서 COM 파일이 있는 폴더로 변경
<2010.04.09>
- 신규 오픈
[파일리스트]
XA_DataSet.dll - ATL 파일
XA_Session.dll - ATL 파일
XA_Common.dll - DLL 파일
reg.bat - XA_DataSet.dll 과 XA_Session.dll 을 윈도우에 등록하는 배치파일
unreg.bat - 윈도우에 등록된 XA_DataSet.dll 과 XA_Session.dll 을 등록해재하는 배치파일
XingAPI DLL버전 관련 파일들
[주의]
ATL 파일은 사용하기 전에 윈도우에 등록해주어야 합니다.
등록 방법 : regsvr32 파일명
API 소개
X-ing API란?
- DLL(Dynamic Link Library) 형태로 제공되어지는 API(Application Programming Interface) 입니다.
- X-ing 서버와 데이터를 주고 받을 수 있는 Interface를 제공합니다.
- 체결/잔고 등의 계좌정보와 시세/시황 등의 투자정보 데이터를 제공합니다.
- 20개 이하(20여개의 데이터관리 함수 제외)의 API를 제공하며 10개 이하의 API 사용으로 X-ing 에서 제공하는 대부분의 화면을 개발할 수 있습니다.
- 요청 당시의 데이터를 전송해주는 조회 데이터 TR과 요청이후부터 데이터가 변경될때마다 전송해주는 실시간 데이터 TR, 두가지의 데이터 TR 조회로 X-ing 에서 제공하는 대부분의 화면개발이 가능합니다.
- Visual C++ 6.0 으로 제작되었으며 윈도우즈 프로그래밍이 가능한 모든 언어를 지원하기 위해 Regular DLL 로 제작되었기 때문에 Visual C++ 뿐만 아니라 Visual Basic, Delphi, C# 등으로도 개발이 가능합니다.
X-ing API 관련파일
- X-ing API 관련 파일
- XingAPI.dll
- Microsoft MFC 관련 파일
- MFC42.dll
- MSVCRT.dll
- 암호화 관련 파일
- XecureS.dll
- 공인인증 관련 파일
- SKComdCM.dll
- SKComdEM.dll
- SKComdIF.dll
- SKComdSC.dll
- SKComdIC.dll
이 파일들은 프로그램 실행시 실행파일과 같은 폴더에 존재하여야 합니다.
프로그램 흐름도
로그인 처리 Diagram
- [로그인과정]
- 1. 로그인 함수(ETK_Login()) 호출
- 2. 로그인 인증 성공/실패는 로그인 호출시에 등록한 윈도우로 메시지(XM_LOGIN) 전송
- 3. 메시지의 wParam의 값이 “0000” 이면 성공, 그 외에는 실패
프로그램 개요
- TR이란?
- Transaction의 약자로 서버로부터 데이터를 얻기 위해 요청하고 데이터를 받는 일련의 행동을 일컫는다.
- TR은 조회TR과 실시간TR, 2가지가 존재한다. - 조회TR과 실시간TR 을 가지고 서버로부터 트레이딩에 관련된 모든 데이터를 받을 수 있다.
- 조회TR : 서버로 데이터 요청 당시의 데이터를 전송
- 실시간TR : 서버로 데이터 요청(ETK_Advise()) 이후에 데이터가 변경될때마다 데이터를 전송하며 데이터 요청종료(ETK_Unadvise())를 하면 데이터 전송을 멈춘다.
- 실시간TR은 요청 당시의 데이터를 전송해주지 않으므로 시세등 실시간으로 변하는 데이터를 받기 위해서는 조회TR을 요청하여 당시의 데이터를 받은 이후에 실시간TR을 요청하여 실시간 데이터를 받아야 한다.
데이터 처리 Diagram
- 1. 조회TR 요청(ETK_RequestData(), ETK_RequestDataEx())
- 2. 조회TR에 대한 응답 : 조회TR 요청시 등록한 윈도우로 XM_RECEIVE_DATA 메시지 전송
- 3. 조회 데이터 처리
- 4. 실시간 데이터가 필요하면 실시간 등록 이후에 사용하며 사용이 완료된 이후에 실시간 해제 호출
- 5. 실시간 데이터 등록은 원할때에 해도 되지만 조회 Data를 받은 이후에 하는 것을 추천
- 조회 TR은 서버에 데이터를 요청했을때 현재 데이터를 전송한다.
- 요청하여 데이터를 전송한 이후에 데이터가 변경이 되었을 경우 재전송이 이루어지지 않는다.
- 여러 TR을 하나의 윈도우에서 사용하는 경우 데이터를 요청했을때 획득하는 Request ID로 구별한다.
- Data를 받은 이후에 상황별로 데이터를 해제해주서야 한다.
- Data는 Data -> Message -> Release 순으로 오게 된다.
- System Error는 Data 처리 이전에 System 문제로 인하여 Data 처리가 불가능할 경우에 발생하며 이 경우엔 Data/Message/Release 가 전송되지 않는다.
조회성TR 처리 Diagram
1. 조회성 TR 전송 : Request ID 획득
2. 조회성 TR 수신 : 조회성TR 전송시 등록한 윈도우로 XM_RECEIVE_DATA 메시지 전송
WPARAM | 내용 | 설명 |
---|---|---|
1 | Data | - 요청한 Data를 전송 - Data가 없거나 에러가 발생한 경우 수신되지 않을 수 있음 |
2 | Message | - Data 처리에 대한 Message - Data 처리에 성공을 해도 실패를 해도 Message는 발생한다. - Message Data를 처리하고 더이상 사용하지 않을 경우 ETK_ReleaseMessageData()를 호출하여 Message를 해제하여야 한다. |
3 | System Error | - Data 처리 이전에 System 문제로 인한 Error가 발생할 경우에 전송 - Message Data를 처리하고 더이상 사용하지 않을 경우 ETK_ReleaseMessageData()를 호출하여 Message를 해제하여야 한다. - System Error이 발생할 경우 Release가 전송되지 않으며 ETK_ReleaseMessageData()에서 자동으로 Request ID를 해제해준다. |
4 | Release | - Data 처리가 완료된 경우에 전송 - Request ID를 해제하기 위해 ETK_ReleaseRequestData()를 호출하여야 한다. |
- Request ID란?
- 서버에 데이터를 전송하게 되면 부여받게 되는 ID로 서버로부터 데이터를 받을때 ID 값을 같이 받게 되므로 전송한 값에 대한 수신값을 찾을 수 있다.
- Request ID는 X-ing API에서 관리하므로 수신이 완료가 되면 해제해주서야 한다.
- Request ID는 0~255사이의 값을 사용하며 해제하지 않으면 255개의 전송이 이루어진 이후에는 전송이 불가능하다.
- 서버에 데이터를 요청한 이후에 데이터가 변경이 되었을 경우 전송이 이루어집니다.
- 데이터를 더이상 받고 싶지 않을 경우에는 요청취소를 해야 합니다.
- 요청한 시점의 데이터는 전송하지 않으므로 조회TR을 이용하여 현재의 데이터를 가져와야 합니다.
실시간TR 처리 Diagram
- 1. 실시간TR을 등록합니다.
- 2. 실시간 데이터가 변경되면 해당 데이터를 등록했을때 설정한 윈도우로 XM_RECEIVE_REAL_DATA 메시지를 통해서 전송합니다.
- 3. 더 이상 필요가 없다면 실시간TR을 해제합니다.
실시간 TR을 등록하는 시점은?
- 실시간TR을 등록할 당시의 데이터는 전송하지 않으므로 조회TR을 전송하여 데이터를 받아야 합니다.
- 조회TR을 서버로 전송함과 동시에 실시간TR을 등록하게 되면 조회TR을 받기 전에 실시간TR을 받을수 있으며
- 조회TR에 대한 수신을 받고 나서 실시간TR을 등록하게 되면 수신후의 등록시점까지 변경되는 데이터는 받을 수 없다는 문제가 있습니다.
- 이 두가지 중에 어떤것을 택하느냐는 개발자의 선택입니다.
- X-ing 에서는 대부분 수신을 받은후에 실시간TR을 등록하지만 상황에 따라서는 조회TR을 전송함과 동시에 등록하는 경우도 있습니다.
- 1. 각 TR에는 Header Type이 정해져 있으며
- 2. X-ing 에서 사용하는 Header Type은 총 4가지가 있다.
- 3. Header Type은 해당 TR의 속성을 결정지으며 처리방식이 약간씩 다르다.
- 4. TR에 대한 Header Type은 다음과 같이 알아낼수 있다.
A Type | B Type | C Type | D Type | |
---|---|---|---|---|
데이터 성격 | 시세 투자정보 |
대부분 원장(계좌) 정보 | 대부분 원장(계좌)외의 Database 정보 | 대부분 계좌정보 중 주문/계좌관련 정보 |
Data Mode | Block | Non-Block | Non-Block | Non-Block |
연속처리 | Input TR의 필드로 처리 | ETK_RequestDataEx()의 인자값으로 처리 | Input TR의 필드로 처리 | Input TR의 필드로 처리 |
ETK_RequestData() 사용 | ○ | × | × | × |
ETK_RequestDataEx() 사용 | × | ○ | ○ | ○ |
Connect / Disconnect
ETK_Connect | 서버와 연결합니다. |
---|---|
ETK_IsConnected | 서버와의 연결여부를 취득합니다.. |
ETK_Disconnect | 서버와의 연결을 종료합니다. |
Login
ETK_Login | 서버에 로그인합니다. |
---|---|
ETK_Logout | 서버에서 로그아웃합니다. |
조회TR
ETK_RequestData | TR을 서버에 요청합니다.(Data Header = A) |
---|---|
ETK_RequestDataEx | TR을 서버에 요청합니다.(Data Header = B, C, D) |
ETK_ReleaseRequestData | 수신 데이터를 삭제하고 RequestID를 해제합니다. |
ETK_ReleaseMessageData | 수신 메시지를 삭제합니다. |
실시간TR
ETK_AdviseRealData | 실시간 TR을 등록합니다. |
---|---|
ETK_UnadviseRealData | 등록된 실시간 TR을 해제합니다. |
ETK_UnadviseWindow | 윈도우에 등록된 모든 실시간 TR을 해제합니다. |
계좌관련
ETK_GetAccountListCount | 계좌의 개수를 취득합니다. |
---|
계좌관련
ETK_GetAccountListCount | 계좌의 개수를 취득합니다. |
---|---|
ETK_GetAccountList | 계좌를 취득합니다. |
정보
http://www.etrade.co.kr/index.jsp?url=%2Fxingapi%2FxingMain.jsp%3Fleft_menu_no%3D8%26front_menu_no%3D8
XingAPI_Sample(2010.04.09).zip
RequestData, RequestDataEx 로 호출하는 방식을
Request 로 변경하였습니다.