PowerPoint 프레젠테이션

Similar documents
API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

Microsoft PowerPoint - e pptx

Microsoft Word - src.doc

PowerPoint Presentation

歯엑셀모델링

chap 5: Trees

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

윈도우시스템프로그래밍

PowerPoint Presentation

open-api.md 2/14/2019 Deflow Open Api 1. 목록 (GET) /v1/order/list - 주문내역조회 (GET) /v1/order/complete/list - 거래내역조회 (POST) /v1/order/cancel - 주문취소 (GET)

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

03_queue

슬라이드 1

y 0.5 9, 644 e = 10, y = ln = 3.6(%) , May. 20, 2005

HWP Document

게시판 스팸 실시간 차단 시스템

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

tiawPlot ac 사용방법

PowerPoint Presentation

歯MDI.PDF

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Visual Basic 반복문

Microsoft PowerPoint - chap06-2pointer.ppt

MF3010 MF Driver Installation Guide

PowerPoint Template

슬라이드 1

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

윈도우시스템프로그래밍

K&R2 Reference Manual 번역본

로거 자료실

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

제 2 장 기본 사용법

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

1장 윈도우 프로그래밍 들어가기

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

Chapter #01 Subject

Microsoft Word - Armjtag_문서1.doc

제8장 자바 GUI 프로그래밍 II

메뉴얼41페이지-2

Lab 3. 실습문제 (Single linked list)_해답.hwp

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - [2009] 02.pptx

회원

Xcovery 사용설명서

어댑터뷰

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

ISP and CodeVisionAVR C Compiler.hwp

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

쉽게

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

JUNIT 실습및발표

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

Microsoft PowerPoint - IP11.pptx

PowerPoint 프레젠테이션

NTD36HD Manual

sms_SQL.hwp

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

제11장 프로세스와 쓰레드

EBS-PDF컴퓨터일반-07-오

Microsoft PowerPoint - Chapter 6.ppt

윈도우즈프로그래밍(1)

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

Microsoft Word - 강의록1.doc

adfasdfasfdasfasfadf

윈도우 프로그래밍의 개념

JAVA 플랫폼 개발 환경 구축 및 활용

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

B2B 매뉴얼

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

gcloud storage 사용자가이드 1 / 17

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

슬라이드 1

Microsoft PowerPoint 세션.ppt

슬라이드 1

C++ Programming

C# Programming Guide - Types

AutoCAD VBA 중급활용강좌 Sub 캐드의활성화상태 () 충분하지못한캐드 14버전도제어할수있다. 아래의코드는 'Application.hwnd' 속성을지원해주는캐드 2005 이상에서만실행된다. Dim 캐드상태 As Integer ' 현재의상태를나타냄캐드상태 = Ap

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - Java7.pptx

MF5900 Series MF Driver Installation Guide

(Microsoft PowerPoint - 2\300\345.ppt)

Transcription:

종목검색 HTS 의종목검색기능을지원합니다. Step 1 HTS [1807] 종목검색 화면에서검색조건을설정합니다. 조건설정방법은 HTS 도움말을참조하시기바랍니다. Step 2 API 로보내기 버튼을이용해파일로저장합니다. Step 3 개발프로그램에서 XAQuery 객체에 t1833 TR 의 res 를할당합니다. 1

종목검색 Step 4 개발프로그램에서 RequestService() 함수를통해데이터를요청합니다. 수신처리는 Request() 함수와동일합니다. (xingapi 설치폴더 \ 엑셀샘플 폴더아래 종목검색과HTS연동.xlsm 엑셀샘플첫번째시트참고 ) Set XAQuery_t1833 = CreateObject("XA_DataSet.XAQuery") Call XAQuery_t1833.LaodFromResFile( \Res\t1833.res ) int nreqid = XAQuery_t1807.RequestService( t1833, "D:\test.adf ) If nreqid < 0 Then MsgBox " 전송오류 " End If 2

차트지표 - 엑셀 VBA 차트지표데이터는 HTS [4201] xing차트1 의 [ 수식관리자 기술적지표 ] 데이터와동일한데이터를 API에서제공해드리는기능으로, ChartIndex( 차트지표데이터조회 ) TR과 RequestService() 메소드를이용하여조회하며, 실서버에서만조회가능합니다. 차트지표데이터는 API 내부에서차트기초데이터를가공하여제공하는것으로, 조회및실시간에 다소시간이걸릴수있습니다. 아래의코드는 ChartIndex( 차트지표데이터조회 ) TR을이용하여지표를조회하는예제입니다. 이것은 xingapi 설치폴더내 엑셀샘플 \ 차트지표데이터조회및실시간 (ChartIndex).xlsm 파일에서도확인가능합니다. Step 1 설정합니다. DevCenter 내 [ 부가서비스 수식관리자 ] 메뉴에서 수식관리 화면을열어필요한지표를 수식관리자 메뉴를클릭합니다. 1 원하는지표를설정합니다. (HTS [4201] xingq 차트 1 내수식관리자와동일한기능 ) 2 3

차트지표 - 엑셀 VBA Step 2 XAQuery 객체를선언합니다. ( 일반데이터조회과정과동일 ) [ 개발도구 ] 메뉴를클릭합니다. 1 일반데이터조회시의객체선언과동일하며 TR 코드만다른것입니다. Step 3 XAQuery 객체생성및 Res 파일등록을합니다. ( 일반데이터조회과정과동일 ) Res 파일이없다고오류가발생할때에는 [DevCenter - TR 목록창 ] 에서 TR 코드를클릭하면, 클릭하는시점에서버에서자동으로다운로드받습니다. 4

차트지표 - 엑셀 VBA Step 4 Inblock 의입력값을모두설정합니다. ( 일반데이터조회과정과동일 ) 입력값을설정합니다. 5

차트지표 - 엑셀 VBA Step 5 차트지표데이터를요청합니다. 부가서비스용메소드인 RequestService() 메소드를사용합니다. Long RequestService(BSTR szcode, BSTR szdata) 부가서비스처리용메소드로 Request() 메소드와파라미터만다를뿐이용방법은유사 szcode : ChartIndex szdata : 사용안함 반환값 : 에러코드 0 이상이면 API-> 서버로의요청이성공, 0 미만이면 API-> 서버로의요청실패 ex) MACD 지표데이터조회 일반조회 TR 과동일하게 ChartIndex TR 의 Inblock 값을모두입력 call XAQuery_ChartIndex.SetFieldData( ChartIndexInBlock, indexname, 0, MACD ). 생략 call XAQuery_ChartIndex. RemoveService( ChartIndex, outblock.indexed) int nreqid = XAQuery_ChartIndex.RequestService( ChartIndex, 0) 6

차트지표 - 엑셀 VBA Step 6 차트지표데이터결과를수신받습니다. ( 일반데이터조회과정과동일 ) 1 ChartIndex TR 은 API 내부에서차트 기초데이터 -> 지표데이터 로가공된후이벤트가발생합니다. 2 이벤트는 XAQuery 객체의 ReceiveData 이벤트를사용합니다. ChartIndex TR 에대한 API 내부의지표데이터가공처리가완료되면 ReceiveMessage 이벤트는지표데이터요청에대한결과를무조건수신받습니다. -> 지표요청이성공했는지, 실패했는지판단 ReceiveData 이벤트는지표데이터요청이성공했을때, Outblock 의데이터를수신받습니다. -> 지표데이터요청이실패했을때는수신받지않습니다. 따라서, 지표요청이성공했을때에만데이터를확인시기바랍니다. 객체콤보내의 XAQuery 객체를선택 1 XAQuery 객체의이벤트콤보리스트중 ReceiveData 이벤트를선택하면 2 자동으로이벤트맵이추가됩니다. 3 7

차트지표 - 엑셀 VBA Step 6 이벤트를받았다면 GetFieldData 메소드를사용하여수신데이터를가져옵니다. ( 일반데이터조회과정과동일 ) 지표결과를표시합니다. 8

차트지표 - 엑셀 VBA 전체코드 Option Explicit Dim g_currentpos As Integer ' 표시데이터의현재위치 Dim g_indexid As String ' 지표의 indexid Dim WithEvents XAQuery_ChartIndex As XAQuery ' 지표데이터조회 (API용) ------------------------ ' 차트의지표데이터를조회합니다 ------------------------ Private Sub btnquery_click() ' 이전에조회한데이터를삭제 Dim srange As String If g_currentpos <> 0 Then srange = "B22" & ":N" & CStr(g_currentpos + 22) Range(sRange).ClearContents End If g_currentpos = 0 g_indexid = "" ' 객체생성및 Res 할당 If XAQuery_ChartIndex Is Nothing Then Set XAQuery_ChartIndex = CreateObject("XA_DataSet.XAQuery") XAQuery_ChartIndex.ResFileName = "\res\chartindex.res" End If ' 이전의 indexid 값이있다면, 차트지표데이터를해제 Dim nsuccess As Integer If Len(g_indexId) > 0 Then Call XAQuery_ChartIndex.RemoveService("ChartIndex", g_indexid) End If 9

차트지표 - 엑셀 VBA ' ChartIndex 요청 Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "indexname", 0, Range("D9").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "market", 0, Range("D10").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "period", 0, Range("D11").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "shcode", 0, Range("D12").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "qrycnt", 0, Range("D13").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "ncnt", 0, Range("D14").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "sdate", 0, Range("D15").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "edate", 0, Range("D16").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "Isamend", 0, Range("D17").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "Isgab", 0, Range("D18").Value) Call XAQuery_ChartIndex.SetFieldData("ChartIndexInBlock", "IsReal", 0, Range("D19").Value) nsuccess = XAQuery_ChartIndex.RequestService("ChartIndex", "") If nsuccess < 0 Then MsgBox " 전송에러 : " & nsuccess End If End Sub ------------------------ ' 차트지표데이터의조회결과의성공여부를수신받습니다 ------------------------ Private Sub XAQuery_ChartIndex_ReceiveMessage(ByVal bissystemerror As Boolean, ByVal nmessagecode As String, ByVal szmessage As String) Range("D20").Value = CStr(nMessageCode) & " : " & szmessage End Sub ------------------------ ' 차트지표데이터의조회결과성공시, 결과를수신받습니다 ------------------------ Private Sub XAQuery_ChartIndex_ReceiveData(ByVal sztrcode As String) 10

차트지표 - 엑셀 VBA ' 지표의 indexid ( 지표별구분키로사용할수있다 ) g_indexid = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock", "indexid", 0) ' 검색종목수 g_currentpos = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock", "rec_cnt", 0) If g_currentpos = 0 Then Exit Sub End If ' 데이터저장 Dim arrdata(10000, 13) Dim i, cnt As Integer ' 맨첫번째데이터에서지표값 1~5는각컬럼의제목이다 arrdata(0, 0) = " 순서 " arrdata(0, 1) = " 일자 " arrdata(0, 2) = " 시간 " arrdata(0, 3) = " 시가 " arrdata(0, 4) = " 고가 " arrdata(0, 5) = " 저가 " arrdata(0, 6) = " 종가 " arrdata(0, 7) = " 거래량 " arrdata(0, 8) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value1", 0) arrdata(0, 9) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value2", 0) arrdata(0, 10) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value3", 0) arrdata(0, 11) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value4", 0) arrdata(0, 12) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value5", 0) ' 두번째데이터부터지표이다 cnt = g_currentpos For i = 1 To cnt - 1 arrdata(i, 0) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "pos", cnt - i) arrdata(i, 1) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "date", cnt - i) 11

차트지표 - 엑셀 VBA arrdata(i, 2) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "time", cnt - i) arrdata(i, 3) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "open", cnt - i) arrdata(i, 4) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "high", cnt - i) arrdata(i, 5) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "low", cnt - i) arrdata(i, 6) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "close", cnt - i) arrdata(i, 7) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "volume", cnt - i) arrdata(i, 8) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value1", cnt - i) arrdata(i, 9) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value2", cnt - i) arrdata(i, 10) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value3", cnt - i) arrdata(i, 11) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value4", cnt - i) arrdata(i, 12) = XAQuery_ChartIndex.GetFieldData("ChartIndexOutBlock1", "value5", cnt - i) Next ' 위치를찾아서데이터를넣어준다 Dim srange As String srange = "B22" & ":N" & CStr(g_currentpos + 22) Range(sRange) = arrdata End Sub ------------------------ ' 차트지표데이터의실시간지표를수신받습니다 ------------------------ Private Sub XAQuery_ChartIndex_ReceiveChartRealData(ByVal sztrcode As String) On Error Resume Next ' 실시간지표데이터의위치를확인 Dim pos As Integer pos = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "pos") If pos = g_currentpos Then ' 이전위치에표시 g_currentpos = pos ' 새로운지표이면, 맨위에추가하고나머지데이터를아래로한줄내린다 ElseIf pos > g_currentpos Then Range("B23:N1022").Copy Destination:=Range("B24:N1023") 12

차트지표 - 엑셀 VBA g_currentpos = pos Else Exit Sub End If ' 실시간지표데이터가져오기 Dim arrdata(1, 13) arrdata(0, 0) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "pos") arrdata(0, 1) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "date") arrdata(0, 2) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "time") arrdata(0, 3) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "open") arrdata(0, 4) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "high") arrdata(0, 5) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "low") arrdata(0, 6) = XAQuery_ChartIndex.GetFieldChartRealData("ChartIndexOutBlock1", "close") End Sub 13

차트지표 -C++ 아래의코드는 xingapi 설치시, 설치폴더내의 ChartAPISample.exe 프로그램의소스코드로 xingapi홈페이지 [ 자료실 일반자료실 ] VC++ 샘플 - ChartAPISample(2014.10) : 차트지표데이터 게시글내샘플소스와동일합니다. Step 1 차트지표데이터를요청합니다. 1 ChartIndex TR 을 ETK_RequestService() 함수를이용해요청하며, 2 결과를처리하는방식은일반데이터조회와동일합니다. int ETK_RequestService( HWND hwnd, LPCTSTR pszcode, LPCTSTR pszdata ) ( 부가서비스처리용함수 Request() 함수와파라미터만다를뿐이용방법은유사 ) hwnd : 결과수신메시지를받을윈도우핸들 szcode : t1833 szdata : HTS [1807] 종목검색 ' 화면에서설정한검색조건을저장한파일의전체경로 반환값 : 에러코드 0 이상이면 API-> 서버로의요청이성공, 0 미만이면 API-> 서버로의요청실패 ex) HTS '[1807] 종목검색 ' 에서 'API 로내보내기 ' 저장한파일이 "D:\test.adf 이라면, szcode = t1833, szdata = "D:\test.adf" int nreqid = g_xingapi.requestservice(getsafehwnd(), t1833, "D:\test.adf ) 오류발생시, 확인함수 nerrcode = GetLastError() : API 에서의마지막에러값을반환 GetErrorMessage( nerrcode ) : 에러코드에대한에러메시지를반환 14

차트지표 -C++ //---------------------------------------------------------------------------------------------------- // 차트지표데이터조회를요청합니다 //---------------------------------------------------------------------------------------------------- void CIndexView::OnBtnQuery() { 생략 } ChartIndexInBlock inblock; memset(&inblock, 0x20, sizeof(chartindexinblock)); strcpy(inblock.indexname, m_strindexname); // [string, 40] 지표명 inblock.market[0]= ntype+'0'; // [string, 1] 시장구분 inblock.period[0]= nperiod+'0' ; // [sting, 1] 주기구분 strcpy(inblock.shcode, strcode); // [string, 8] 단축코드 sprintf(inblock.qrycnt, "%d", ncount); // [long, 4] 요청건수 ( 최대 500개 ) sprintf(inblock.ncnt, "%d", 1); // [long, 4] 단위 (n틱/n분) strcpy(inblock.edate, strdate); // [string, 8] 종료일자 ( 일 / 주 / 월해당 ) inblock.isamend[0]= '1'; // [string, 1] 수정주가반영여부 ( inblock.isgab[0]= '1 ; // [string, 1] 갭보정여부 inblock.isreal[0]= nreal+'0 ; // [string, 1] 실시간데이터자동등록 nrqid = g_ixingapi.requestservice(getsafehwnd(), NAME_CHARTINDEX, (LPCTSTR)&inblock); 15

차트지표 -C++ Step 2 차트지표데이터결과를수신받습니다. ETK_RequestService() 가성공하면, 서버로부터 XM_RECEIVE_DATA 메시지를수신받아지표데이터결과 를확인합니다. BEGIN_MESSAGE_MAP(CIndexView, CFormView) ON_MESSAGE(WM_USER + XM_RECEIVE_DATA, ON_MESSAGE(WM_USER + XM_TIMEOUT_DATA, ON_MESSAGE(WM_USER + XM_RECEIVE_CHARTREALDATA, END_MESSAGE_MAP() OnXMReceiveData) OnXMTimeoutData) OnXMReceiveRealData) LRESULT CIndexView::OnXMReceiveData( WPARAM wparam, LPARAM lparam ) { //------------------------------------------------------------------------------------- // Data를받음 : 지표데이터요청성공시에서버로부터수신된다. // 지표데이터요청실패시에발생하는경우도있지만더미데이터이므로무시한다 if( wparam == REQUEST_DATA ) { // 필요한데이터이용 } //------------------------------------------------------------------------------------- // Release Data를받음 else if( wparam == RELEASE_DATA ) { g_ixingapi.releaserequestdata( (int)lparam ); } } return 0L; 16

e 종목검색 - 엑셀 VBA e종목검색은 HTS [1892] e종목검색 의 API 보내기, 전략관리를이용한실시간종목검색기능입니다. 기존파일은 ADF, 신규파일은 ACF 입니다. 기존파일은실시간종목검색에서사용이불가합니다. 아래의코드는 t1857( 종목검색 ( 신버전API용 )) TR을이용하여지표를조회하는예제입니다. 이것은 xingapi 설치폴더내 엑셀샘플 \e종목검색(t1857).xlsm 파일에서도확인가능합니다. Step 1 HTS [1892]e 종목검색화면에서검색조건을설정합니다. 조건설정방법은 HTS 도움말을참조하시기바랍니다. Step 2-1 API로보내기 버튼을이용해파일로저장합니다. 17

e 종목검색 - 엑셀 VBA Step 2-2 전략관리를이용해서버에전략을저장합니다.( 저장한전략리스트는 t1866 으로확인가능 ) [ 전략관리 ] 메뉴를클릭합니다. 1 서버에전략을저장한후화면을닫습니다. 저장한전략은 t1866 을이용하여조회하실수있습니다. 18

e 종목검색 - 엑셀 VBA Step 3 XAQuery 객체를선언합니다. ( 일반데이터조회과정과동일 ) [ 개발도구 ] 메뉴를클릭합니다. 1 일반데이터조회시의객체선언과동일하며 TR 코드만다른것입니다. Step 4 XAQuery 객체생성및 Res 파일등록을합니다. ( 일반데이터조회과정과동일 ) Res 파일이없다고오류가발생할때에는 [DevCenter - TR 목록창 ] 에서 TR 코드를클릭하면, 클릭하는시점에서버에서자동으로다운로드받습니다. 19

e 종목검색 - 엑셀 VBA Step 5 Inblock 의입력값을모두설정합니다. ( 일반데이터조회과정과동일 ) 입력값을설정합니다. 20

e 종목검색 - 엑셀 VBA Step 6 e 종목검색데이터를요청합니다. 부가서비스용메소드인 RequestService() 메소드를사용합니다. Long RequestService(BSTR szcode, BSTR szdata) 부가서비스처리용메소드로 Request() 메소드와파라미터만다를뿐이용방법은유사 szcode : ChartIndex szdata : 사용안함 반환값 : 에러코드 0 이상이면 API-> 서버로의요청이성공, 0 미만이면 API-> 서버로의요청실패 ex) 일반조회 TR 과동일하게 t1857 TR 의 Inblock 값을모두입력 Call XAQuery_t1857.SetFieldData("t1857InBlock", "srealflag", 0, Range("G8").Value). 생략 int nreqid = XAQuery_t1857.RequestService("t1857", "") 21

e 종목검색 - 엑셀 VBA Step 7 e 종목검색데이터결과를수신받습니다. ( 일반데이터조회과정과동일 ) 1 이벤트는 XAQuery 객체의 ReceiveData 이벤트를사용합니다. 객체콤보내의 XAQuery 객체를선택 1 XAQuery 객체의이벤트콤보리스트중 ReceiveData 이벤트를선택하면 2 자동으로이벤트맵이추가됩니다. 3 22

e 종목검색 - 엑셀 VBA Step 8 이벤트를받았다면 GetFieldData 메소드를사용하여수신데이터를가져옵니다. ( 일반데이터조회과정과동일 ) 지표결과를표시합니다. 23

e 종목검색 - 엑셀 VBA 전체코드 Option Explicit Dim g_count As Integer Dim WithEvents XAQuery_t1857 As XAQuery - [ 조회 TR] 종목검색 (API 용 ) ' 실시간해제요청 Private Sub btnreleasereal_click() ' t1857 요청 Dim skey As String skey = Range("L8").Value ' 실시간등록 Key ' 객체생성및 Res 할당 If XAQuery_t1857 Is Nothing Then Set XAQuery_t1857 = CreateObject("XA_DataSet.XAQuery") XAQuery_t1857.ResFileName = "\res\t1857.res" End If Dim nsuccess As Integer nsuccess = XAQuery_t1857.RemoveService("t1857", skey) End Sub ' 종목검색요청 Private Sub btnsearch_click() ' 이전에조회한데이터를삭제 Dim srange As String If g_count <> 0 Then srange = "B10" & ":J" & CStr(g_Count + 10) Range(sRange).ClearContents End If 24

e 종목검색 - 엑셀 VBA ' t1857 요청 Dim sfile As String sfile = Range("C8").Value ' 파일명 ( 전체경로포함 ) ' 객체생성및 Res 할당 If XAQuery_t1857 Is Nothing Then Set XAQuery_t1857 = CreateObject("XA_DataSet.XAQuery") XAQuery_t1857.ResFileName = "\res\t1857.res" End If Dim skey As String skey = Range("L8").Value ' 실시간등록 Key Dim nsuc As Integer nsuc = XAQuery_t1857.RemoveService("t1857", skey) ' t1857 요청 Call XAQuery_t1857.SetFieldData("t1857InBlock", "srealflag", 0, Range("G8").Value) Call XAQuery_t1857.SetFieldData("t1857InBlock", "ssearchflag", 0, Range("J8").Value) Call XAQuery_t1857.SetFieldData("t1857InBlock", "query_index", 0, Range("C8").Value) Dim nsuccess As Integer nsuccess = XAQuery_t1857.RequestService("t1857", "") If nsuccess < 0 Then MsgBox " 전송에러 : " & nsuccess End If ' ' ' End Sub Private Sub XAQuery_t1857_ReceiveData(ByVal sztrcode As String) 25

e 종목검색 - 엑셀 VBA On Error Resume Next ' 검색종목수 g_count = XAQuery_t1857.GetFieldData("t1857OutBlock", "result_count", 0) Range("L8") = XAQuery_t1857.GetFieldData("t1857OutBlock", "AlertNum", 0) Dim arrdata(10000, 9) If g_count = 0 Then End If Exit Sub ' 데이터저장 Dim i As Integer For i = 0 To g_count - 1 arrdata(i, 0) = i + 1 arrdata(i, 1) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "shcode", i) ' 종목코드 arrdata(i, 2) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "hname", i) ' 종목명 arrdata(i, 3) = GetSignPic(XAQuery_t1857.GetFieldData("t1857OutBlock1", "sign", i))' 전일대비구분 arrdata(i, 4) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "change", i) ' 전일대비 arrdata(i, 5) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "price", i) ' 현재가 arrdata(i, 6) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "diff", i) ' 등락율 arrdata(i, 7) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "volume", i) 거래량 arrdata(i, 8) = XAQuery_t1857.GetFieldData("t1857OutBlock1", "JobFlag", i) ' 진입여부 Next ' 위치를찾아서데이터를넣어준다 Dim srange As String srange = "B10" & ":J" & CStr(g_Count + 10) Range(sRange) = arrdata End Sub 26

e 종목검색 - 엑셀 VBA Private Sub XAQuery_t1857_ReceiveSearchRealData(ByVal sztrcode As String) On Error Resume Next Dim pos As Integer pos = g_count If pos >= 0 Then Range("C10:J10009").Copy Destination:=Range("C11:J10010") Else Exit Sub End If If pos >= 10000 Then g_count = 10000 ElseIf pos >= 0 Then g_count = pos + 1 End If Dim arrdata(1, 9) arrdata(0, 0) = 1 arrdata(0, 1) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "shcode") ' 종목코드 arrdata(0, 2) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "hname") 종목명 arrdata(0, 3) = GetSignPic(XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "sign")) ' 전일대비구분 arrdata(0, 4) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "change") 전일대비 arrdata(0, 5) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "price") ' 현재가 arrdata(0, 6) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "diff") ' 등락율 arrdata(0, 7) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "volume") ' 거래량 arrdata(0, 8) = XAQuery_t1857.GetFieldSearchRealData("t1857OutBlock1", "JobFlag") ' 진입여부 ' 위치를찾아서데이터를넣어준다 Dim srange As String srange = "B10" & ":J10" Range(sRange) = arrdata End Sub 27

e 종목검색 -C++ 아래의코드는 xingapi 설치시, 설치폴더내의 xingapi_sample_esearch.exe 프로그램의소스코드로 xingapi홈페이지 [ 자료실 일반자료실 ] VC++ 샘플 - xingapi_sample_esearch(2018.02) : 실시간종목검색 게시글내샘플소스와동일합니다. Step 1 종목검색을요청합니다. 1 t1857 TR 을 ETK_RequestService() 함수를이용해요청하며, 2 결과를처리하는방식은일반데이터조회와동일합니다. int ETK_RequestService( HWND hwnd, LPCTSTR pszcode, LPCTSTR pszdata ) ( 부가서비스처리용함수 Request() 함수와파라미터만다를뿐이용방법은유사 ) hwnd : 결과수신메시지를받을윈도우핸들 szcode : t1857 szdata : t1857inblock 데이터 반환값 : 에러코드 0 이상이면 API-> 서버로의요청이성공, 0 미만이면 API-> 서버로의요청실패 ex) HTS '[1892] e 종목검색 ' 에서 'API 로내보내기 ' 저장한파일이 "D:\test.acf 이라면, szcode = t1857, szdata = "D:\test.acf szflag = F, szreal = 1 SetPacketData( pckinblock.srealflag, sizeof( pckinblock.srealflag), szreal, DATA_TYPE_STRING ); SetPacketData(pckInBlock.sSearchFlag,sizeof( pckinblock.ssearchflag),szflag,data_type_string ); SetPacketData( pckinblock.query_index,sizeof( pckinblock.query_index),szdata,data_type_string ); int nrqid = g_ixingapi.requestservice( GetSafeHwnd(), szcode, (LPCTSTR)&pckInBlock ) 오류발생시, 확인함수 nerrcode = GetLastError() : API 에서의마지막에러값을반환 GetErrorMessage( nerrcode ) : 에러코드에대한에러메시지를반환 28

e 종목검색 -C++ //-------------------------------------------------------------------------------------- // 데이터조회 void CDlg_t1857::RequestData( BOOL bnext ) { t1857inblock pckinblock; TCHAR sztrno[] = "t1857"; char sznextkey[] = ""; //----------------------------------------------------------- // 데이터취득 CString str_index; GetDlgItemText( IDC_INBLOCK_INDEX1857, str_index );// 종목검색입력값 CString str_flag; m_combo_flag.getlbtext(m_combo_flag.getcursel(),str_flag); str_flag = str_flag.left(1); // 조회구분값 S: 서버 F: 파일 CString str_real; m_combo_real.getlbtext(m_combo_real.getcursel(),str_real); str_real = str_real.left(1); // 실시간여부 1: 등록 0: 조회만 FillMemory( &pckinblock, sizeof( pckinblock ), ' ' ); // 입력값초기화 //----------------------------------------------------------- // 데이터입력 SetPacketData( pckinblock.srealflag, sizeof( pckinblock.srealflag), str_real, DATA_TYPE_STRING ); SetPacketData(pckInBlock.sSearchFlag,sizeof(pckInBlock.sSearchFlag),str_Flag,DATA_TYPE_STRING ); SetPacketData(pckInBlock.query_index,sizeof(pckInBlock.query_index),str_Index,DATA_TYPE_STRING); // 종목검색입력값 //----------------------------------------------------------- // 데이터전송 int nrqid = g_ixingapi.requestservice( GetSafeHwnd(),szTrNo,(LPCTSTR)&pckInBlock); if( bnext == FALSE ) { m_ctrloutblock1.deleteallitems(); } // 기존데이터삭제 //----------------------------------------------------------- // Request ID가 0보다작을경우에는에러이다. if( nrqid < 0 ) { MessageBox( " 조회실패 ", " 에러 ", MB_ICONSTOP ); } } 29

e 종목검색 -C++ Step 2 종목검색결과를수신받습니다. ETK_RequestService() 가성공하면, 서버로부터 XM_RECEIVE_DATA 메시지를수신받아종목검색결과를 확인합니다. BEGIN_MESSAGE_MAP(CDlg_t1857, CDialog) ON_MESSAGE(WM_USER + XM_RECEIVE_DATA, OnXMReceiveData) ON_MESSAGE(WM_USER + XM_TIMEOUT_DATA, OnXMTimeoutData) ON_MESSAGE(WM_USER + XM_RECEIVE_REAL_DATA_SEARCH, OnXMReceiveRealSearchData) END_MESSAGE_MAP() LRESULT CDlg_t1857::OnXMReceiveData( WPARAM wparam, LPARAM lparam ) { //------------------------------------------------------------------------------------- // Data를받음 : 지표데이터요청성공시에서버로부터수신된다. // 지표데이터요청실패시에발생하는경우도있지만더미데이터이므로무시한다 if( wparam == REQUEST_DATA ) { // 필요한데이터이용 } //------------------------------------------------------------------------------------- // Release Data를받음 else if( wparam == RELEASE_DATA ) { g_ixingapi.releaserequestdata( (int)lparam ); } } return 0L; 30

e 종목검색 -C++ Step 3 종목검색실시간을수신받습니다. 실시간데이터가발생하면, 서버로부터 XM_RECEIVE_REAL_DATA_SEARCH 메시지를수신받아종목검 색신호를확인합니다. BEGIN_MESSAGE_MAP(CDlg_t1857, CDialog) ON_MESSAGE(WM_USER + XM_RECEIVE_DATA, OnXMReceiveData) ON_MESSAGE(WM_USER + XM_TIMEOUT_DATA, OnXMTimeoutData) ON_MESSAGE(WM_USER + XM_RECEIVE_REAL_DATA_SEARCH, OnXMReceiveRealSearchData) END_MESSAGE_MAP() LRESULT CDlg_t1857:: OnXMReceiveRealSearchData( WPARAM wparam, LPARAM lparam ) { LPRECV_REAL_PACKET prealpacket = (LPRECV_REAL_PACKET)lParam; } LPt1857OutBlock1 poutblock = (LPt1857OutBlock1)pRealPacket->pszData; int nrowcount = m_ctrloutblock1.getitemcount(); m_ctrloutblock1.insertitem( 0, "" ); m_ctrloutblock1.setitemtext( 0, 0, GetDispData( poutblock->shcode, sizeof( poutblock->shcode ), DATA_TYPE_STRING ) ); // 종목코드... CString strjobflag; strjobflag = GetDispData( poutblock->jobflag, sizeof( poutblock->jobflag ), DATA_TYPE_STRING ); if(strcmp( strjobflag, "N" ) == 0) strjobflag = " 신규 "; else if(strcmp( strjobflag, "R" ) == 0) strjobflag = " 재진입 "; else if(strcmp( strjobflag, "O" ) == 0) strjobflag = " 탈퇴 "; m_ctrloutblock1.setitemtext( 0, 7, strjobflag ); // 종목상태 return 0L; 31

감사합니다