본문 바로가기
증권사 API

이베스트증권 차트TR 만들어보기(VBA 활용 - 업종차트편)

by 다빈치스탁 2020. 8. 28.
728x90
반응형

자, 이전 포스트에서 차트데이터 조회에 필요한 TR을 알아봤다. 그러면 제일 처음 포스트에서 확인한 주식현재가/호가 excel 파일을 열고 쉬트를 하나 더 추가해주고 쉬트이름은 업종차트(아무거나 해도 상관없음)로 변경한다. 다음으로 진행할 사항은 이제 차트TR을 만들어서 데이터를 불러올 차례다.

 

데브센터(devcenter.exe)에서도 확인할 수 있겠지만 이베스트에서 필요한 인풋값은 Inblock으로 그리고 요청을 통해 나오는 결과는 outblock으로 정의된다. 친절히도 무엇을 인풋으로 넣어야 하는지 상세하게 설명되어 있지만 한번 더 나열하자면 종목코드(무슨 업종을 조회할 것인가?), 구분값(일, 주, 월 등의 시간주기), 시작일자와 종료일자(언제부터, 언제까지?) 그리고 한번에 몇 건의 데이터를 조회할 것인가 등이다.

728x90

자 이제 VBA 편집기를 열고(ALT+F11) 새로 만든 쉬트에 4203 TR을 정의해야 하므로 아래의 코드를 복사해서 붙여넣자. 

Dim WithEvents XAQuery_t4203 As XAQuery
Dim WithEvents XASession_sheet14 As XASession
Dim nStartRow_t4203 As Integer

자 여기까지 완료했다면 우선 4203(업종차트)을 사용하겠다고 선언한 셈이 된다. 그 다음으로는 차트를 불러오는 인풋값을 코드화해야 하는데(아래의 코드를 다시 연이어 붙여넣으면 OK) 한 가지 유의할 사항이 있다. 우선 아래에서 sheet14 로 입력되어 있는 값은 본인의 sheet에 맞는 이름으로 변경해야 한다. 그것도 헷갈리면 그냥 첨부된 파일을 열어보면 간단하다. 다만 매크로(혹은 ActiveX)가 포함되어 있는 첨부파일의 경우 대부분의 사람들이 의심하기때문에 아래의 코드를 복사해서 수정하는 방법 또한 같이 제공한다. 그래도 의심된다 -> 첨부된 파일을 Excel 의 안전모드로 열면 모든 매크로 및 ActiveX는 비활성화되어 열리니 그때 코드를 확인해보면 된다.

'-------------------------------------------------------------------------------------------------------
' 차트
Private Sub cbRequest_t4203_Click()
    
    ' 객체를 생성한다.
    If XAQuery_t4203 Is Nothing Then
        Set XAQuery_t4203 = CreateObject("XA_DataSet.XAQuery")
        XAQuery_t4203.ResFileName = "C:\eBEST\xingAPI\Res\t4203.res"
    End If
    If XASession_sheet14 Is Nothing Then
        Set XASession_sheet14 = CreateObject("XA_Session.XASession")
    End If
   
    ' 데이터 세팅
    Call XAQuery_t4203.SetFieldData("t4203InBlock", "shcode", 0, Sheet14.Range("b3").Text)
    Call XAQuery_t4203.SetFieldData("t4203InBlock", "gubun", 0, Sheet14.Range("j5").Text)
    Call XAQuery_t4203.SetFieldData("t4203InBlock", "edate", 0, Sheet14.Range("j6").Text)
    Call XAQuery_t4203.SetFieldData("t4203InBlock", "sdate", 0, Sheet14.Range("j7").Text)
    Call XAQuery_t4203.SetFieldData("t4203InBlock", "cts_date", 0, Sheet14.Range("j8").Text)
    Call XAQuery_t4203.SetFieldData("t4203InBlock", "qrycnt", 0, Sheet14.Range("j9").Text)
 
    ' 데이터 요청
    If XAQuery_t4203.Request(False) = False Then
        MsgBox "전송오류"
    End If
    
End Sub

위의 내용까지 인블럭 처리(인풋값)였으므로 이제는 위와 같은 데이터를 조회했을 때 받아오는 결과값을 어떻게 저장할 것인가에 대한 코드가 필요하다. 마찬가지로 아래의 코드를 연이어 붙여넣기 하고 sheet14 는 적절한 값으로 변경해주기 바란다.

Private Sub XAQuery_t4203_ReceiveData(ByVal szTrCode As String)
Dim maxCount As Integer
    
    maxCount = Application.WorksheetFunction.CountA(Sheet14.Range("b31:w31"))
    
    If maxCount > 21 Then
        MsgBox "조회완료"
        Exit Sub
    End If
    
    Sheet14.Range("j8") = XAQuery_t4203.GetFieldData("t4203OutBlock1", "cts_date", 0)
    
    nStartRow = 30
    ncount = XAQuery_t4203.GetBlockCount("t4203OutBlock1")
    j = Application.WorksheetFunction.CountA(Range("b31:w31"))
    
    For j = j To j
    For i = 1 To ncount - 1
        Sheet14.Cells(nStartRow + i, 2 + j) = XAQuery_t4203.GetFieldData("t4203OutBlock1", "close", i)
        nStartRow_t4203 = nStartRow + i
    Next i
    Next j
    
    Range("b3") = Range("b" & j + 5)
End Sub

위의 과정을 모두 완료하고 Excel 쉬트에 코드값 및 인풋값을 셋팅해주면 짜잔!! 

아래의 그림처럼 필요한 업종지수에 대해서 데이터를 불러올 수 있다. 우선은 코스피 업종에 대해서만 연동을 해놓았으니 코스닥 업종도 필요한 사람은 위의 코드를 참고해서 적절히 사용하면 된다.

 

주식현재가및호가.xlsm
0.14MB

728x90
반응형

댓글