{"id":48045198,"url":"https://github.com/breadum/kiwoom","last_synced_at":"2026-04-04T14:17:24.518Z","repository":{"id":52918877,"uuid":"300486609","full_name":"breadum/kiwoom","owner":"breadum","description":"키움증권 OpenAPI 파이썬 심플 라이브러리","archived":false,"fork":false,"pushed_at":"2025-09-14T12:57:52.000Z","size":285,"stargazers_count":178,"open_issues_count":2,"forks_count":51,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-12-02T04:51:48.234Z","etag":null,"topics":["algorithmic-trading","kiwoom","openapi","stock","trading-systems"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/breadum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-10-02T03:05:10.000Z","updated_at":"2025-11-30T13:10:52.000Z","dependencies_parsed_at":"2023-12-19T08:02:46.826Z","dependency_job_id":"3d08f5d2-5216-4ebf-9030-e175fb663378","html_url":"https://github.com/breadum/kiwoom","commit_stats":{"total_commits":165,"total_committers":3,"mean_commits":55.0,"dds":"0.024242424242424288","last_synced_commit":"3f7c70e5c35ec665ad1a49ea11214702936af087"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/breadum/kiwoom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breadum%2Fkiwoom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breadum%2Fkiwoom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breadum%2Fkiwoom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breadum%2Fkiwoom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/breadum","download_url":"https://codeload.github.com/breadum/kiwoom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/breadum%2Fkiwoom/sbom","scorecard":{"id":251709,"data":{"date":"2025-08-11","repo":{"name":"github.com/breadum/kiwoom","commit":"f35fedd0ac70b7e62cb80ea5a2e26d0bf49c4c74"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"14 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T08:38:19.088Z","repository_id":52918877,"created_at":"2025-08-17T08:38:19.088Z","updated_at":"2025-08-17T08:38:19.088Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31402279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithmic-trading","kiwoom","openapi","stock","trading-systems"],"created_at":"2026-04-04T14:17:23.834Z","updated_at":"2026-04-04T14:17:24.472Z","avatar_url":"https://github.com/breadum.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kiwoom Open API+\nSimple Python Wrapper for Kiwoom Open API+ (Stable)\n\n## News\n\n- '너의 투자를 알라' 스마트 매매일지 솔루션 알파노트를 오픈했습니다.\n\n- 껄무새는 이제 그만, 알파노트에서 쉽고 간편하게 투자 내역을 기록하고 분석하세요.\n\n- 스터디 하려고 시작한건데 어느덧 출시까지 해버렸네요. 많은 관심 부탁드립니다! \n  \n- [https://alphanote.io](https://alphanote.io/?utm_source=git)\n  \n## What is it?\n\n- 키움증권에서 제공하는 Open API+ 인터페이스 사용을 위한 간단한 Python Wrapper 모듈\n\n- PyQt5를 이용해 직접 개발하고자 하는 사람을 위한 모듈로 부가적인 기능은 최대한 배제\n\n- 기존 OCX 방식이 아닌 Async 기반 REST API 방식으로 개발하실 분은 [이곳][rest]을 참조  \n  \n## Main Features\n\n#### 1. Open API+ 함수 호출 간소화\n\n- 함수명과 변수명을 깔끔하게 Python 방식으로 통일\n\n\u003e ```python\n\u003e # Before\n\u003e OnReceiveTrCondition(BSTR sScrNo, BSTR strCodeList, BSTR strConditionName, int nIndex, int nNext)\n\u003e \n\u003e # After\n\u003e on_receive_tr_condition(scr_no, code_list, condition_name, index, next)\n\u003e ```\n\n- 반복되는 dynamicCall 제거 \n\n\u003e ```python\n\u003e # Before\n\u003e self.dynamicCall(\"CommRqData(QString, QString, Int, QString)\", rq_name, tr_code, prev_next, scr_no)\n\u003e \n\u003e # After\n\u003e self.comm_rq_data(rq_name, tr_code, prev_next, scr_no)\n\u003e ```\n\n#### 2. 간단한 기능 지원\n\n- 로그인 기능\n\n\u003e ```python\n\u003e from kiwoom import *\n\u003e api = Kiwoom()\n\u003e api.login()\n\u003e ```\n\n- loop / unloop 함수를 통해 간단히 코드 실행 / 대기 제어\n\n\u003e ```python\n\u003e from kiwoom import *\n\u003e\n\u003e # QEventLoop 활용\n\u003e api = Kiwoom()\n\u003e api.loop()\n\u003e api.unloop()\n\u003e ```\n\n- 요청 후 처리 결과를 반환하는 함수에 한해 에러 발생 시 메세지 자동 발생\n\n\u003e ```python\n\u003e # 구현되어있는 메인 클래스\n\u003e class Kiwoom(API):\n\u003e     ...\n\u003e     # 만일 send_order() 실행 후 정상처리 되지 않았다면 @catch_error 에서 에러 메세지 자동 발생\n\u003e     # ex) An error occured from send_order,  \"-308 : OP_ERR_ORD_OVERFLOW (주문전송과부하)\"\n\u003e     @catch_error\n\u003e     def send_order(self, rq_name, scr_no, acc_no, ord_type, code, qty, price, hoga_gb, org_order_no):\n\u003e         return super().send_order(rq_name, scr_no, acc_no, ord_type, code, qty, price, hoga_gb, org_order_no)\n\u003e     ...\n\n- [주가 \u0026 지수 Historical Market Data 24시간 다운로더][tut3]\n\n\u003e ```python\n\u003e from kiwoom import *\n\u003e\n\u003e # 지정번호 확인\n\u003e print(config.MARKETS)  # {'0': 'KOSPI', '3': 'ELW', ... }\n\u003e print(config.SECTORS)  # {'001': '종합(KOSPI)', '002': '대형주', ... }\n\u003e \n\u003e # 다운로드\n\u003e api = Kiwoom()\n\u003e api.histories(market='0', period='tick', start='20201001', merge=True)  # KOSPI Stocks\n\u003e api.histories(sector='2', period='tick', start='20201001', merge=True)  # KOSPI200 Index\n\u003e ```\n\n- 순수한 API 기능만을 사용해 직접 개발하고 싶은 경우\n\n\u003e ```python\n\u003e from kiwoom import API\n\u003e\n\u003e # API 파이썬 래핑 \n\u003e class Kiwoom(API):\n\u003e     # Overriding Here\n\u003e     def __init__(self):\n\u003e         super().__init__()\n\u003e ```\n\n#### 3. 통신을 위한 체계적인 코드 작성 지원\n\n- 데이터를 요청하는 함수와 데이터를 받는 함수를 분리해서 작성 \n\n- Signal에 해당하는 'Bot' 클래스와 Slot에 해당하는 'Server' 클래스\n\n- 작성 후 Kiwoom.connect() 함수로 서로 연결시켜 서버에서 응답 시 자동 호출 지원\n\n- 자세한 내용 및 코드는 [튜토리얼][tutorial] 중 [5. TR 데이터][tut5] 항목을 통해 확인 가능\n\n\u003e ```python\n\u003e from kiwoom import Bot\n\u003e\n\u003e # 서버에 데이터를 요청하는 클래스 (사용자 작성)\n\u003e class MyBot(Bot):\n\u003e     def __init__(self, server):\n\u003e         super().__init__(server)\n\u003e\n\u003e         # 1) Kiwoom.set_connect_hook(event, param)\n\u003e         # 이벤트 OnReceiveTrData 발생 시 주어진 rq_name 인자값에 따라 slot을 호출하도록 설정\n\u003e         # 만일 설정하지 않는다면, 하나의 이벤트에는 하나의 slot만 연결가능\n\u003e         self.api.set_connect_hook('on_receive_tr_data', 'rq_name')\n\u003e\n\u003e         # 2) Kiwoom.connect(event, signal, slot, key=None)\n\u003e         # OnReceiveTrData 이벤트에 대하여 1)에 의해 특정 rq_name 값에 따라 signal과 slot을 연결\n\u003e         # key 값이 주어지지 않을 시, rq_name은 signal과 slot의 함수 이름 'balance'로 자동 설정\n\u003e         self.api.connect(\n\u003e             event='on_receive_tr_data',\n\u003e             signal=self.balance, \n\u003e             slot=self.server.balance,\n\u003e         )\n\u003e \n\u003e         # 1)과 2) 연결 설정 후에는 다음과 같이 활용할 수 있다.\n\u003e         # on_receive_tr_data(..., rq_name='balance', ...) 이벤트 수신 시 server.balance 자동 호출됨\n\u003e         # self.api.signal('on_receive_tr_event', 'balance') 호출 시 bot.balance 함수 핸들 반환\n\u003e         # self.api.slot('on_receive_tr_event', 'balance') 호출 시 server.balance 함수 핸들 반환 \n\u003e\n\u003e         # 참고 가이드          \n\u003e         # 1) print(config.events)  # 이벤트 목록\n\u003e         # 2) print(Kiwoom.api_arg_spec('on_receive_tr_data'))  # 함수인자 목록\n\u003e         # 3) help(Kiwoom.connect) and help(Kiwoom.set_connect_hook)  # Doc String\n\u003e         # 4) Github 튜토리얼 (https://github.com/breadum/kiwoom/tree/main/tutorials)\n\u003e     \n\u003e     def balance(self, prev_next='0'):\n\u003e         ...\n\u003e         # '계좌평가잔고내역'을 받기 위해 서버로 rq_name='balance'로 요청 전송\n\u003e         self.api.comm_rq_data(rq_name='balance', tr_code='opw00018', prev_next='0', scr_no='0000')\n\u003e         self.api.loop()  # 이벤트가 호출 될 때까지 대기\n\u003e         ...\n\u003e\n\u003e     def run(self):\n\u003e         # 버전처리 및 로그인 \n\u003e         self.login()\n\u003e\n\u003e         # 계좌평가잔고내역 요청\n\u003e         self.balance()\n\u003e\n\u003e         # 전송된 데이터 확인\n\u003e         print(self.share['balance']['예탁금'])\n\u003e ```\n\u003e ```python\n\u003e from kiwoom import Server\n\u003e \n\u003e # 서버에서 데이터를 받아 처리하는 클래스 (사용자 작성)\n\u003e class MyServer(Server):\n\u003e     def __init__(self):\n\u003e         super().__init__()\n\u003e         self.downloading = False\n\u003e\n\u003e     def balance(self, scr_no, rq_name, tr_code, record_name, prev_next):\n\u003e         ...\n\u003e         # 만일 데이터가 더 있을 경우 연결했던 Signal 함수 다시 호출\n\u003e         if prev_next == '2':\n\u003e             fn = self.api.signal('on_receive_tr_data', rq_name)  # rq_name='balance'\n\u003e             fn(prev_next)  # Bot.balance(prev_next='2')\n\u003e\n\u003e         # 데이터를 다 받았다면 unloop을 통해 대기중인 코드 실행\n\u003e         else:\n\u003e             ...\n\u003e             self.downloading = False\n\u003e             self.api.unloop()\n\u003e ```\n\u003e ```python\n\u003e # 구현되어있는 메인 클래스\n\u003e class Kiwoom(API):\n\u003e     ...\n\u003e     # rq_name = 'balance'라면, @map 데코레이터가 매핑된 함수를 자동 호출\n\u003e     # \u003e\u003e slot.balance(scr_no, rq_name, tr_code, record_name, prev_next, *args)\n\u003e     @map\n\u003e     def on_receive_tr_data(self, scr_no, rq_name, tr_code, record_name, prev_next, *args):\n\u003e         pass\n\u003e ```\n\n- 간단한 실행 스크립트 예시 (여러가지 방식 가능)\n\n\u003e ```python \n\u003e from PyQt5.QtWidgets import QApplication\n\u003e from kiwoom import *\n\u003e import sys\n\u003e\n\u003e     \n\u003e if __name__ == '__main__':\n\u003e\n\u003e     # 통신을 위해 QApplication 활용\n\u003e     app = QApplication(sys.argv)\n\u003e\n\u003e     # 인스턴스 생성\n\u003e     bot = MyBot(MyServer())\n\u003e    \n\u003e     # 봇 작동시작\n\u003e     bot.run() \n\u003e\n\u003e     # 데이터 통신을 위해 스크립트 종료 방지\n\u003e     app.exec()\n\u003e ```\n\n#### 4. 디버깅을 위한 에러 출력\n\n- PyQt5 모듈을 사용하는 경우 Pycharm과 같은 IDE 사용 시 에러 메세지가 발생하지 않는 문제 해결\n\n## Tutorial\n\n- [튜토리얼 및 모듈구조][tutorial]\n\n   [1. 뼈대코드][tut1]\n   \n   [2. 로그인][tut2]\n   \n   [3. 시장데이터][tut3]\n   \n   [4. 계좌확인][tut4]\n   \n   [5. TR 데이터][tut5]\n   \n   [6. 트레이딩][tut6]\n   \n   [7. 매매내역 조회][tut7]\n   \n## Installation\n\n#### Prerequisite\n\n##### 1. 키움 Open API+ 사용 신청 (Step1), 모듈 다운로드 (Step2), KOA Studio 다운로드 (Step3)\n\n- [키움증권 Open API+ 신청 페이지][openapi]\n\n##### 2. 32-bit Python 3.7 이상 Windows 환경 세팅\n\n- 키움 Open API+ 활용 시 필수조건\n\n- Anaconda 64-bit 에서 32-bit 가상환경 생성 시 유의사항\n\n\u003e ```bash\n\u003e # 실제로 작동되지 않는 방식\n\u003e set CONDA_FORCE_32BIT=1  \n\u003e\n\u003e # 작동되는 방식 \n\u003e conda create -n 32bit  # 가상환경 생성\n\u003e conda activate 32bit  # 가상환경 실행\n\u003e conda config --env --set subdir win-32  # 현위치에서 32bit 설정\n\u003e conda install python=3.10  # Python 3.8/3.9/3.10/3.11 설치\n\u003e conda install 'pandas\u003c2.0'  # 32bit Pandas 별도 설치\n\u003e ```\n\n- 아래 코드로 '32Bit'인지 반드시 확인 후 설치\n\n\u003e ```python\n\u003e import platform; print(platform.architecture())\n\u003e ```\n\n##### 3. KOA Studio를 활용해 간단한 데이터 조회로 정상작동 여부 확인 필수\n\n- 키움에서 Open API+ 모듈을 받아도 처음 실행 시 여러가지 오류 발생\n\n     키움 OpenAPI 등록, 타인계좌 사용불가, AhnLab Safe Transaction 설치 등등  \n\n- 먼저 KOA Studio를 통해 오류 확인 및 해결 후 파이썬 모듈 설치\n\n- 키움 OpenAPI 등록, 모의투자 신청, 버전처리, 계좌비밀번호 저장(AUTO) 등을 확인\n\n#### Install from pip\n\n\u003e ```bash\n\u003e pip install kiwoom\n\u003e ```\n\n#### Install from source\n\n\u003e ```bash\n\u003e # After git clone and cd into the dir\n\u003e git clone https://github.com/breadum/kiwoom.git \u0026\u0026 cd kiwoom\n\u003e python3 setup.py install\n\u003e ```\n\n## License\n\n- [MIT License][mit]\n\n## Finally\n\n- 본 프로젝트의 개발자는 키움증권과 아무런 관련이 없습니다.\n\n- 엉망인 키움 Open API를 활용하여 시스템을 직접 개발할 때 도움이 되고자 개발했습니다.\n\n- 발생한 어떠한 손실에 대하여 어떻게 발생하였든지 개발자는 이에 대해 아무런 책임이 없음을 알립니다.\n\n- 버그, 기능요청, 문의사항 등은 [Github 이슈 게시판][issue]을 통해 남겨주세요.\n\n\n[rest]: https://github.com/breadum/kiwoom-restful\n[openapi]: https://www3.kiwoom.com/h/customer/download/VOpenApiInfoView?dummyVal=0\n[mit]: https://github.com/breadum/kiwoom/blob/main/LICENSE\n[issue]: https://github.com/breadum/kiwoom/issues\n[tutorial]: https://github.com/breadum/kiwoom/tree/main/tutorials\n[tut1]: https://github.com/breadum/kiwoom/blob/main/tutorials/1.%20Basic%20Structure.py\n[tut2]: https://github.com/breadum/kiwoom/blob/main/tutorials/2.%20Login.py\n[tut3]: https://github.com/breadum/kiwoom/blob/main/tutorials/3.%20Historical%20Data.py\n[tut4]: https://github.com/breadum/kiwoom/blob/main/tutorials/4.%20Account.py\n[tut5]: https://github.com/breadum/kiwoom/blob/main/tutorials/5.%20TR%20Data.py\n[tut6]: https://github.com/breadum/kiwoom/blob/main/tutorials/6.%20Trading.py\n[tut7]: https://github.com/breadum/kiwoom/blob/main/tutorials/7.%20Trading%20Records.py\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbreadum%2Fkiwoom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbreadum%2Fkiwoom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbreadum%2Fkiwoom/lists"}