Quantcast
Channel: 의지있는 황제펭귄님의 이글루입니다
Viewing all articles
Browse latest Browse all 204

[Xing API]xingAPI활용교육샘플v1.3.xlsm(6)-1302TR

$
0
0
Sheet1에서 사용하는 t1302은 분단위 주가를 돌려주는 TR이다. DevCenter에서 TR의 입력과 출력을 보면, 단축코드(shcode), 작업구분(gubun), 시간(time), 건수(cnt)를 넘겨준다. 출력은 두 개의 블럭이 있는데, 하나는 t1302OutBlock, 나머지 하나는 t1302OutBlock1이다.

t1302OutBlock에서는 시간CTS(cts_time)만 돌려주고, t1302OutBlock1에서는 시간(chetime), 종가(close), 전일대비구분(sign), 전일대비(change), 등락율(diff)...등등을 돌려준다.

vba코드를 보면, 아래와 같이 개체를 생성하고, 필요한 입력필드에 값을 넣고 Request()를 한다.
    ' 주식 분별 주가 조회
If XAQuery_t1302 Is Nothing Then
Set XAQuery_t1302 = CreateObject("XA_DataSet.XAQuery")
XAQuery_t1302.ResFileName = "\res\t1302.res"
End If

' t1302 요청
Call XAQuery_t1302.SetFieldData("t1302InBlock", "shcode", 0, Range("C2").Value)
Call XAQuery_t1302.SetFieldData("t1302InBlock", "gubun", 0, "4") ' 10분 데이터 요청
Call XAQuery_t1302.SetFieldData("t1302InBlock", "time", 0, "")
Call XAQuery_t1302.SetFieldData("t1302InBlock", "cnt", 0, "21") ' 21개까지만 표시
nSuccess = XAQuery_t1302.Request(False)
If nSuccess < 0 Then
MsgBox "전송에러 : " & nSuccess
End If
Request후에는 콜백함수를 통해 결과값을 얻는다. 콜백함수Block은 사용하지 않고(중요한 게 아니라서) ,GetBlockCount()와 GetFieldData()를 사용하여 t1302OutBlock1의 결과만 가져온다.
Private Sub XAQuery_t1302_ReceiveData(ByVal szTrCode As String)
Dim arrData(21, 5)

'-------------------------------------------------------------
' t1301OutBlock1 은 Occurs 이므로 Occurs 갯수를 먼저 알아낸다
nCount = XAQuery_t1302.GetBlockCount("t1302OutBlock1")
' 최대 21개만 표시하므로 그 이상이면 21로 고정
' 물론 Request 할때 21개만 했으므로 그 이상 나오지는 않지만
' 혹시나 하는 마음에 ...
If nCount > 21 Then
nCount = 21
End If
'-------------------------------------------------------------

'-------------------------------------------------------------
' Occurs 이므로 For 문으로 갯수만큼 데이터를 가져와서 표시한다.
For i = 0 To nCount - 1
sTime = XAQuery_t1302.GetFieldData("t1302OutBlock1", "chetime", i) ' 수신시간
arrData(i, 0) = Left(sTime, 2) & ":" & Mid(sTime, 3, 2)
arrData(i, 1) = XAQuery_t1302.GetFieldData("t1302OutBlock1", "open", i)
arrData(i, 2) = XAQuery_t1302.GetFieldData("t1302OutBlock1", "high", i)
arrData(i, 3) = XAQuery_t1302.GetFieldData("t1302OutBlock1", "low", i)
arrData(i, 4) = XAQuery_t1302.GetFieldData("t1302OutBlock1", "close", i)
Next i
Range("L3:P23") = arrData
'-------------------------------------------------------------
End Sub

Viewing all articles
Browse latest Browse all 204

Latest Images

Trending Articles