대신증권이 제공하는 API와 파이썬을 이용해서, 내가 가장 먼저 한 일은 상장된 모든 종목의 차트를 저장하는 작업이었다. 클래스와 인스턴스에 대해 이해하지 않고 뛰어들었기 때문에 혼란스러운 과정이기도 했다. 대신증권의 API '싸이보스 플러스'에서는 여러 클래스를 제공하는데, 모두 알 필요는 없다. 이 단계에서 필요한 것만 이용하면 된다. 완성된 코드부터 써놓고, 집중력이 남아있다면 설명을 조금 덧붙일까 한다.
import win32com.client import pandas as pd import numpy as np instCpStockCode = win32com.client.Dispatch('CpUtil.CpStockCode') instCpCodeMgr = win32com.client.Dispatch('CpUtil.CpCodeMgr') instStockChart = win32com.client.Dispatch('CpSysDib.StockChart') def set_tgt() : tgt_array = np.arange(instCpStockCode.GetCount()) tgt = DataFrame(tgt_array, columns=['index']) tgt['code'] = tgt['index'].apply(lambda i: instCpStockCode.GetData(0, i)) tgt['name'] = tgt['index'].apply(lambda i: instCpStockCode.GetData(1, i)) del tgt['index'] tgt['market'] = tgt['code'].apply(lambda x: instCpCodeMgr.GetStockMarketKind(x)) tgt = tgt[tgt['market'] <= 2] tgt = tgt.reset_index(drop=True) print(tgt) return tgt tgt = set_tgt() tgt.to_excel(경로 + 파일이름 + '.xlsx')
이 부분은 실행하기 전에 ▲싸이보스플러스가 실행되어 있어야 하고 ▲IDE와 컴파일러(?)를 관리자 권한으로 실행해야 한다. 그리고 pandas와 numpy 패키지도 설치해주어야 작동한다.
첫 세 줄은 필요한 패키지를 입포트하는 명령이다. 다음에 나오는 세 줄은 인스턴스라고 부르는, 붕어빵 틀을 만들어주는 명령이다. 이 각각의 이름 지어진 붕어빵 틀에는, 고유한 기능들(.GetCount, .GetData, .GetStockMarket 등)이 있다. 안에다 넣어주는 재료(i)와 원하는 빵 종류(0, 1, 등)에 따라 똑같은 결과물을 반복해서 만들어준다. tgt는 target을 내 마음대로 줄인 이름이다.
GetCount()는 전체 종목 개수를 알기 위한 함수라 별다른 재료가 필요하지 않다. GetData에 0을 넣어주면 종목코드를 알려주고, 1을 입력하면 종목이름을 보여준다. 이렇게 알아낸 종목코드(tgt['code']) 각각을 GetStockMarket()에 넣어주면 그 코드를 가진 종목이 코스피(=1)인지 코스닥(=2)인지를 알려준다.
불리언 인덱싱으로 코스피/코스닥이 아닌 것들을 제외하고, 인덱스를 정렬해 준 다음 결과물을 내보내면 끝이다. 함수를 실행시켜서 생선된 데이터프레임을 엑셀 파일로 기록해 주도록 하자. 이제부터 요긴하게 쓰일 데가 많다.
'투자자 > 알고리즘' 카테고리의 다른 글
파이썬으로 비상장법인 가치평가 퀀트전략 구현하기 feat. 상속세 및 증여세법 (0) | 2021.05.20 |
---|---|
개발첫걸음_ 파이썬에서 모든 주식의 차트데이터 저장하기 (0) | 2021.05.15 |
파이썬_ numpy array에서 문자열 찾아 바꿔넣기 (0) | 2021.04.26 |
코딩근황_ 사업보고서에서 재무제표 엑셀 바로 다운받기 (2) | 2021.04.22 |
저장된 재무제표를 읽어오려면 (feat. 문자열 유사성 판단하는 로직) (0) | 2021.04.15 |