데이터 처리

Download Report

Transcript 데이터 처리

xingAPI DLL 사용하기
| xingAPI란?
※ xingAPI란?
증권사가 제공하는 일련의 데이터를 받기 위한 Library
여기서 데이터라 함은 매매를 하기 위한 투자정보, 계좌정보를 의미
※ xingAPI를 사용하기 전에 준비사항
⊙ xingAPI 약관동의 : xingAPI 홈페이지에서 약관에 동의
⊙ xingAPI 설치 : xingAPI 홈페이지에서 xingAPI 프로그램 다운받아서 설치
※ xingAPI 구성파일
API 파일
xingAPI.dll
암호화 파일
XecureS.dll
공인인증 파일
MFC 파일
SKCom*.dll, nsldap32v11.dll
Mfc42.dll, msvcrt.dll
※ xingAPI 개발 순서
서버연결
(Connect)
로그인
(Login)
데이터 처리
(Requst/Receive)
서버 연결 종료
(Disconnect)
| ETK_Connect - 서버와 연결합니다.
구문
BOOL __stdcall ETK_Connect (
HWND
hWnd,
const char* pszSvr,
int
nPort,
int
nStartMsgID,
int
nTimeOut,
int
nSendMaxPacketSize
)
매개변수
hWnd
pszSvr
nPort
nStartMsgID
nTimeOut
nSendMaxPacketSize
Window Handle
연결할 서버 IP
연결할 서버 Port(사용안함)
시작 MessageID
연결시도 시간 – millisecond단위(1/1000초), -1 은 기본값(10초)으로 설정
전송시 최대 Packet Size, -1은 기본값으로 설정
반환값
0(FALSE) 이면 실패
1(TRUE) 이면 성공
설명
hWnd 는 XM_DISCONNECT를 보낼 윈도우 핸들
nStartMsgID 는 Client 로 보낼 Message 의 시작 ID를 지정
Client 로 정의된 Message를 보낼 때는 nStartMsgID + 정의된 MessageID 로 보내게 됩니다.
예) XM_RECEIVE_DATA를 보낼 때는 nStartMsgID + XM_RECEIVE_DATA 로 보내게 됩니다.
| XM_DISCONNECT - 서버와의 연결이 끊어졌을 때 호출
Message ID
1
메시지 받을 윈도우
ETK_Connect() 함수를 호출하였을 때 넣어준 Window 로 Message 전송
WPARAM
사용안함
LPARAM
사용안함
| 로그인
PC
로그인 함수 호출
로그인 완료
ETK_Login()
XM_LOGIN
<성공>
wParam=“0000”
xingAPI
서버
로그인 요청
정합성체크
로그인 처리
| ETK_Login - 서버에 로그인합니다.
구문
BOOL __stdcall ETK_Login (
HWND
hWnd,
const char* pszID,
const char* pszPwd,
const char* pszCertPwd,
int
nType,
BOOL
bShowCertErrDlg
)
매개변수
hWnd
pszID
pszPwd
pszCertPwd
nType
bShowCertErrDlg
Window Handle.
로그인 ID
로그인 ID에 대한 비밀번호
공인인증 비밀번호
무조건 0
공인인증 과정에서 발생한 에러에 대해 미리 정의된 Dialog를 표시할지 여부
반환값
0 이 아니면 성공(로그인 성공이 아니라 서버로 로그인요청 전송성공을 의미)
0 이면 실패
설명
로그인 결과는 hWnd에 등록한 윈도우로 Message(XM_LOGIN)가 옵니다.
| XM_LOGIN - ETK_Login() 함수가 호출 된 후 Login 과정이 완료되었을 때 호출
Message ID
5
메시지 받을 윈도우 ETK_Login() 함수에서 넣어준 Window로 Message 전송
WPARAM
Message Code
문자열 형태
“0000” 이면 성공
그 외에는 실패
LPARAM
Message Text
문자열 형태
| 조회성TR처리
PC
조회성TR 함수호출
조회성Data 처리
ETK_ReleaseMessageData()
ETK_ReleaseRequestData()
ETK_ReleaseMessageData()
ETK_Request()
← Request ID
XM_RECEIVE_DATA
Data
XM_RECEIVE_DATA
Message
XM_RECEIVE_DATA
Release
XM_RECEIVE_DATA
System Error
xingAPI
서버
TR요청
TR 처리
Data 전송
Message 전송
Release 전송
System Error 전송
| ETK_Request - 서버로 조회TR을 전송합니다.
구문
BOOL __stdcall ETK_Request (
HWND
hParentWnd,
const char* pszTrCode,
void*
lpData,
int
nDataSize,
BOOL
bNext,
const char* pszContinueKey,
int
nTimeOut
)
매개변수
hParentWnd
pszTrCode
lpData
nDataSize
bNext
pszContinueKey
nTimeOut
수신데이터는 XM_RECEIVE_DATA 메시지로 옵니다.
요청할 TR Code
요청할 Data
Data 의 메모리 크기
연속조회 여부. 연속조회일 경우에 설정합니다.
연속조회 키
설정한 시간(초)내에 수신 데이터가 오지 않을 경우 XM_TIMEOUT 이 발생합니다.
반환값
0보다 작을 경우엔 실패이며
0 또는 0보다 클 경우엔 Request ID를 반환합니다.
| Request ID
※ Request ID란?
- 서버에 데이터를 전송하게 되면 부여받게 되는 ID
- 서버로부터 데이터를 받을때 Request ID 값을 같이 받음
※ Request ID 내부구조
Request ID
사용여부
Data
0
1
Memory Address
1
1
Memory Address
2
0
NULL
:
:
:
253
0
NULL
254
0
NULL
9
| XM_RECEIVE_DATA - 조회 TR에 대한 응답을 받았을 때 호출
Message ID
3
메시지 받을 윈도우 ETK_Request() 함수에서 넣어준 Window 로 Message 전송
WPARAM
1
LPARAM
RECV_PACKET
내용
Data
설명
- TR의 Data를 받았을때 발생
- Data가 없거나 에러가 발생한 경우 수신되지 않을 수 있음
- Message를 받았을때 발생
2
MSG_PACKET Message - Data 처리에 성공을 해도 실패를 해도 Message는 발생한다.
- ETK_ReleaseMessageData()를 호출하여 Message를 해제
3
4
MSG_PACKET
Request ID
System
Error
Release
- Data 처리 이전에 System 문제로 인한 Error가 발생할 경우
- Release가 전송되지 않으며 ETK_ReleaseMessageData()에서 자동으로
Request ID를 해제해준다.
- Data 처리가 완료된 경우에 전송
- Request ID를 해제하기 위해 ETK_ReleaseRequestData()를 호출
| RECV_PACKET – 서버로부터 데이터를 받았을때
필드
Data형
크기
설명
RequestID
정수
4
ETK_Request() 함수를 호출했을때 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
문자열
11
요청한 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 데이터
| MSG_PACKET – 서버로부터 메시지를 받았을때
필드
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
| XM_TIMEOUT - 조회 TR에 대한 응답이 Timeout 되었을 때 호출
Message ID
7
메시지 받을 윈도우
ETK_Request() 함수에서 넣어준 Window로 Message 전송
WPARAM
사용안함
LPARAM
Request ID
| TR이란?
TR(Transaction)
서버에 데이터를 요청하고 데이터를 받는 일련의 작업이며
TR 코드, 입력데이터, 출력데이터로 구성
TR 코드
서버에 데이터를 요청할때 어떤 데이터를 요청하는지를
정의하는 코드
입력데이터(InBlock)
서버에 요청하는 데이터
출력데이터(OutBlock)
서버에서 받은 데이터
TR 구조
| Data Type
String
성격
문자열
문자열의 최대 길이
예) 12 : 최대 12자리의 문자열
Int(Long)
정수
정수의 최대 길이
예) 5 : 최대 5자리의 정수
길이
서버
전송/수신
왼쪽 정렬
남는 영역은 ‘ ‘ 로 채움
오른쪽 정렬
남는 영역은 ‘0’ 으로 채움
[예]
길이:5
데이터:"ABC"
[예]
길이:5
데이터:"123"
Float(Double)
실수
정수부/소수부로 나뉨
정수부 : 소수부 포함 최대 길이
소수부 : 소수부 최대 길이
예) 6.2
소수부분 : 2자리
정수부분 : 3자리 혹은
4자리인 실수
정수부분에 “.” 가 생략되는 경우
정수부가 4자리
예) 123.45 => 123.45
123456 => 1234.56
오른쪽 정렬
남는 영역은 ‘0’ 으로 채움
[예]
<소수점을 포함하지 않는 경우>
길이:6.2
데이터:12.45
<소수점을 포함하는 경우 >
길이:6.2
데이터:12.45
15
| TR 속성
| Attribute
제목
0번째 비트 Font Resize
1번째 비트 Reverse
2번째 비트 Protect
설명
구분값
화면 확대시 글꼴크기 변경 여
부
글자색과 배경색이 바뀌는지 0:바뀌지 않음
여부
1:바뀜
0:입력가능
입력불가 여부
1:입력불가
3번째 비트 Cursor
5번째 비트
글자색
6번째 비트
7번째 비트 Use
사용하지 않음
현재가가 상하한가일 경우에 사용됨
사용하지 않음
사용하지 않음
4번째 비트
Color
비고
Attribute 사용여부
1:Black
2:Blue(하락)
3:Red(상승)
4:Green(보합)
5:Brown
6:Cyan
7:LightRed
0:사용하지 않음
1:사용
현재가 등에서 글자색을 표시하기 위
해 사용
0으로 세팅될 경우
Attribute는 무시
17
| Block Mode
Block
Block별로 따로 전송
Non-Block
Block을 한꺼번에 전송
Receive 정보에는 Block명이 없으며
Receive 정보에는 Block 명이 있어
B Block은 A Block의 크기만큼을 계산해서 사용해야합니
이것으로 어느 Block이 수신되었는지 구별할 수 있습니다.
다
18
| Occurs
Block
- B Block 개수 = B Block 전체의 크기 / B Block 한 개의
크기
Non-Block
- Recevice 된 Block의 첫 부분에 Block Occurs의 개수를
나타내는 5바이트의 문자열을 포함
19
| 연속조회
PC
조회성TR 함수호출
조회성Data 처리
조회성TR 함수호출
조회성Data 처리
조회성TR 함수호출
조회성Data 처리
ETK_Request()
연속조회=N
XM_RECEIVE_DATA
연속여부=Y Key=1
ETK_Request()
연속조회=Y Key=1
XM_RECEIVE_DATA
연속여부=Y Key=2
ETK_Request()
연속조회=Y Key=2
XM_RECEIVE_DATA
연속여부=N
xingAPI
서버
TR요청
데이터 처리
Data 전송
TR요청
다음 데이터 처리
Data 전송
TR요청
다음 데이터 처리
Data 전송
20
| 실시간TR처리
PC
실시간TR 함수호출
실시간Data 처리
실시간Data 처리
실시간Data 처리
실시간TR 함수호출
ETK_AdviseRealData()
XM_RECEIVE_REAL_DATA
XM_RECEIVE_REAL_DATA
XM_RECEIVE_REAL_DATA
ETK_UnadviseRealData()
xingAPI
서버
실시간TR요청
등록
Data 전송
데이터 변경시
데이터 전송
Data 전송
데이터 변경시
데이터 전송
Data 전송
데이터 변경시
데이터 전송
TR요청
해제
21
| ETK_AdviseRealData - 실시간 TR을 등록합니다.
구문
BOOL __stdcall ETK_AdviseRealData(
HWND
hWnd,
const char* pszTrCode,
const char* pszData,
int nDataUnitLen
)
매개변수
hWnd
pszTrCode
pszData
nDataUnitLen
XM_RECEIVE_REAL_DATA 메시지가 전송됩니다.
등록할 TR Code
등록할 데이터
등록할 데이터의 Unit 크기
반환값
0(FALSE)이면 실패
1(TRUE)이면 성공
설명
실시간 데이터를 요청합니다.
한번 요청시에 여러 데이터를 요청할 수 있습니다.
예를 들면 078020 종목과 005930 종목을 요청할 경우 데이터는 "078020005930" 이며 데이터 사이즈는 6
실시간 데이터는 TR에 Attribute가 설정되어 있어도 전송시엔 Attribute를 적용하지 않으며 수신시에만 적용
| XM_RECEIVE_REAL_DATA - 실시간 TR에 대한 응답을 받았을 때 호출
Message ID
4
메시지 받을 윈도우 ETK_AdviseRealData() 함수에서 넣어준 Window로 Message 전송
WPARAM
사용안함
LPARAM
REAL_RECV_PACKET 의 메모리 주소
| RECV_REAL_PACKET – 실시간 데이터를 받았을때
필드
Data형
크기
설명
TR Code
문자열
4
Key Length
정수
4
Key
문자열
33
(마지막 1 Byte는 NULL)
RegKey
문자열
33
(마지막 1 Byte는 NULL)
Data Length
정수
4
Data
문자열 포인터
4
TR Code
(마지막 1 Byte는 NULL)
실시간 데이터
| ETK_UnadviseRealData - 등록된 실시간 TR을 해제합니다.
구문
BOOL __stdcall ETK_UnadviseRealData(
HWND
hWnd,
const char* pszTrCode,
const char* pszData,
int nDataUnitLen
)
매개변수
hWnd
pszTrCode
pszData
nDataUnitLen
Window Handle. 실시간이 등록된 윈도우
등록해제할 TR Code
등록해제할 데이터
등록해제할 데이터의 Unit 크기
반환값
0(FALSE)이면 실패
1(TRUE)이면 성공
설명
등록된 실시간 데이터를 해제합니다.
한번 해제시에 여러 데이터를 해제할 수 있습니다.
등록할때 A 종목과 B 종목을 한번에 등록하고 C 종목과 D 종목을 한번에 등록하였어도
해제할때는 A, C 종목을 한번에 해제 가능하며 각각 해제도 가능합니다.
| 데이터처리
xingAPI
ETK_Request()
XM_RECEIVE_DATA
ETK_Advise()
XM_RECEIVE_REAL_
DATA
ETK_Unadvise()
26
| 함수
※ 서버 연결
ETK_Connect
ETK_IsConnected
ETK_Disconnect
서버와 연결합니다.
서버와의 연결 여부를 취득합니다.
서버와의 연결을 종료합니다.
※ 로그인
ETK_Login
※ 조회TR
ETK_Request
ETK_ReleaseRequestData
ETK_ReleaseMessageData
※ 실시간TR
ETK_AdviseRealData
ETK_UnadviseRealData
ETK_UnadviseWindow
서버에 로그인합니다.
TR을 서버에 요청합니다.
수신 데이터를 삭제하고 Request ID를 해제합니다.
수신 메시지를 삭제합니다.
실시간 TR을 등록합니다.
등록된 실시간 TR을 해제합니다.
윈도우에 등록된 모든 실시간 TR을 해제합니다.
※ 계좌관련
ETK_GetAccountListCount
ETK_GetAccountList
계좌의 개수를 취득합니다.
계좌를 취득합니다.
※ 정보
ETK_GetServerName
ETK_GetLastError
ETK_GetErrorMessage
접속한 서버의 이름을 취득합니다.
마지막에 발생한 Error Code를 취득합니다.
Error Code에 대한 메시지를 취득합니다.
|
에러 코드 및 설명
에러코드
에러설명
에러코드
에러설명
-1
소켓생성 실패
-13
Request ID 부족
-2
서버연결 실패
-14
소켓이 생성되지 않았습니다.
-3
서버주소가 맞지 않습니다.
-15
암호화 생성에 실패했습니다.
-16
데이터 전송에 실패했습니다.
-17
암호화(RTN)처리에 실패했습니다.
-18
공인인증 파일이 없습니다.
-4
서버 연결시간 초과
-5
이미 서버에 연결중입니다.
-6
해당 TR은 사용할 수 없습니다.
-19
공인인증 Function이 없습니다.
-7
로그인이 필요합니다.
-20
메모리가 충분하지 않습니다.
-8
시세전용에서는 사용이 불가능합니다.
-21
TR의 초당 사용횟수 초과로 사용이 불가능
합니다.
-9
해당 계좌번호를 가지고 있지 않습니다.
-22
해당 TR은 해당 함수를 이용할 수 없습니다.
-10
Packet의 크기가 잘못되었습니다.
-23
TR에 대한 정보를 찾을 수 없습니다.
-11
Data 크기가 다릅니다.
-24
계좌위치가 지정되지 않았습니다.
-12
계좌가 존재하지 않습니다.
-25
계좌를 가지고 있지 않습니다.
28