자, 이제 거의 다 되어 간다. 업종별 차트시세를 불러왔으니 이제는 분석을 하고 싶은 주식차트만 불러오면 왠만한 시계열 분석은 큰 무리없이 진행할 수 있을 것 같다.
이전 포스트의 파일을 다운 받았다면 미안하지만 지우고 새롭게 받는게 나을 수 있다. 그러나 파일 다운로드 없이 본인이 직접 만들고 있는 상태라면 아래의 코드를 참고해서 새롭게 만들어보면 된다.
우선 기존에는 tr8413으로 진행하려고 했는데 찾아보니 더 좋은게 있어서 tr4201로 변경했다. 뭐 그거나 이거나 별반 차이는 없지만 만들다보니 그렇게 되어서 그냥 이걸 샘플로해서 tr8413도 쉽게 구현하리라 보고 넘어간다.
우선 엑셀파일에 과감하게 새로운 쉬트를 추가한다. 쉬트 추가 후 이름을 주식차트로 이쁘게 바꿔준다.(아무이름이나 별 상관은 없다.) 그리고 이제는 익숙해지고 있는 VBA 편집기를 열어준다. 새로 생성한 쉬트의 코드에 아래의 코드를 복사 + 붙여넣기로 진행한다.
코드에는 별도의 주석을 달지 않았지만 이제는 인풋값(Inblock)과 아웃풋값(outblock)을 구별할 수 있으리라고 본다. 다만 한 가지 주의할 점은 우리가 HTS에서 보는 차트는 수정주가가 이미 반영이 되어 있는 경우가 많다. 물론 이것도 옵션상에서 끄고 켜고 할 수 있지만 대부분은 기본값으로 수정주가를 보여주고 있다. 그러나 API상에서는 수정주가를 반영하여 내려주지 않고 그냥 준다.
그래서 수정비율이란 것을 조회해서 적절한 값으로 임의조정해야 할 필요가 있다. 만약 이러한 조정없이 그냥 과거의 데이터를 조회한다고 가정할 때 삼성전자의 주가가 어느날 갑자기 98% 폭락하는 신세계를 경험하게 될 것이다. (액면분할 20180504)
참고 : 수정주가란? 배당락, 유증, 무증, 액면분할 등에 의해서 주식의 가격이 시장외적인 요인에 의해서 변동할 때 이를 반영하여 적정주가로 나타낸 것
Dim WithEvents XAQuery_t4201 As XAQuery
Dim WithEvents XASession_sheet8 As XASession
Dim nStartRow_t4201 As Integer
Dim i, j As Integer
'-------------------------------------------------------------------------------------------------------
' 차트
Public Sub cbRequest_t4201_Click()
Sheet8.Range("a5:g503").ClearContents
Sheet8.Range("g1") = Left(Date, 4) & Mid(Date, 6, 2) & Right(Date, 2)
' 객체를 생성한다.
If XAQuery_t4201 Is Nothing Then
Set XAQuery_t4201 = CreateObject("XA_DataSet.XAQuery")
XAQuery_t4201.ResFileName = "C:\eBEST\xingAPI\Res\t4201.res"
End If
If XASession_sheet8 Is Nothing Then
Set XASession_sheet8 = CreateObject("XA_Session.XASession")
End If
' 데이터 세팅
Call XAQuery_t4201.SetFieldData("t4201InBlock", "shcode", 0, Sheet8.Range("c1").Text)
Call XAQuery_t4201.SetFieldData("t4201InBlock", "gubun", 0, Left(Sheet8.Range("e1").Text, 1))
Call XAQuery_t4201.SetFieldData("t4201InBlock", "edate", 0, Sheet8.Range("g1").Text)
Call XAQuery_t4201.SetFieldData("t4201InBlock", "sdate", 0, Sheet8.Range("k1").Text)
Call XAQuery_t4201.SetFieldData("t4201InBlock", "cts_date", 0, Sheet8.Range("m1").Text)
Call XAQuery_t4201.SetFieldData("t4201InBlock", "qrycnt", 0, Sheet8.Range("i1").Text)
' 데이터 요청
If XAQuery_t4201.Request(False) = False Then
MsgBox "전송오류"
End If
End Sub
Public Sub XAQuery_t4201_ReceiveData(ByVal szTrCode As String)
Sheet8.Range("m1") = XAQuery_t4201.GetFieldData("t4201OutBlock", "cts_date", 0)
nStartRow = 4
nStartRow2 = 40
ncount = XAQuery_t4201.GetBlockCount("t4201OutBlock1")
j = 0
For j = j To j
For i = 1 To ncount - 1
Sheet8.Cells(nStartRow + i, 1) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "rate", i)
If Val(Sheet8.Cells(nStartRow + i, 1)) <> 0 Then rateflag = 1
If rateflag > 0 Then
For k = 1 To i
Sheet8.Cells(nStartRow + k, 4 + j) = Round(Val(Sheet8.Cells(nStartRow + k, 4 + j)) * ((100 + Val(Sheet8.Cells(nStartRow + i, 1))) / 100), 0)
Sheet8.Cells(nStartRow + k, 5 + j) = Round(Val(Sheet8.Cells(nStartRow + k, 5 + j)) * ((100 + Val(Sheet8.Cells(nStartRow + i, 1))) / 100), 0)
Sheet8.Cells(nStartRow + k, 6 + j) = Round(Val(Sheet8.Cells(nStartRow + k, 6 + j)) * ((100 + Val(Sheet8.Cells(nStartRow + i, 1))) / 100), 0)
Sheet8.Cells(nStartRow + k, 7 + j) = Round(Val(Sheet8.Cells(nStartRow + k, 7 + j)) * ((100 + Val(Sheet8.Cells(nStartRow + i, 1))) / 100), 0)
Next k
Sheet8.Cells(nStartRow + i, 3 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "date", i)
Sheet8.Cells(nStartRow + i, 4 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "low", i)
Sheet8.Cells(nStartRow + i, 5 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "open", i)
Sheet8.Cells(nStartRow + i, 6 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "close", i)
Sheet8.Cells(nStartRow + i, 7 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "high", i)
nStartRow_t4201 = nStartRow + i
Else
Sheet8.Cells(nStartRow + i, 3 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "date", i)
Sheet8.Cells(nStartRow + i, 4 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "low", i)
Sheet8.Cells(nStartRow + i, 5 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "open", i)
Sheet8.Cells(nStartRow + i, 6 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "close", i)
Sheet8.Cells(nStartRow + i, 7 + j) = XAQuery_t4201.GetFieldData("t4201OutBlock1", "high", i)
nStartRow_t4201 = nStartRow + i
End If
rateflag = 0
Next i
Next j
End Sub
'증권사 API' 카테고리의 다른 글
DB금융투자 차세대 API - 설치 (0) | 2021.08.24 |
---|---|
특정기업의 FNG 요약, 마켓컨센서스 가져오기 (0) | 2020.11.09 |
이베스트증권 차트TR 만들어보기(VBA 활용 - 업종차트편) (0) | 2020.08.28 |
이베스트증권 차트TR 만들어보기(DevCenter 활용) (0) | 2020.08.28 |
이베스트증권 API 샘플 사용법 (0) | 2020.08.28 |
댓글