본문 바로가기
코딩/Python

파이썬으로 주가 정보(주식 현재가) 가져오는 방법/한국투자증권 Rest API

by 나홀로코더 2023. 1. 4.
반응형

1. 주제 소개

파이썬을 이용해서 증권사로부터 주가 정보를 가져오는 방법을 소개한다. 예제는 주가 정보 가져오기만 하지만, 국내 주식 매수는 물론이고 해외 주식 매수까지도 가능하다.


아마도 파이썬을 이용한 자동화 과제 중에서 사람들이 가장 많은 관심을 가지는 분야가 주식 정보 등 금융, 투자 분야일 것이다.


그래서 필자도 증권사에서 제공하는 개발 툴을 찾아본 적이 있었는데, 윈도우 기반으로만 실행이 가능하고, 각종 프로그램을 설치하고 공인인증 절차도 거쳐야 하는 등 매우 불편하게 되어 있었다. 이럴 거면 그냥 HTS를 이용하는 게 낫지 않나 싶을 정도였다.


그런데 얼마 전에 다시 검색을 해보니 한국투자증권에서 Rest API 방식의 트레이딩 서비스를 출시한 것을 알게 되었다. 프로그램의 설치나 공인인증 절차 등이 필요 없이 간단한 HTTP 요청을 통해서 작동하는 방식이어서 기존의 툴에 비하면 훨씬 편리하다.


Rest API를 이용한 정보 수집에 대해서는 이미 여러 차례 소개한 적이 있으니 참고 바란다.

 

 

공공데이터포털 API 활용해 부동산 실거래가 데이터 가져오기/파이썬에서 xml 데이터 처리하는 방

목차 1. 주제 소개 2. XML 데이터 처리하기(xml 모듈) 3. XML 데이터를 판다스 데이터프레임으로 변환하기 1. 주제 소개 앞서 파이썬으로 공공데이터포털 오픈 API를 활용하는 방법을 소개한 적이 있다

codealone.tistory.com

 

파이썬으로 법원경매 정보 수집하기/HTTP Requests, API, 웹 스크레이핑 심화-1

목차 1. 주제 소개 2. cURL 커맨드 획득하기 3. 파이썬 코드로 변환해 실행해 보기 1. 주제 소개 기존에 웹스크레이핑 관련 포스팅을 했었는데, 정부에서 운영하는 홈페이지들은 아래의 방법이 통하

codealone.tistory.com

 

반응형

 

2. KIS Developers 사용 방법

 

2-1. API 활용 준비

 

한국투자증권의 오픈 API 서비스인 KIS Developers를 이용하려면 먼저 해당 증권사 계좌를 개설하고, KIS Developers 서비스를 신청해야 한다. 이 부분은 한국투자증권에서 직접 작성한 안내서 내용을 참고하기 바란다.

 

 

02. 서비스 신청

![](https://wikidocs.net/images/page/159333/kis_restapi_1.png) **그림 1. KIS Developers 서비스 신청하기 화면**…

wikidocs.net

 

위 안내서를 보면 API 사용법이 자세히 설명되어있다. 안내서를 보고 잘 따라하면 무리 없이 API를 사용할 수 있을 것이다.

 

2-2. 예제 코드 수정하기

 

이 글의 목표는 필자의 활용 사례를 통해 가능하면 적은 노력으로 API를 활용하는 방법을 소개하려는 것이다.

 

한국투자증권은 오픈 API의 예제 코드를 제공하고 있다. 아래 깃허브 리포지토리에서 볼 수 있다.

 

GitHub - koreainvestment/open-trading-api: Korea Investment & Securities Open API Github https://apiportal.koreainvestment.com

Korea Investment & Securities Open API Github https://apiportal.koreainvestment.com - GitHub - koreainvestment/open-trading-api: Korea Investment & Securities Open API Github https://apip...

github.com

 

600줄이 넘는 긴 스크립트인데, 코드를 직접 작성하지 않고 이것을 가져다가 쓸 것이다.
다음 명령어를 이용해 오픈 API 리포지토리를 작업하려는 디렉토리에 내려받는다.

 

git clone https://github.com/koreainvestment/open-trading-api

 

예제 코드는 "rest" 폴더에 들어 있다. 4개의 파일 중 kis_api.py가 우리가 쓰려는 파일이다.


해당 파일을 열어 보면 사용자 인증부터 시작해서 주식 현재가 조회 등 API 호출을 할 수 있는 함수들이 정의되어 있다. 매우 복잡하게 보이는데, 우리는 그중 94번째 줄과 318번째 줄에 정의되어 있는 auth 함수와 get_current_price 함수를 사용할 것이다.

 

auth 함수

 

get_current_pric 함수

 

rest 폴더에는 kisdev_vi.yaml 파일도 있는데, kis_api.py의 18~19번째 줄을 보면 위 yaml 파일에서 APP key와 APP secret 등 정보를 가져다 작동한다는 것을 알 수 있다.

 

필자는 이와 같은 민감한 정보를 yaml 파일에 저장해 두고 싶지 않아 앱을 실행할 때마다 APP key 등을 직접 입력하는 방식으로 스크립트를 변경했다.

 

yaml 파일을 읽어오는 코드(18~19번째 줄) 아래에다가 다음 코드 라인을 추가한다.

 

key, sec, acc = input("Enter api key, secret, account: ").split()

 

이 코드가 실행되면 input 프롬프트가 뜨는데, 이 때 위의 한국투자증권 안내서에 따라 얻어 낸 APP key와 APP secret, 그리고 계좌번호를 입력(사이에 여백 1칸씩)해주면 각각 key, sec, acc으로 할당된다.


다음은 yaml 파일에서 읽어 온 정보가 활용되는 곳들을 찾아 위에서 입력한 정보를 대신 활용하도록 수정해 준다.


먼저 43~45번째 줄이다. - 표시된 라인 대신 + 표시된 라인처럼 수정한다.

 

-        'my_app': cfg['my_app'],
-        'my_sec': cfg['my_sec'],
-        'my_acct': cfg['my_acct'],
+        'my_app': key,
+        'my_sec': sec,
+        'my_acct': acc,

 

70~71, 74, 107~108, 124~125번째 줄도 마찬가지로 수정한다.

 

-    cfg['my_app'] = _cfg[ak1]
-    cfg['my_sec'] = _cfg[ak2]
+    cfg['my_app'] = key
+    cfg['my_sec'] = sec
-        cfg['my_acct'] = _cfg['my_acct_stock']
+        cfg['my_acct'] = acc
-    p["appkey"] = _cfg[ak1]
-    p["appsecret"] = _cfg[ak2]
+    p["appkey"] = key
+    p["appsecret"] = sec
-    _base_headers["appkey"] = _TRENV.my_app
-    _base_headers["appsecret"] = _TRENV.my_sec
+    _base_headers["appkey"] = key
+    _base_headers["appsecret"] = sec

 

여기까지 하면 이제 사용자가 직접 입력한 정보로 API를 사용할 수 있다.

 

추가적으로, API 호출 시 여러 정보를 출력해주는 코드들을 주석처리한다. 이 부분은 그대로 두고 싶다면 그대로 둬도 된다. 245, 249번째 줄이다.

 

if(_DEBUG):
-        print("< Sending Info >")
-        print(f"URL: {url}, TR: {tr_id}")
-        print(f"<header>\n{headers}")
-        print(f"<body>\n{params}")
+        pass
+        ##print("< Sending Info >")
+        ##print(f"URL: {url}, TR: {tr_id}")
+        ##print(f"<header>\n{headers}")
+        ##print(f"<body>\n{params}")
if res.status_code == 200:
         ar = APIResp(res)
-        if (_DEBUG): ar.printAll()
+        ##if (_DEBUG): ar.printAll()

 

이제 예제 스크립트가 필자가 사용하는 것과 똑같이 바뀌었다. 이제 이것을 사용해서 주가 정보를 가져와 보자.

 

반응형

 

2-3. 예제 코드 활용하기

 

필자는 위와 같이 수정한 예제 코드를 평소 활용하는 스크립트로 불러와서 함께 사용하고 있다.


파이썬 파일을 생성한 다음, 예제 코드를 불러오자.

 

import kis_api as kis

 

그다음은 주가 정보 호출에 사용할 함수를 정의한다.

 

def getStock(stknum, company):
    res = kis.get_current_price(stknum)
    # 예제 코드의 함수를 이용해 정보 가져오기
    priceChange = res["prdy_ctrt"]
    # 획득한 데이터 중 가격 변동률을 priceChange로 할당
    symbol = "▲" if float(priceChange) > 0 else "▼" if float(priceChange) < 0 else "-"
    # 가격 변동률 수치에 따라 표시할 기호를 할당
    print(f"{company}: ", res["stck_prpr"], symbol, "(", priceChange, ")")
    # 회사명: 가격, 상승(하락) 기호, 변동률 순으로 결과 출력

 

다음은 주가를 불러오려는 회사의 종목 번호와 회사명을 딕셔너리로 만든다.

 

stocks = {"005930":"삼성전자", "035720":"카카오"}

 

이제 주가 정보를 호출할 준비가 다 됐으니, auth 함수를 이용해서 사용자 인증을 거친다.

 

kis.auth()

 

마지막으로 위에서 정의한 함수를 이용해서 주가 정보를 불러와 출력한다.

 

for stock in stocks.keys():
    getStock(stock, stocks[stock])

 

이렇게 만든 스크립트를 실행하면 다음과 같이 주가 정보를 가져와 출력해 준다. 삼성전자와 카카오의 주가가 급상승한 것이 확인된다.

 

삼성전자:  57800 ▲ ( 4.33 )
카카오:  55700 ▲ ( 4.50 )
반응형

댓글