투자자/알고리즘

개발첫걸음_ 모든 종목의 이름과 종목코드 저장하기

나그네_즈브즈 2021. 5. 2. 20:02

대신증권이 제공하는 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)인지를 알려준다. 

 

불리언 인덱싱으로 코스피/코스닥이 아닌 것들을 제외하고, 인덱스를 정렬해 준 다음 결과물을 내보내면 끝이다. 함수를 실행시켜서 생선된 데이터프레임을 엑셀 파일로 기록해 주도록 하자. 이제부터 요긴하게 쓰일 데가 많다.

반응형