2023. 9. 18. 16:02ㆍDATA PROGRAMMING/PYTHON
StockChart 클래스의 통신 종류는 Request/Reply 이다. 이는 원하는 정보를 해당 API 정확히 Request 해야 API에서 정보를 Reply해준다는 뜻이다.
import win32com.client
instStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
instStockChart 객체를 생성하고, 원하는 값들을 정확하게 Request 해보자. 이때 SetInputValue메소드가 사용된다.
instStockChart.SetInputValue(0, "A003540")
instStockChart.SetInputValue(1, ord('2'))
instStockChart.SetInputValue(4, 10)
instStockChart.SetInputValue(5, 5)
instStockChart.SetInputValue(6, ord('D'))
instStockChart.SetInputValue(9, ord('1'))
다른 클래스에 비해 데이터를 불러오는 것이 조금 까다롭다고 느껴진다. 두 개의 인자를 대입하는데 앞의 인자는 어떤 정보를 불러올지 즉, 데이터 타입을 결정해 주고, 뒤의 인자는 해당 데이터 타입의 값을 입력한다.
0, "A003540" 은 종목코드 'A003540'를 불러오라는 뜻이다.
SetInputValue(4, 10)에서 4는 요청 개수를 말하고, 10이라는 개수의 데이터를 요청했다. 즉 최근 거래일로부터 10일 치의 데이터를 요청한 것이다.
CYBOS Plus 도움말에 있는 StockChart 부분을 참조하면 종가에 해당하는 값이 5임을 알 수 있다. 즉, 종가에 대한 정보를 요구하고 있다.
일 단위의 데이터를 가져오기 위해 ord('D')를 입력했다.
마지막으로 수정주가를 적용할지에 대한 여부인데 ord('1')을 대입함으로써 수정주가를 적용했다.
instStockChart.BlockRequest()
numData = instStockChart.GetHeaderValue(3)
다음으로 입력한 대로 데이터를 Request해주고, GetHeaderValue 메소드를 활용해 특정 데이터를 가져온다. 인자로 대입한 3은 수신한 데이터의 개수를 의미한다. 10일 치의 데이터를 보고 있으니 numData를 출력한다면 10이 나온다.
for i in range(numData):
print(instStockChart.GetDataValue(0, i))
GetDataValue() 의 첫 번째 인자 0은 시가를 의미한다. 1을 입력하면 고가를 가져올 수 있다. 현재는 종가만을 보고 있기에 0을 대입한다. i의 값들을 두 번째 인자에 대입함으로써 최근 10일간의 종가를 확인할 수 있다.
그렇다면 종가뿐만 아니라 시가, 고가 등 다른 정보들을 가져오고 싶으면 어떻게 할까? StockChart 클래스의 SetInputValue의 5인자에 해당하는 인자들을 대입하면 된다. 예를 들어
instStockChart.SetInputValue(5, (0, 2, 3, 4, 5, 8))
이렇게 작성하면, 2(시가), 3(고가), 4(저가), 5(종가), 8(거래량)에 대한 정보를 가져올 수 있다.
numData = instStockChart.GetHeaderValue(3)
numField = instStockChart.GetHeaderValue(1)
for i in range(numData):
for j in range(numField):
print(instStockChart.GetDataValue(j, i), end=" ")
print("")
해당 코드를 입력하면 요청한 모든 데이터를 불러 올 수 있다.
numData에는 보고 싶은 거래일의 개수인 10이 저장되고, numField에는 데이터값의 개수인 6이 저장된다. 즉, 이중 for 문을 통해 원하는 데이터를 마치 10행 6열의 데이터 프레임 같은 형태로 출력할 수 있다.
'DATA PROGRAMMING > PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 프로그래머스 문제 풀기 1 - 자릿수 더하기 (0) | 2023.09.20 |
---|---|
[파이썬] 대신증권 API를 활용한 알고리즘 개발 (0) | 2023.09.20 |
파이썬을 이용한 퀀트 투자 - 1. 시작과 맛보기 (0) | 2023.09.17 |
파이썬으로 엑셀 사용하기 (0) | 2023.09.14 |
[PYTHON] 파이썬을 통해 전화번호부 만들기 (0) | 2023.09.13 |