본문 바로가기
문송충의 코딩하기/파이썬 데이터 분석

공공데이터 API를 활용한 국내 대차거래 종목 순위 확인하기 with 파이썬

by 동장군님 2020. 10. 8.
728x90
반응형

대차거래란 주식을 장기 보유한 금융 기관이 단기적으로 이를 필요한 타 기관에 수수료를 받고 빌려주는 거래를 의미한다. 주로 주가가 하락이 예상될 때 주식을 빌린 기관에서 매매한 후 나중에 주가가 가격이 하락했을 때 다시 주식을 매수해 차익을 보는 일종 투자 방법이다. 항상 뉴스에서 나오는 공매도가 바로 이러한 투자 방식을 뜻한다. 주식이 없는 상태에서 주식을 빌려 주가 하락에 베팅하여 투자전략이다. 

 

투자를 할 때 대차잔고를 꼭 참고해서 봐야 되는데 그 이유는 특정 종목에 대차 잔고가 많다는 것은 그만큼 금융 기관에서 주가 하락을 전망하는 투자자가 많아졌다는 의미로 풀이가 되기 때문이다. 대차 잔고가 많다고 해서 무조건 공매도로 이어지는 것은 아니지만 그래도 공매도로 사용될 대기자금인 만큼 공매도 선행지표로서 참고할 필요가 있다. 그래서 이번 글에서는 어제 20년 10월 6일 어떤 종목에 대차거래가 많이 이루어졌고, 그 규모는 어떤지 공공데이터 API를 통해서 한번 데이터를 가져와보도록 하겠다. 당연히 파이썬으로 할 것이다. 

 


1. 공공데이터 API

아래 링크로 들어가서 API 활용신청을 하기를 바란다. 여기에서 다양한 데이터를 제공하고 있는데 이번에는 그중 "주식대차종목순위"를 사용할 것이다. 

 

data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15001149

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

data.go.kr

 

 

2. 데이터 가져오기

 

API 페이지에서 나오는 파이썬 예시 코드 그대로 갖다 사용했다. 유의할 점은 API 신청 후 바로 사용시 에러가 뜰 수 있다. 이럴 경우 1~2시간 정도 기다렸다가 사용하면 정상적으로 작동할 것이다.

 

여기서 나는 20년 10월 6일 대차 거래 현황을 가져와보도록 하겠다.

 

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import pandas as pd
import xmltodict
import json
from pandas_datareader import data
from datetime import datetime

key='API KEY'
url=f'http://api.seibro.or.kr/openapi/service/SlbSvc/getSlbStockRank?serviceKey={key}&'
queryParams =urlencode({quote_plus('stdDt') : '20201006', quote_plus('rankTpcd') : '1'})
url2 = url + queryParams
response = urlopen(url2) 
results = response.read().decode("utf-8")
results_to_json = xmltodict.parse(results)
data = json.loads(json.dumps(results_to_json))

 

 

3. 데이터 테이블로 정리

데이터 중에서 중요하다고 생각한 종목명, 대차 거래 체결 주수, 대차 거래 잔고 금액, 대차 거래 잔고 주식 수를 가져와 데이터프레임화 하도록 하겠다.

data2=data['response']['body']['items']['item']
name=[]
qty=[]
amt=[]
remainqty=[]
for i in data2:
    name.append(i['korSecnNm'])
    qty.append(i['matcQty'])
    amt.append(i['remAmt'])
    remainqty.append(i['slbTrRemQty'])
    
df=pd.DataFrame([name, qty,amt,remainqty]).T
df.columns=['종목명','체결주수','잔고 금액','잔고 주식수']

 

4. 결과물

 

위에서 생성한 데이터프레임을 액셀로 출력하면 아래와 같은 결과를 얻을 수 있을 것이다.

201006_대차거래_종목별순위.csv
0.00MB

728x90
반응형

댓글