Skip to content
주식
2010.10.28 19:13

X-ing API

조회 수 12069 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


X-ing API

설정방법 http://blog.naver.com/youhavegot/110085280180

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 




  • X-ing 서버와 연결을 맺은 이후에 아이디 인증 및 공인인증을 처리
  • X-ing API가 복잡한 로그인 과정을 처리하며 결과값을 Window Message로 전송

로그인 처리 Diagram

  • [로그인과정]
  • 1. 로그인 함수(ETK_Login()) 호출
  • 2. 로그인 인증 성공/실패는 로그인 호출시에 등록한 윈도우로 메시지(XM_LOGIN) 전송
  • 3. 메시지의 wParam의 값이 “0000” 이면 성공, 그 외에는 실패 


  • 개요
  • 조회TR처리
  • 실시간TR처리
  • 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 메시지 전송
    타입1
    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은 다음과 같이 알아낼수 있다.
타입1
  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() 사용 ×



  • 1. TR의 필드에는 Data Type 이 존재
  • 2. Data Type 에 따라 전송/수신시 처리 방식이 다름
타입1
  String Int Float
성격 문자열 정수 실수
길이 문자열의 최대 길이
예) 12 : 최대 12자리의 문자열
정수의 최대 길이
예) 5 : 최대 5자리의 정수
정수부와 소수부로 나뉨
정수부는 소수부 포함 최대 길이
소수부는 소수부 최대 길이
예) 6.2
소수부분은 2자리
정수 부분이 3자리 혹은 4자리인 실수

정수부분에 “.” 가 생략되는 경우에는
정수부가 4자리
예) 123.45 => 123.45
123456 => 1234.56
서버
전송/수신시
왼쪽 정렬
남는 영역은 ‘ ‘ 로 채움

[예]
길이:5
데이터:"ABC"
오른쪽 정렬
남는 영역은 ‘0’ 으로 채움

[예]
길이:5
데이터:"123"
오른쪽 정렬
남는 영역은 ‘0’ 으로 채움

[예]
<소수점을 포함하지 않는 경우>
길이:6.2
데이터:12.45


<소수점을 포함하는 경우 >
길이:6.2
데이터:12.45



  • 1. 해당 필드의 속성을 결정
  • 2. Attribute 속성이 있는 TR 이면 필드 뒤에 항시 1바이트의 Attribute를 가진다.
         예) 7의 길이를 가진 현재가 필드는 7바이트의 현재가와 1바이트의 Attribute로 전송/수신된다.
  • 3. 1 Byte 의 Attribute는 각 비트마다 의미가 있다.
타입1
  제목 설명 구분값 비고
0번째 비트 Font Resize 화면 확대시 글꼴크기 변경 여부   사용하지 않음
1번째 비트 Reverse 글자색과 배경색이 바뀌는지 여부 0:바뀌지 않음
1:바뀜
현재가가 상하한가일 경우에 사용됨
2번째 비트 Protect 입력불가 여부 0:입력가능
1:입력불가
사용하지 않음
3번째 비트 Cursor     사용하지 않음
4번째 비트 Color 글자색 1:Black
2:Blue(하락)
3:Red(상승)
4:Green(보합)
5:Brown
6:Cyan
7:LightRed
현재가 등에서 글자색을 표시하기 위해 사용
5번째 비트
6번째 비트
7번째 비트 Use Attribute 사용여부 0:사용하지 않음
1:사용
0으로 세팅될 경우
Attribute는 무시



  • 1. TR의 Block들을 전송/수신시 한번에 보내고/받느냐 나누어서 보내고/받느냐의 방식
  • 2. Header Type 이 A 이면 Block Mode 그렇지 않으면 Non Block Mode 입니다.
1. Block
  • - Block별로 따로 전송
  • - Block Mode는 Block을 각각 전송합니다.
  • - 따라서 수신측에서는 A Block 을 받아서 처리하고 B Block을 받아서 처리하고 C Block을 받아서 처리하게 됩니다.
  • - Receive 정보에는 Block 명이 있어 이것으로 어느 Block이 수신되었는지 구별할 수 있습니다.
2. Non-Block
  • - Block을 한꺼번에 전송
  • - Non Block Mode는 Block을 한번에 전송합니다.
  • - 따라서 수신측에서는 A Block/B Block/C Block을 한번에 받아서 처리합니다.
  • - Receive 정보에는 Block명이 없으며 B Block은 A Block의 크기만큼을 계산해서 사용해야 합니다.

많은 양의 데이터가 한번에 수신이 될 경우 Block/Non-Block에 상관없이 잘게 쪼개서 수신을 하지만 X-ing API에서 모아 하나의 데이터를 만든 후에 보내줍니다. 전송도 마찬가지로 많은 양의 데이터를 한번에 전송할 경우 잘게 쪼개서 전송을 합니다. 그러므로 Block 이 쪼개져서 들어오는 일은 없습니다.



  • 1. Occurs는 배열 형식의 데이터를 일컫습니다.
  • 2. 예를 들면 Grid 안에 들어가는 데이터(체결내역/잔고내역등)가 배열 형식의 데이터입니다.
  • 3. Occurs는 DataMode에 따라 처리방식이 다릅니다.
1. Block
  • - Recevice 된 Block의 전체 길이와 Block의 1개의 길이를 나누어 Block의 총 개수를 구함
  • - 위의 경우에 수신측에서는 A Block과 B Block을 따로 받으며 B Block은 3개의 Occurs 데이터를 한번에 받게 됩니다.
  • - 이때 수신측에서는 Block안의 Occurs의 개수를 알아야 처리가 가능합니다.
  • - B Block 전체 데이터는 B Block만 존재하므로 받은 데이터 크기를 B Block 하나의 크기로 나누면 됩니다.
  • - B Block 개수 = B Block 전체의 크기 / B Block 한 개의 크기
2. Non-Block
  • - Recevice 된 Block의 첫 부분에 Block Occurs의 개수를 나타내는 5바이트의 문자열을 포함
  • - 위의 경우에 수신측에서는 A Block 과 B Block 3개의 Occurs 데이터를 한번에 받게 됩니다.
  • - 이때 수신측에서는 Block안의 Occurs의 개수를 알아야 처리가 가능합니다.
  • - Block Mode와는 다르게 A Block이 같이 수신되므로 B Block의 개수를 알수 없습니다.( 위의 경우엔 전체 수신 크기에서 A Block의 크기를 빼면 B Block의 크기를 알 수 있지만 C Block도 전송된다고 하고 C Block도 Occurs라고 가정했을 경우엔 Occurs의 갯수를 알 방법은 없습니다.)
  • - 그러므로 Block이 Occurs 인 경우에는 Block이 시작되기 전에 5 바이트의 Block의 Occurs갯수를 의미하는 문자열을 포함합니다. 


  • . 연속조회는 많은 양의 Occurs 데이터를 한번에 전송/수신 하지 않고 나누어서 전송/수신하는 것을 일컫습니다.
  • 2. 주식시세 과거데이터등은 한번에 보내기에는 방대한 양이므로 연속조회를 이용합니다.
  • 3. 체결/잔고 등의 Database를 이용하는 경우에도 한번에 많은 양의 Query가 이뤄지면 DB가 Lock이 걸리므로 연속조회를 이용하여 데이터를 보냅니다.
  • 4. Data Header Type에 따라 연속조회 방식이 다릅니다.
    타입1
    Header Type 연속조회 방식
    A 직전에 받은 OutBlock의 특정필드(CTS_XXXX)값을 입력값으로 넣어줍니다.
    B 직전에 받은 RECV_PACKET 안의 Continue Key 값을 ETK_RequestDataEx()의 인자로 넣어줍니다.
    C 직전에 받은 OutBlock의 특정필드(CTS_XXXX)값을 입력값으로 넣어줍니다.
    D 직전에 받은 OutBlock의 특정필드(CTS_XXXX)값을 입력값으로 넣어주고
    직전에 받은 RECV_PACKET 안의 Continue Key 값을 ETK_RequestDataEx()의 인자로 넣어줍니다.

  • [연속조회 기본개념]
  • 1. 초기 전송시 Next Key는 SPACE로 전송
  • 2. 서버에서 다음 데이터가 있으면 다음 데이터의 시작위치를 Next Key로 전송
  • 3. 서버로부터 Next Key를 받으면 다음 TR전송시 받은 Next Key를 같이 전송
  • 4. 서버로부터 Next Key를 받지 못하였다면 더 이상 연속데이터는 없음 


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_GetAccountList 계좌를 취득합니다.

정보

ETK_GetCommMedia 통신매체를 취득합니다.
ETK_GetETKMedia 당사매체를 취득합니다.
ETK_GetClientIP PC의 IP(Virtual IP)를 취득합니다.
ETK_GetServerName 접속한 서버의 이름을 취득합니다.
ETK_GetLastError 마지막에 발생한 Error Code를 취득합니다.
ETK_GetErrorMessage Error Code에 대한 메시지를 취득합니다.



  • DATA FORMAT 내용 설명
    1 RECV_PACKET 의 Memory 주소 Data TR의 Data를 받았을때 발생
    2 MSG_PACKET 의 Memory 주소 Message Message를 받았을때 발생
    3 MSG_PACKET 의 Memory 주소 System Error Error가 발생
    4 정수로 Request ID를 의미 Release TR이 끝났을때 발생

XM_RECEIVE_REAL_DATA = 4

    실시간 TR에 대한 응답을 받았을 때 호출


  • 메시지 받을 윈도우
    ETK_AdviseRealData() 함수에서 넣어준 Window로 Message 전송
  • WPARAM
    사용안함
  • LPARAM
    REAL_RECV_PACKET 의 메모리 주소

XM_LOGIN = 5

    ETK_Login() 함수가 호출 된 후 Login 과정이 완료되었을 때 호출


  • 메시지 받을 윈도우
    ETK_Login() 함수에서 넣어준 Window로 Message 전송
  • WPARAM
    Message Code
    문자열 형태
    “0000” 이면 성공
    그 외에는 실패
  • LPARAM
    Message Text
    문자열 형태

XM_LOGOUT = 6

    ETK_Logout() 함수가 호출 된 후 Logout 과정이 완료되었을 때 호출


  • 메시지 받을 윈도우
    ETK_Logout() 함수에서 넣어준 Window로 Message 전송
  • WPARAM
    Empty
  • LPARAM
    Empty

XM_TIMEOUT = 7

    조회 TR에 대한 응답이 Timeout 되었을 때 호출


  • 메시지 받을 윈도우
    ETK_RequestData(), ETK_RequestDataEx() 함수에서 넣어준 Window로 Message 전송
  • WPARAM
    Empty
  • LPARAM
    Request ID 


RECV_PACKET

서버로부터 조회 데이터를 받았을때 해당 Structure로 데이터가 들어온다.

필드 Data형 크기 설명
RequestID 정수 4 ETK_RequestData(), ETK_RequestDataEx() 함수를 호출했을때 Return 값
Data Length 정수 4 Data 의 메모리 크기
Total Data Buffer Size 정수 4 Data 의 메모리에 할당된 크기
ElapsedTime 정수 4 데이터 요청에서부터 데이터를 수신했을때까지 걸린 시간(1/1000초 단위)
DataMode 정수 4 1 : Block Mode
2 : Non Block Mode
TR Code 문자열 6 요청한 TR Code
(마지막 1 Byte는 NULL)
Continue 문자열 1 '0' : 연속조회 없음
'2' : 연속조회 있음
Continue Key 문자열 19 연속조회가 있을 경우 Data Header가 B 일 경우 이 값이 다음 조회시 Key 가 된다.
(마지막 1 Byte는 NULL)
User Data 문자열 31 사용안함
Block Name 문자열 17 Block 명, Block Mode 일 경우에 의미있다.
(마지막 1 Byte는 NULL)
Data 문자열 포인터 4 수신된 TR 데이터

RECV_REAL_PACKET

서버로부터 실시간 데이터를 받았을때 해당 Structure로 데이터가 들어온다.

필드 Data형 크기 설명
TR Code 문자열 4 TR Code
(마지막 1 Byte는 NULL)
Key Length 정수 4  
Key 문자열 33 (마지막 1 Byte는 NULL)
RegKey 문자열 33 (마지막 1 Byte는 NULL)
Data Length 정수 4  
Data 문자열 포인터 4 실시간 데이터

MSG_PACKET

서버로부터 데이터를 받았을때 해당 Structure로 데이터가 들어온다.

필드 Data형 크기 설명
Request ID 정수 4 Request ID
System Error 정수 4 0 : Message
1 : System Error
Message Code 문자열 6 Message Code
(마지막 1 Byte는 NULL)
Message Data Length 정수 4 Message Data 길이
Message Data 문자열 포인터 4 Message Data


전체 TR










로그인 후 댓글쓰기가 가능합니다.

?

http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소