koreainvestment/open-trading-api

GitHub: koreainvestment/open-trading-api

韩国投资证券官方提供的 Open API 示例代码库,支持 LLM 代理直接调用交易接口,并内置策略设计与回测引擎。

Stars: 1481 | Forks: 795

**[关于我司提供的示例代码的注意事项]** - 示例代码是集成韩国投资证券 Open API(KIS Developers)的演示示例。旨在减轻您的开发负担,仅供参考。 - 示例代码可能会在不另行通知的情况下持续更新。 - 对于因使用示例代码开发的您的程序所造成的任何损失,我司概不负责。 # KIS Open API 示例代码仓库 (支持 LLM) ## 1. 制作意图及目标受众 ### 🎯 制作意图 本仓库旨在让 **ChatGPT、Claude 等 LLM(Large Language Model)** 自动化环境与 Python 开发者 **都能轻松理解并使用韩国投资证券(Korea Investment & Securities)的 Open API**,为此整理了这套示例代码合集。 - `examples_llm/`: 面向 LLM 的功能单元示例代码,使 LLM 能够轻松探索并调用单一 API 功能 - `examples_user/`: 面向用户的集成 API 调用示例代码,用户可利用其实现实际投资及自动化交易 - `strategy_builder/`: 通过可视化 UI 设计交易策略,并根据生成的信号执行买入/卖出 - `backtester/`: 使用历史数据验证所设计策略的回测引擎 [前往韩国投资证券 Open API 门户](https://apiportal.koreainvestment.com/) ### 👤 目标用户 - 首次使用韩国投资证券 Open API 的 Python 开发者 - 现有 Open API 用户中,需要改善代码及学习系统架构的用户 - 希望利用基于 LLM 的代码代理实现股票搜索、行情分析、自动化交易等功能的用户 ## 2. 文件夹结构及主要文件说明 ### 2.1. 文件夹结构 ``` # 项目结构 . ├── README.md # 프로젝트 설명서 ├── strategy_builder/ # 전략 설계 + 시그널 생성 엔진 ← New ├── backtester/ # 백테스팅 엔진 (QuantConnect Lean) ← New │ ├── docs/ │ └── convention.md # 코딩 컨벤션 가이드 ├── examples_llm/ # LLM용 샘플 코드 │ ├── kis_auth.py # 인증 공통 함수 │ ├── auth # 인증(토큰 발급) │ │ ├── auth_token # REST 접근토큰 발급 │ │ └── auth_ws_token # 웹소켓 접속키 발급 │ ├── domestic_bond # 국내채권 │ │ └── inquire_price # API 단일 기능별 폴더 │ │ ├── inquire_price.py # 한줄 호출 파일 (예: 채권 가격 조회) │ │ └── chk_inquire_price.py # 테스트 파일 (예: 채권 가격 조회 결과 검증) │ ├── domestic_futureoption # 국내선물옵션 │ ├── domestic_stock # 국내주식 │ ├── elw # ELW │ ├── etfetn # ETF/ETN │ ├── overseas_futureoption # 해외선물옵션 │ └── overseas_stock # 해외주식 ├── examples_user/ # user용 실제 사용 예제 │ ├── kis_auth.py # 인증 공통 함수 │ ├── auth # 인증(토큰 발급) │ │ ├── auth_functions.py # 인증 함수 모음 │ │ └── auth_examples.py # 인증 실행 예제 │ ├── domestic_bond # 국내채권 │ │ ├── domestic_bond_functions.py # (REST) 통합 함수 파일 (모든 API 함수 모음) │ │ ├── domestic_bond_examples.py # (REST) 실행 예제 파일 (함수 사용법) │ │ ├── domestic_bond_functions_ws.py # (Websocket) 통합 함수 파일 │ │ └── domestic_bond_examples_ws.py # (Websocket) 실행 예제 파일 │ ├── domestic_futureoption # 국내선물옵션 │ ├── domestic_stock # 국내주식 │ ├── elw # ELW │ ├── etfetn # ETF/ETN │ ├── overseas_futureoption # 해외선물옵션 │ └── overseas_stock # 해외주식 ├── legacy/ # 구 샘플코드 보관 ├── stocks_info/ # 종목정보파일 참고 데이터 ├── kis_devlp.yaml # API 설정 파일 (개인정보 입력 필요) ├── pyproject.toml # (uv)프로젝트 의존성 관리 └── uv.lock # (uv)의존성 락 파일 ``` ### 2.2. 支持的主要 API 类别 - 以下类别及文件夹结构同样适用于 examples_llm/ 和 examples_user/ 文件夹。 | 类别 | 说明 | 文件夹名 | | --- | --- | --- | | 认证 | 发放访问令牌、发放 WebSocket 接入密钥 | `auth` | | 国内股票 | 国内股票行情、订单、余额等 | `domestic_stock` | | 国内债券 | 国内债券行情、订单等 | `domestic_bond` | | 国内期货期权 | 国内衍生品相关 | `domestic_futureoption` | | 海外股票 | 海外股票行情、订单等 | `overseas_stock` | | 海外期货期权 | 海外衍生品相关 | `overseas_futureoption` | | ELW | ELW 行情 API | `elw` | | ETF/ETN | ETF、ETN 行情 API | `etfetn` | ### 2.3. 主要文件说明 ### `examples_llm/` - 面向 LLM 的功能单元示例代码 **各 API 独立文件夹结构**:将单一 API 功能分离至独立文件夹,以便 LLM 轻松探索相关代码 - **单行调用文件**:`[函数名].py` – 调用单一功能的最小化代码 (例如: `inquire_price.py`) - **测试文件**:`chk_[函数名].py` – 验证调用结果的测试运行代码 (例如: `chk_inquire_price.py`) ### `examples_user/` - 面向用户的集成示例代码 **各类别独立文件夹结构**:整合每个类别(产品)的所有功能,方便用户轻松探索并运行示例代码 - **集成函数文件**:`[类别]_functions.py` - 整合了该类别所有 API 功能的函数合集 - **运行示例文件**:`[类别]_examples.py` - 基于实际使用案例的运行代码 - **WebSocket 集成函数文件及运行示例文件**:`[类别]_functions_ws.py`, `[类别]_examples_ws.py` ### `kis_auth.py` - 认证及公共功能 - 访问令牌发放及管理 - API 调用公共函数 - 支持实盘/模拟投资环境切换 - 提供 WebSocket 连接设置功能 ### 2.4. AI 交易工具 除示例代码外,还提供了利用 Open API 实现的 **策略设计 → 回测 → 订单执行** pipeline。 ``` graph LR SB[strategy_builder] -->|".kis.yaml"| BT[backtester] BT -->|"검증 완료"| SB SB -->|"BUY/SELL/HOLD"| KIS[KIS Open API] ``` | 目录 | 作用 | 详情 | |----------|------|------| | `strategy_builder/` | 策略设计 + 信号生成 | 80个技术指标,10个预设策略,BUY/SELL/HOLD 信号 ([README](strategy_builder/README.md)) | | `backtester/` | 历史回测 + 参数优化 | 基于 Docker 的 QuantConnect Lean,HTML 报告 ([README](backtester/README.md)) | | `MCP/` | AI 工具连接 | KIS Code Assistant + Trading MCP ([README](MCP/README.MD)) | #### 10个预设策略 `strategy_builder` 和 `backtester` 双方均提供支持。 | # | 策略名 | 类型 | 简要说明 | |---|--------|------|-----------| | 01 | 金交叉 | 趋势跟随 | 短期移动平均线向上突破长期移动平均线时买入 | | 02 | 动量 | 趋势跟随 | 买入近 N 日收益率较高的标的 | | 03 | 52周新高 | 突破交易 | 收盘价刷新 52 周最高价时买入 | | 04 | 连续上涨/下跌 | 趋势跟随 | 连续 N 日收盘价上涨时买入,连续 N 日下跌时卖出 | | 05 | 乖离率 | 逆势 | 根据收盘价/移动平均线比率判断过热(卖出)或低迷(买入) | | 06 | 突破失败 | 止损 | 突破前高后再次回落时止损 | | 07 | 强势收盘 | 动量 | 收盘价在当日最高价附近报收时买入 | | 08 | 波动率扩张 | 突破交易 | 波动率收敛后急剧上涨时买入 | | 09 | 均值回归 | 逆势 | 价格大幅偏离均值时向反方向交易 | | 10 | 趋势过滤器 | 趋势跟随 | 在长期移动平均线上方上涨时买入 | #### .kis.yaml — 共享策略格式 在 `strategy_builder` 中设计的策略导出为 `.kis.yaml` 后,可直接在 `backtester` 中导入进行回测。 格式详情请参考 [strategy_builder/README.md](strategy_builder/README.md#kisyaml-포맷) 或 [backtester/README.md](backtester/README.md#kisyaml-포맷)。 ## 3. 前置环境配置指南 ### 3.1. Python 环境要求 - 需要 **Python 3.11 及以上版本** - 推荐使用 **uv** **包管理器** (快速且便捷的依赖管理) ### 3.2. uv 安装方法 - 为简化配置,推荐使用 uv ``` # Windows (PowerShell) powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # 安装确认 uv --version # uv 0.x.x ... -> 安装完成 ``` ### 3.3. 项目克隆及环境配置 ``` # 克隆仓库 git clone https://github.com/koreainvestment/open-trading-api cd open-trading-api # 使用 uv 安装依赖 - 一行搞定 uv sync ``` ### 3.4. KIS Open API 申请及设置 🍀 [前往服务申请指南](https://apiportal.koreainvestment.com/about-howto) 1. 韩国投资证券 **开户及关联 ID** 2. 在韩国投资证券官网或 App 中申请 **Open API 服务** 3. 获取 **App Key**, **App Secret** 4. 分别准备 **模拟投资** 及 **实盘投资** 的 App Key ### 3.5. kis_devlp.yaml 设置 - 为配置您的账户信息,需修改 `kis_devlp.yaml` 文件。 - 默认路径为 `~/KIS/config/kis_devlp.yaml`。如果文件夹不存在,请先创建。 - 建议将项目根目录下的 `kis_devlp.yaml` 复制到 `~/KIS/config/` 后再进行修改。 - 如果想要更改路径,只需修改 `kis_auth.py` 中的 `config_root` 值即可。 ``` # 创建设置文件夹并复制文件 mkdir -p ~/KIS/config cp kis_devlp.yaml ~/KIS/config/ ``` 1. 打开 `~/KIS/config/kis_devlp.yaml` 文件 2. 输入 **App Key 和 App Secret** 信息 3. 输入 **HTS ID** 信息 4. 输入 **账号** 信息 (区分前 8 位和后 2 位) 5. **保存** 后关闭 ``` # 实盘交易 my_app: "여기에 실전투자 앱키 입력" my_sec: "여기에 실전투자 앱시크릿 입력" # 模拟交易 paper_app: "여기에 모의투자 앱키 입력" paper_sec: "여기에 모의투자 앱시크릿 입력" # HTS ID(KIS Developers 客户 ID) - 用于成交通知、查看我的条件列表等。 my_htsid: "사용자 HTS ID" # 账号前 8 位 my_acct_stock: "증권계좌 8자리" my_acct_future: "선물옵션계좌 8자리" my_paper_stock: "모의투자 증권계좌 8자리" my_paper_future: "모의투자 선물옵션계좌 8자리" # 账号后 2 位 my_prod: "01" # 종합계좌 # my_prod: "03" # 国内期货期权账号 # my_prod: "08" # 海外期货期权账号 # my_prod: "22" # 个人养老金账号 # my_prod: "29" # 退休养老金账号 # User-Agent(建议使用默认值,无需更改) my_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" ``` ### 3.6. 运行文件内的认证设置检查 - 请在需要运行的文件中检查或修改认证相关设置。若要使用国内股票全部功能,请查看 `domestic_stock/domestic_stock_examples.py` 文件。 如下方所示修改 ka.auth() 函数的 svr, product 参数,即可在实盘环境(prod)下使用委托账户(-01)进行交易测试。 ``` import kis_auth as ka # 实盘交易认证 ka.auth(svr="prod", product="01") # 모의투자: svr="vps" ``` ### 3.7. 策略构建器 / 回测器环境配置 (可选) 若需使用策略设计及回测功能,需进行额外配置。 | 项目 | 安装 | 用途 | |------|------|------| | Node.js 18+ | [nodejs.org](https://nodejs.org/) | strategy_builder, backtester 前端 | | Docker Desktop | [docker.com](https://www.docker.com/products/docker-desktop) | backtester (Lean 引擎) | ## 4. 示例代码运行 ### 4.1. 示例代码运行 - **以 examples_user 为标准** ``` # 国内股票示例代码运行 (examples_user/domestic_stock/) uv run python domestic_stock_examples.py # REST 방식 uv run python domestic_stock_examples_ws.py # Websocket 방식 ``` 因为 domestic_stock_examples.py 包含了多个函数,请仅保留您要使用的函数,注释掉其余部分,修改输入值后再进行调用。 - **以 examples_llm 为标准** ``` # 国内股票 > 股票当前价行情示例代码运行 (examples_llm/domestic_stock/inquire_price/) uv run python chk_inquire_price.py ``` examples_llm 中各功能的独立运行文件 (chk_*.py) 已分离,非常适合在仅测试特定功能时使用。 ### 4.2. 示例代码样本 (examples_user) ``` # REST API 调用示例 - domestic_stock_examples.py import sys import logging import pandas as pd sys.path.extend(['..', '.']) import kis_auth as ka from domestic_stock_functions import * # logging 设置 logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s') logger = logging.getLogger(__name__) # 认证 ka.auth() trenv = ka.getTREnv() # 查询三星电子当前价行情 result = inquire_price(env_dv="real", fid_cond_mrkt_div_code="J", fid_input_iscd="005930") print(result) ``` ``` # WebSocket 调用示例 - domestic_stock_examples_ws.py import sys import logging import pandas as pd sys.path.extend(['..', '.']) import kis_auth as ka from domestic_stock_functions_ws import * # logging 设置 logging.basicConfig(level=logging.INFO, format='%(levelname)s - %(message)s') logger = logging.getLogger(__name__) # 认证 ka.auth() ka.auth_ws() trenv = ka.getTREnv() # WebSocket 声明 kws = ka.KISWebSocket(api_url="/tryitout") # 订阅三星电子、SK海力士实时报价 kws.subscribe(request=asking_price_krx, data=["005930", "000660"]) ``` ### 4.3. 策略构建器 / 回测器运行 ``` # Strategy Builder (策略设计 + signal) cd strategy_builder ./start.sh # Backtester (backtesting) cd backtester ./start.sh ``` 详细的运行方法请参考各目录下的 README: - [strategy_builder/README.md](strategy_builder/README.md) - [backtester/README.md](backtester/README.md) ## 5. 问题排查指南 ### 令牌错误时 ``` import kis_auth as ka # Token 重新签发 - 每分钟签发 1 次。 ka.auth(svr="prod") # 또는 "vps" ``` ### 配置文件错误时 - 检查 `kis_devlp.yaml` 文件中的 App Key、App Secret 是否正确 - 检查账号格式是否匹配 (前 8 位 + 后 2 位) - 如果在使用实时行情 (WebSocket) 时出现 'No close frame received' 错误,请检查您在 `kis_devlp.yaml` 中输入的 HTS ID 是否准确 ### 依赖错误时 ``` # 重新安装依赖 uv sync --reinstall ``` ### Docker 错误 (backtester) ``` docker info # Docker Desktop 실행 상태 확인 docker images | grep lean # Lean 이미지 확인 (첫 실행 시 자동 다운로드) ``` ### 超出每秒交易请求数限制 (`EGW00201`) 模拟投资账户的 REST API 调用限制较低。 单一查询没有问题,但如果是像参数优化这样需要大量连续调用的场景,建议使用实盘投资账户。 # 📧 咨询事项 - 请随时在 [💬 韩国投资证券 Open API 聊天机器人](https://chatgpt.com/g/g-68b920ee7afc8191858d3dc05d429571-hangugtujajeunggweon-open-api-seobiseu-gpts) 中提问您遇到的疑惑。
标签:API SDK, LLM集成, MITM代理, Python, 回测系统, 无后门, 自动交易, 证券交易, 请求拦截, 逆向工具, 量化交易