• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

elbakramer/koapy: KOAPY 는 키움 OpenAPI 를 Python 에서 쉽게 사용할 수 있도록 만 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

elbakramer/koapy

开源软件地址:

https://github.com/elbakramer/koapy

开源编程语言:

Python 99.6%

开源软件介绍:

KOAPY

Kiwoom Open Api Plus Python

Introduction

KOAPY 는 키움증권의 OpenAPI+Python 에서 쉽게 사용할 수 있도록 만든 라이브러리 패키지 및 툴입니다.

키움에서 제공하는 OpenAPI+ 를 활용하는데 필요한 구체적인 지식들을 전혀 알지 못해도, 기본적인 Python 에 대한 지식만 어느 정도 있다면 쉽게 사용할 수 있도록 하는 것에 초점을 두었습니다.

예를 들어 Python 기준으로 아래와 같은 내용들을 잘 모르더라도 충분히 모든 기능을 사용할 수 있음을 의미합니다.

  • 키움에서 제공하는 OpenAPI+ 의 OCX 라이브러리 구조
  • OCX 를 Python 에서 구동하기 위해 PyQt5/PySide2 라이브러리의 QAxWidget 생성
  • 컨트롤에서 함수 호출을 위해 dynamicCall 함수 사용
  • 이벤트 처리를 위해 적절한 signal/slot 설정 및 이벤트 처리

Showcase

테이블 데이터 처리를 위한 pandas 임포트

>>> import pandas as pd

엔트리포인트 객체 생성

>>> from koapy import KiwoomOpenApiPlusEntrypoint
>>> entrypoint = KiwoomOpenApiPlusEntrypoint()

키움증권 서버와의 연결 확인 및 로그인 처리

>>> entrypoint.IsConnected()
False
>>> entrypoint.EnsureConnected()
True
>>> entrypoint.IsConnected()
True

종목 리스트 및 종목 코드와 이름 확인

>>> code_list = entrypoint.GetCodeListByMarketAsList("0")
>>> code_list
['000020', '000040', '000050', '000060', '000070', ...]
>>> name_list = [entrypoint.GetMasterCodeName(code) for code in code_list]
>>> name_list
['동화약품', 'KR모터스', '경방', '메리츠화재', '삼양홀딩스', ...]
>>> code_by_name = {name: code for code, name in zip(code_list, name_list)}
>>> name = "삼성전자"
>>> code = code_by_name[name]
>>> code
'005930'

단일 종목의 기본정보 확인

>>> info = entrypoint.GetStockBasicInfoAsDict(code)
>>> info
{'종목코드': '005930', '종목명': '삼성전자', '결산월': '12', '액면가': '100', '자본금': '7780', '상장주식': '5969783', '신용비율': '+0.12', '연중최고': '+79800', '연중최저': '-71200', '시가총액': '4417639', '시가총액비중': '', '외인소진률': '+52.09', '대용가': '57170', 'PER': '19.27', 'EPS': '3841', 'ROE': '10.0', 'PBR': '1.88', 'EV': '5.09', 'BPS': '39406', '매출액': '2368070', '영업이익': '359939', '당기순이익': '264078', '250최고': '+86400', '250최저': '-68300', '시가': '+74300', '고가': '+74600', '저가': '+73400', '상한가': '+95200', '하한가': '-51400', '기준가': '73300', '예상체결가': '-0', '예상체결수량': '0', '250최고가일': '20210202', '250최고가대비율': '-14.35', '250최저가일': '20211013', '250최저가대비율': '+8.35', '현재가': '+74000', '대비기호': '2', '전일대비': '+700', '등락율': '+0.95', '거래량': '12730034', '거래대비': '-71.74', '액면가단위': '원', '유통주식': '4459119', '유통비율': '74.7'}

복수 종목의 기본정보 확인

>>> code_list_info = entrypoint.GetStockQuoteInfoAsDataFrame(code_list)
>>> code_list_info
        종목코드                      종목명     현재가    기준가   전일대비 전일대비기호    등락율  \
0     000020                     동화약품  +12450  12300   +150      2  +1.22
1     000040                    KR모터스    +810    790    +20      2  +2.53
2     000050                       경방  +14450  14200   +250      2  +1.76
3     000060                    메리츠화재   49450  49450      0      3   0.00
4     000070                    삼양홀딩스  +90700  88400  +2300      2  +2.60
...      ...                      ...     ...    ...    ...    ...    ...
1744  580031  KB 인버스 KOSDAQ150 선물 ETN  -10930  10960    -30      5  -0.27
1745  580032     KB 레버리지 구리 선물 ETN(H)  -20515  20560    -45      5  -0.22
1746  580033   KB 인버스 2X 구리 선물 ETN(H)  +18350  18280    +70      2  +0.38
1747  580010         KB Wise 분할매매 ETN  +10820  10770    +50      2  +0.46
1748  590018       미래에셋 중국 심천 100 ETN  +18810  18645   +165      2  +0.88

        거래량   거래대금   체결량  ...    ELW만기일 미결제약정 미결제전일대비 이론가 내재변동성 델타 감마 쎄타 베가  \
0     135513   1670  +500  ...  00000000
1     230165    186   -10  ...  00000000
2       6214     89    97  ...  00000000
3     411584  20423    -4  ...  00000000
4       9052    813    +5  ...  00000000
...      ...    ...   ...  ...       ...   ...     ...  ..   ... .. .. .. ..
1744       2      0    -1  ...  00000000
1745       0      0        ...  00000000
1746      17      0   +10  ...  00000000
1747       0      0        ...  00000000
1748       1      0    +1  ...  000000000
1
2
3
4
...  ..
1744
1745
1746
1747
1748

[1749 rows x 63 columns]

특정 종목의 차트 데이터 확인

>>> chart_data = entrypoint.GetDailyStockDataAsDataFrame(code)
>>> chart_data
        종목코드    현재가       거래량     거래대금        일자     시가     고가     저가 수정주가구분  \
0     005930  74000  12730034   941413  20220204  74300  74600  73400
1             73300  17744721  1314506  20220203  74900  74900  73300
2             73300  21367447  1552586  20220128  71300  73700  71200
3             71300  22274777  1603685  20220127  73800  74000  71300
4             73300  12976730   955547  20220126  73900  74400  73100
...      ...    ...       ...      ...       ...    ...    ...    ...    ...
9797           8010      4970        1  19850109   8240   8240   7950
9798           8300     12930        4  19850108   8400   8400   8300
9799           8410     11810        3  19850107   8400   8500   8390
9800           8390      1660        0  19850105   8400   8440   8390
9801           8450      1710        0  19850104   8500   8500   8450

    수정비율 대업종구분 소업종구분 종목정보 수정주가이벤트 전일종가
0
1
2
3
4
...   ...   ...   ...  ...     ...  ...
9797
9798
9799
9800
9801

[9802 rows x 15 columns]

키움증권의 TR 메타 정보 확인

>>> from koapy import KiwoomOpenApiPlusTrInfo
>>> tr_info_list = KiwoomOpenApiPlusTrInfo.get_trinfo_list()
>>> data = pd.DataFrame.from_records([(info.tr_code, info.name) for info in tr_info_list], columns=['tr_code', 'name'])
>>> data
      tr_code             name
0    opt10001         주식기본정보요청
1    opt10059      종목별투자자기관별요청
2    opt10087         시간외단일가요청
3    opt50037       코스피200지수요청
4    opt90005       프로그램매매추이요청
..        ...              ...
220  opw20013  계좌미결제청산가능수량조회요청
221  opw20014     선옵실시간증거금산출요청
222  opw20015    옵션매도주문증거금현황요청
223  opw20016      신용융자 가능종목요청
224  opw20017        신용융자 가능문의

[225 rows x 2 columns]

OPT10001 TR 요청 전송 및 응답 처리 (싱글데이터)

>>> opt10001_info = KiwoomOpenApiPlusTrInfo.get_trinfo_by_code("opt10001")
>>> opt10001_info
KiwoomOpenApiPlusTrInfo('opt10001', '주식기본정보요청', 'STOCK', '', '1', '', [KiwoomOpenApiPlusTrInfo.Field('종목코드', 0, 6, 9001)], '주식기본정보', [KiwoomOpenApiPlusTrInfo.Field('종목코드', 0, 20, 389), KiwoomOpenApiPlusTrInfo.Field('종목명', 20, 50, 302), KiwoomOpenApiPlusTrInfo.Field('결산월', 40, 20, 315), KiwoomOpenApiPlusTrInfo.Field('액면가', 60, 20, 310), KiwoomOpenApiPlusTrInfo.Field('자본금', 80, 20, 309), KiwoomOpenApiPlusTrInfo.Field('상장주식', 100, 20, 312), KiwoomOpenApiPlusTrInfo.Field('신용비율', 120, 20, 329), KiwoomOpenApiPlusTrInfo.Field('연중최고', 140, 20, 1006), KiwoomOpenApiPlusTrInfo.Field('연중최저', 160, 20, 1009), KiwoomOpenApiPlusTrInfo.Field('시가총액', 180, 20, 311), KiwoomOpenApiPlusTrInfo.Field('시가총액비중', 200, 20, 336), KiwoomOpenApiPlusTrInfo.Field('외인소진률', 220, 20, 314), KiwoomOpenApiPlusTrInfo.Field('대용가', 240, 20, 308), KiwoomOpenApiPlusTrInfo.Field('PER', 260, 20, 1600), KiwoomOpenApiPlusTrInfo.Field('EPS', 280, 20, 1604), KiwoomOpenApiPlusTrInfo.Field('ROE', 300, 20, 1630), KiwoomOpenApiPlusTrInfo.Field('PBR', 320, 20, 1601), KiwoomOpenApiPlusTrInfo.Field('EV', 340, 20, 1608), KiwoomOpenApiPlusTrInfo.Field('BPS', 360, 20, 1605), KiwoomOpenApiPlusTrInfo.Field('매출액', 380, 20, 1610), KiwoomOpenApiPlusTrInfo.Field('영업이익', 400, 20, 1611), KiwoomOpenApiPlusTrInfo.Field('당기순이익', 420, 20, 1614), KiwoomOpenApiPlusTrInfo.Field('250최고', 440, 20, 1000), KiwoomOpenApiPlusTrInfo.Field('250최저', 460, 20, 1003), KiwoomOpenApiPlusTrInfo.Field('시가', 480, 20, 16), KiwoomOpenApiPlusTrInfo.Field('고가', 500, 20, 17), KiwoomOpenApiPlusTrInfo.Field('저가', 520, 20, 18), KiwoomOpenApiPlusTrInfo.Field('상한가', 540, 20, 305), KiwoomOpenApiPlusTrInfo.Field('하한가', 560, 20, 306), KiwoomOpenApiPlusTrInfo.Field('기준가', 580, 20, 307), KiwoomOpenApiPlusTrInfo.Field('예상체결가', 600, 20, 10023), KiwoomOpenApiPlusTrInfo.Field('예상체결수량', 620, 20, 10024), KiwoomOpenApiPlusTrInfo.Field('250최고가일', 640, 20, 1001), KiwoomOpenApiPlusTrInfo.Field('250최고가대비율', 660, 20, 1002), KiwoomOpenApiPlusTrInfo.Field('250최저가일', 680, 20, 1004), KiwoomOpenApiPlusTrInfo.Field('250최저가대비율', 700, 20, 1005), KiwoomOpenApiPlusTrInfo.Field('현재가', 720, 20, 10), KiwoomOpenApiPlusTrInfo.Field('대비기호', 740, 20, 25), KiwoomOpenApiPlusTrInfo.Field('전일대비', 760, 20, 11), KiwoomOpenApiPlusTrInfo.Field('등락율', 780, 20, 12), KiwoomOpenApiPlusTrInfo.Field('거래량', 800, 20, 13), KiwoomOpenApiPlusTrInfo.Field('거래대비', 820, 20, 30), KiwoomOpenApiPlusTrInfo.Field('액면가단위', 840, 20, 796), KiwoomOpenApiPlusTrInfo.Field('유통주식', 840, 20, 1683), KiwoomOpenApiPlusTrInfo.Field('유통비율', 840, 20, 1684)], '', [])

>>> opt10001_info.inputs
[KiwoomOpenApiPlusTrInfo.Field('종목코드', 0, 6, 9001)]

>>> opt10001_info.single_outputs
[KiwoomOpenApiPlusTrInfo.Field('종목코드', 0, 20, 389), KiwoomOpenApiPlusTrInfo.Field('종목명', 20, 50, 302), KiwoomOpenApiPlusTrInfo.Field('결산월', 40, 20, 315), KiwoomOpenApiPlusTrInfo.Field('액면가', 60, 20, 310), KiwoomOpenApiPlusTrInfo.Field('자본금', 80, 20, 309), KiwoomOpenApiPlusTrInfo.Field('상장주식', 100, 20, 312), KiwoomOpenApiPlusTrInfo.Field('신용비율', 120, 20, 329), KiwoomOpenApiPlusTrInfo.Field('연중최고', 140, 20, 1006), KiwoomOpenApiPlusTrInfo.Field('연중최저', 160, 20, 1009), KiwoomOpenApiPlusTrInfo.Field('시가총액', 180, 20, 311), KiwoomOpenApiPlusTrInfo.Field('시가총액비중', 200, 20, 336), KiwoomOpenApiPlusTrInfo.Field('외인소진률', 220, 20, 314), KiwoomOpenApiPlusTrInfo.Field('대용가', 240, 20, 308), KiwoomOpenApiPlusTrInfo.Field('PER', 260, 20, 1600), KiwoomOpenApiPlusTrInfo.Field('EPS', 280, 20, 1 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap