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