# AmazingData 金融数据服务平台 - API 开发文档 ## 一、API 概述 ### 1.1 基本信息 - **Base URL**: `http://localhost:8000/api/v1` - **认证方式**: JWT Bearer Token - **数据格式**: JSON - **编码**: UTF-8 ### 1.2 认证说明 除登录接口外,所有接口都需要在请求头中携带 JWT Token: ``` Authorization: Bearer {access_token} ``` --- ## 二、认证接口 ### 2.1 用户登录 **接口**: `POST /auth/login` **功能**: 用户登录获取 JWT Token **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | username | string | 是 | 用户名 | | password | string | 是 | 密码 | **请求示例**: ```json { "username": "admin", "password": "admin123" } ``` **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | code | int | 状态码 (200成功) | | message | string | 消息 | | data.access_token | string | JWT Token | | data.token_type | string | Token类型 (bearer) | | data.expires_in | int | 有效期(秒) | **响应示例**: ```json { "code": 200, "message": "登录成功", "data": { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "expires_in": 86400 } } ``` **调用示例**: ```python import requests response = requests.post( 'http://localhost:8000/api/v1/auth/login', json={'username': 'admin', 'password': 'admin123'} ) token = response.json()['data']['access_token'] ``` --- ### 2.2 获取当前用户信息 **接口**: `GET /auth/me` **功能**: 获取当前登录用户信息 **请求参数**: 无 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.id | int | 用户ID | | data.username | string | 用户名 | | data.email | string | 邮箱 | | data.role | string | 角色 | | data.is_active | bool | 是否激活 | **调用示例**: ```python headers = {'Authorization': f'Bearer {token}'} response = requests.get('http://localhost:8000/api/v1/auth/me', headers=headers) user_info = response.json()['data'] ``` --- ## 三、SDK配置接口 ### 3.1 获取SDK配置列表 **接口**: `GET /configs/sdk` **功能**: 获取所有SDK配置列表 **请求参数**: 无 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.items | array | 配置列表 | | data.total | int | 总数 | **调用示例**: ```python response = requests.get('http://localhost:8000/api/v1/configs/sdk', headers=headers) configs = response.json()['data']['items'] ``` --- ### 3.2 创建SDK配置 **接口**: `POST /configs/sdk` **功能**: 创建新的SDK配置 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | name | string | 是 | 配置名称 | | username | string | 是 | SDK用户名 | | password | string | 是 | SDK密码 | | host | string | 是 | 服务器地址 | | port | int | 否 | 端口号 (默认8600) | | local_path | string | 否 | 本地路径 | | is_default | bool | 否 | 是否默认配置 | **请求示例**: ```json { "name": "生产环境SDK", "username": "your_username", "password": "your_password", "host": "140.206.44.234", "port": 8600, "is_default": true } ``` **调用示例**: ```python response = requests.post( 'http://localhost:8000/api/v1/configs/sdk', headers=headers, json={ 'name': '生产环境SDK', 'username': 'your_username', 'password': 'your_password', 'host': '140.206.44.234', 'port': 8600, 'is_default': True } ) ``` --- ### 3.3 测试SDK连接 **接口**: `POST /configs/sdk/{id}/test` **功能**: 测试指定SDK配置的连接 **请求参数**: 无 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.success | bool | 是否成功 | | data.message | string | 消息 | | data.response_time | float | 响应时间(秒) | **调用示例**: ```python response = requests.post( 'http://localhost:8000/api/v1/configs/sdk/1/test', headers=headers, timeout=60 ) result = response.json()['data'] ``` --- ## 四、基础数据接口 ### 4.1 获取代码列表 **接口**: `GET /base/codes` **功能**: 获取指定类型的证券代码列表 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | security_type | string | 是 | 证券类型 | **证券类型**: - `EXTRA_STOCK_A`: 沪深A股 - `EXTRA_FUTURE`: 期货 - `EXTRA_ETF`: ETF - `EXTRA_INDEX_A`: 指数 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data | array | 代码列表 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/base/codes', params={'security_type': 'EXTRA_STOCK_A'}, headers=headers ) codes = response.json()['data'] ``` --- ### 4.2 获取交易日历 **接口**: `GET /base/calendar` **功能**: 获取指定市场的交易日历 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | market | string | 是 | 市场代码 (SH, SZ, CFE) | | start_date | string | 否 | 开始日期 (YYYYMMDD) | | end_date | string | 否 | 结束日期 (YYYYMMDD) | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data | array | 交易日列表 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/base/calendar', params={ 'market': 'SH', 'start_date': '20240101', 'end_date': '20240131' }, headers=headers ) trading_days = response.json()['data'] ``` --- ### 4.3 获取证券信息 **接口**: `GET /base/codes/{code}/info` **功能**: 获取指定代码的证券信息 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | code | string | 是 | 证券代码 (URL路径参数) | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.code | string | 代码 | | data.name | string | 名称 | | data.market | string | 市场 | | data.type | string | 类型 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/base/codes/600000.SH/info', headers=headers ) info = response.json()['data'] ``` --- ## 五、股票数据接口 ### 5.1 获取股票K线数据 **接口**: `GET /stock/kline` **功能**: 获取股票K线数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | codes | string | 是 | 代码列表 (逗号分隔) | | start_date | string | 是 | 开始日期 (YYYYMMDD) | | end_date | string | 是 | 结束日期 (YYYYMMDD) | | period | string | 否 | 周期 (daily, min1, min5等) | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.{code} | array | K线数据列表 | | data.{code}[].trade_date | string | 交易日期 | | data.{code}[].open | float | 开盘价 | | data.{code}[].high | float | 最高价 | | data.{code}[].low | float | 最低价 | | data.{code}[].close | float | 收盘价 | | data.{code}[].volume | int | 成交量 | | data.{code}[].amount | float | 成交额 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/stock/kline', params={ 'codes': '600000.SH,000001.SZ', 'start_date': '20240101', 'end_date': '20240131', 'period': 'daily' }, headers=headers ) kline_data = response.json()['data'] ``` --- ### 5.2 获取股票K线图表数据 **接口**: `GET /stock/kline/{code}/chart` **功能**: 获取股票K线图表数据 (ECharts格式) **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | code | string | 是 | 股票代码 (URL路径参数) | | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | | period | string | 否 | 周期 | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.categoryData | array | 日期列表 | | data.values | array | K线值 [open, close, low, high, volume] | | data.volumes | array | 成交量数据 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/stock/kline/600000.SH/chart', params={ 'start_date': '20240101', 'end_date': '20240131', 'period': 'daily' }, headers=headers ) chart_data = response.json()['data'] ``` --- ### 5.3 批量获取股票K线 **接口**: `POST /stock/kline/batch` **功能**: 批量获取多个股票的K线数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | codes | array | 是 | 代码列表 | | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | | period | string | 否 | 周期 | **请求示例**: ```json { "codes": ["600000.SH", "000001.SZ", "000002.SZ"], "start_date": "20240101", "end_date": "20240131", "period": "daily" } ``` **调用示例**: ```python response = requests.post( 'http://localhost:8000/api/v1/stock/kline/batch', headers=headers, json={ 'codes': ['600000.SH', '000001.SZ'], 'start_date': '20240101', 'end_date': '20240131', 'period': 'daily' } ) ``` --- ## 六、期货数据接口 ### 6.1 获取期货K线数据 **接口**: `GET /future/kline` **功能**: 获取期货K线数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | codes | string | 是 | 代码列表 (逗号分隔) | | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | | period | string | 否 | 周期 | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.{code} | array | K线数据 | | data.{code}[].trade_date | string | 交易日期 | | data.{code}[].open | float | 开盘价 | | data.{code}[].high | float | 最高价 | | data.{code}[].low | float | 最低价 | | data.{code}[].close | float | 收盘价 | | data.{code}[].volume | int | 成交量 | | data.{code}[].settle | float | 结算价 | | data.{code}[].open_interest | int | 持仓量 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/future/kline', params={ 'codes': 'IF2401.CFE', 'start_date': '20240101', 'end_date': '20240131', 'period': 'daily' }, headers=headers ) ``` --- ### 6.2 获取期货品种列表 **接口**: `GET /cache/future-varieties` **功能**: 获取所有期货品种列表 **请求参数**: 无 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.varieties | array | 品种列表 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/cache/future-varieties', headers=headers ) varieties = response.json()['data']['varieties'] ``` --- ### 6.3 获取主力合约 **接口**: `GET /cache/main-contracts` **功能**: 获取所有品种的主力合约 **请求参数**: 无 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.main_contracts | object | {品种: 主力合约} | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/cache/main-contracts', headers=headers ) main_contracts = response.json()['data']['main_contracts'] ``` --- ## 七、缓存管理接口 ### 7.1 一键检测所有数据 **接口**: `POST /cache/detect-all-missing` **功能**: 检测所有数据的缺失情况 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | security_type | string | 是 | 证券类型 (stock, future) | | period_type | string | 否 | 周期类型 (daily) | | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | | contract_type | string | 否 | 合约类型 (all, main) | **请求示例**: ```json { "security_type": "stock", "period_type": "daily", "start_date": "20240101", "end_date": "20240131", "contract_type": "all" } ``` **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.task_id | int | 任务ID | | data.status | string | 任务状态 | | data.total_count | int | 检测总数 | | data.complete_count | int | 完整数量 | | data.missing_count | int | 缺失数量 | | data.error_count | int | 错误数量 | | data.daily_stats | object | 每日统计 | | data.missing_codes | array | 缺失代码列表 | **调用示例**: ```python response = requests.post( 'http://localhost:8000/api/v1/cache/detect-all-missing', headers=headers, json={ 'security_type': 'stock', 'period_type': 'daily', 'start_date': '20240101', 'end_date': '20240131', 'contract_type': 'all' } ) result = response.json()['data'] ``` --- ### 7.2 一键缓存所有数据 **接口**: `POST /cache/cache-all-missing` **功能**: 缓存所有数据 (异步执行) **请求参数**: 同检测接口 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.task_id | int | 任务ID | | data.status | string | 任务状态 | | data.total_count | int | 总数 | | data.progress | float | 进度 | **调用示例**: ```python response = requests.post( 'http://localhost:8000/api/v1/cache/cache-all-missing', headers=headers, json={ 'security_type': 'stock', 'period_type': 'daily', 'start_date': '20240101', 'end_date': '20240131' } ) task_id = response.json()['data']['task_id'] ``` --- ### 7.3 一键补齐缺失数据 **接口**: `POST /cache/fill-missing` **功能**: 只补齐检测到的缺失数据 (异步执行) **请求参数**: 同检测接口 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.task_id | int | 任务ID | | data.missing_count | int | 缺失代码数量 | | data.status | string | 任务状态 | **调用示例**: ```python response = requests.post( 'http://localhost:8000/api/v1/cache/fill-missing', headers=headers, json={ 'security_type': 'stock', 'period_type': 'daily', 'start_date': '20240101', 'end_date': '20240131' } ) ``` --- ### 7.4 获取任务进度 **接口**: `GET /cache/tasks/{task_id}` **功能**: 获取缓存任务进度 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | task_id | int | 是 | 任务ID (URL路径参数) | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.task.id | int | 任务ID | | data.task.status | string | 状态 | | data.task.progress | float | 进度 | | data.task.total_count | int | 总数 | | data.task.success_count | int | 成功数 | | data.task.error_count | int | 错误数 | **调用示例**: ```python response = requests.get( f'http://localhost:8000/api/v1/cache/tasks/{task_id}', headers=headers ) task_status = response.json()['data']['task'] ``` --- ### 7.5 获取任务列表 **接口**: `GET /cache/tasks` **功能**: 获取缓存任务列表 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | page | int | 否 | 页码 (默认1) | | page_size | int | 否 | 每页数量 (默认20) | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/cache/tasks', params={'page': 1, 'page_size': 10}, headers=headers ) tasks = response.json()['data']['items'] ``` --- ## 八、财务数据接口 ### 8.1 获取资产负债表 **接口**: `GET /finance/balance-sheet` **功能**: 获取资产负债表数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | codes | string | 是 | 代码列表 | | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/finance/balance-sheet', params={ 'codes': '600000.SH', 'start_date': '20230101', 'end_date': '20231231' }, headers=headers ) ``` --- ### 8.2 获取利润表 **接口**: `GET /finance/income` **功能**: 获取利润表数据 **请求参数**: 同资产负债表 **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/finance/income', params={ 'codes': '600000.SH', 'start_date': '20230101', 'end_date': '20231231' }, headers=headers ) ``` --- ### 8.3 获取现金流量表 **接口**: `GET /finance/cash-flow` **功能**: 获取现金流量表数据 **请求参数**: 同资产负债表 **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/finance/cash-flow', params={ 'codes': '600000.SH', 'start_date': '20230101', 'end_date': '20231231' }, headers=headers ) ``` --- ## 九、错误码说明 | 错误码 | 说明 | |--------|------| | 200 | 成功 | | 400 | 请求参数错误 | | 401 | 未授权 (Token无效或过期) | | 403 | 禁止访问 | | 404 | 资源不存在 | | 500 | 服务器内部错误 | --- ## 十、最佳实践 ### 10.1 Token 管理 ```python class AmazingDataClient: def __init__(self, base_url, username, password): self.base_url = base_url self.token = None self.login(username, password) def login(self, username, password): response = requests.post( f'{self.base_url}/auth/login', json={'username': username, 'password': password} ) self.token = response.json()['data']['access_token'] def get_headers(self): return {'Authorization': f'Bearer {self.token}'} def request(self, method, path, **kwargs): kwargs['headers'] = self.get_headers() return requests.request(method, f'{self.base_url}{path}', **kwargs) ``` ### 10.2 批量数据处理 ```python # 分批处理大量代码 codes = ['600000.SH', '000001.SZ', ...] # 大量代码 batch_size = 50 for i in range(0, len(codes), batch_size): batch = codes[i:i+batch_size] response = client.request('POST', '/stock/kline/batch', json={ 'codes': batch, 'start_date': '20240101', 'end_date': '20240131' }) ``` ### 10.3 异步任务轮询 ```python import time def wait_for_task(client, task_id, timeout=300): start_time = time.time() while time.time() - start_time < timeout: response = client.request('GET', f'/cache/tasks/{task_id}') task = response.json()['data']['task'] if task['status'] == 'completed': return task elif task['status'] == 'failed': raise Exception(task['error_message']) time.sleep(2) raise Exception('任务超时') # 使用 response = client.request('POST', '/cache/fill-missing', json={...}) task_id = response.json()['data']['task_id'] result = wait_for_task(client, task_id) ``` --- ## 十一、指数数据接口 ### 11.1 获取指数列表 **接口**: `GET /index/list` **功能**: 获取所有指数基础信息列表 **请求参数**: 无 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data | array | 指数列表 | | data[].code | string | 指数代码 | | data[].name | string | 指数名称 | | data[].component_count | int | 成分个数 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/index/list', headers=headers ) indexes = response.json()['data'] ``` --- ### 11.2 获取指数交易数据 **接口**: `GET /index/trade` **功能**: 获取指数交易数据(含基础信息) **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | codes | string | 是 | 指数代码列表 (逗号分隔) | | start_date | string | 是 | 开始日期 (YYYYMMDD) | | end_date | string | 是 | 结束日期 (YYYYMMDD) | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.{code}.basic | object | 指数基础信息 | | data.{code}.basic.code | string | 指数代码 | | data.{code}.basic.name | string | 指数名称 | | data.{code}.basic.component_count | int | 成分个数 | | data.{code}.trades | array | 交易数据列表 | | data.{code}.trades[].trade_date | string | 交易日期 | | data.{code}.trades[].open | float | 开盘价 | | data.{code}.trades[].close | float | 收盘价 | | data.{code}.trades[].high | float | 最高价 | | data.{code}.trades[].low | float | 最低价 | | data.{code}.trades[].change_pct | float | 涨跌幅(%) | | data.{code}.trades[].volume | int | 成交量 | | data.{code}.trades[].amount | float | 成交额(百万元) | | data.{code}.trades[].total_market_value | float | 总市值(百万元) | | data.{code}.trades[].float_market_value | float | 流通市值(百万元) | | data.{code}.trades[].up_count | int | 上涨家数 | | data.{code}.trades[].down_count | int | 下跌家数 | | data.{code}.trades[].flat_count | int | 平盘家数 | | data.{code}.trades[].limit_up_count | int | 涨停家数 | | data.{code}.trades[].limit_down_count | int | 跌停家数 | | data.{code}.trades[].suspend_count | int | 停牌家数 | | data.{code}.trades[].pe_ratio | float | 市盈率 | | data.{code}.trades[].pe_median | float | 市盈率中位值 | | data.{code}.trades[].is_new_high | bool | 是否创近期新高 | | data.{code}.trades[].is_new_low | bool | 是否创近期新低 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/index/trade', params={ 'codes': 'BK0001,BK0002', 'start_date': '20240101', 'end_date': '20240131' }, headers=headers ) data = response.json()['data'] ``` --- ### 11.3 获取指数K线图表数据 **接口**: `GET /index/{code}/chart` **功能**: 获取指数K线图表数据 (ECharts格式,含基础信息) **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | code | string | 是 | 指数代码 (URL路径参数) | | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.basic | object | 指数基础信息 | | data.basic.code | string | 指数代码 | | data.basic.name | string | 指数名称 | | data.basic.component_count | int | 成分个数 | | data.categoryData | array | 日期列表 | | data.values | array | K线值 [open, close, low, high, volume] | | data.volumes | array | 成交量数据 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/index/BK0001/chart', params={ 'start_date': '20240101', 'end_date': '20240131' }, headers=headers ) chart_data = response.json()['data'] ``` --- ## 十二、数据导入接口 ### 12.1 导入指数数据 **接口**: `POST /import/index-data` **功能**: 导入指数数据(同时更新指数基础表和指数交易表) **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | file | file | 是 | Excel文件 (multipart/form-data) | | trade_date | string | 是 | 交易日期 (YYYY-MM-DD格式,Query参数) | **Excel文件格式**: 第一行标题: - 证券代码 - 证券名称 - 成分个数 [交易日期]最新 - 开盘价 [交易日期]最新 - 收盘价 [交易日期]最新 - 成交量 [交易日期]最新 [单位]股 - 成交额 [交易日期]最新 [单位]百万元 - 总市值 [截止日期]最新 [单位]百万元 - 自由流通市值 [交易日期]最新 [单位]百万元 - 涨跌幅 [交易日期]最新 [单位]% - 最高价 [交易日期]最新 - 最低价 [交易日期]最新 - 上涨家数 [交易日期]最新 - 下跌家数 [交易日期]最新 - 平盘家数 [交易日期]最新 - 涨停家数 [交易日期]最新 - 跌停家数 [交易日期]最新 - 停牌家数 [交易日期]最新 - 近期创历史新高 [交易日期]最新 [近N日内]300 [复权方式]不复权 - 近期创历史新低 [交易日期]最新 [近N日内]300 [复权方式]不复权 - 市盈率PE(TTM) [交易日期]最新 [剔除规则]不调整 - 市盈率PE(TTM)中位值 [交易日期]最新 [剔除规则]不调整 **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.success_count | int | 成功导入数量 | | data.error_count | int | 失败数量 | | data.total_count | int | 总数量 | | data.index_basic_added | int | 新增指数基础数据数量 | | data.index_basic_updated | int | 更新指数基础数据数量 | | data.trade_date | string | 交易日期 | **调用示例**: ```python import requests files = {'file': open('index_data.xlsx', 'rb')} response = requests.post( 'http://localhost:8000/api/v1/import/index-data?trade_date=2024-01-31', files=files, headers=headers ) result = response.json()['data'] print(f"成功: {result['success_count']}, 新增指数: {result['index_basic_added']}") ``` --- ### 12.2 导入股票基础数据 **接口**: `POST /import/stock-basic` **功能**: 导入股票基础数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | file | file | 是 | Excel文件 | **Excel文件格式**: 必须列:code, name, total_shares, float_shares, industry_index_name, industry_index_code, institution_hold_ratio, industry_level3, list_date **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.success_count | int | 成功导入数量 | | data.error_count | int | 失败数量 | | data.total_count | int | 总数量 | --- ### 12.3 导入指数基础数据 **接口**: `POST /import/index-basic` **功能**: 导入指数基础数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | file | file | 是 | Excel文件 | **Excel文件格式**: 必须列:code, name, component_count --- ### 12.4 导入指数交易数据 **接口**: `POST /import/index-trade` **功能**: 导入指数交易数据 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | file | file | 是 | Excel文件 | **Excel文件格式**: 必须列:index_code, trade_date, open, close, high, low 可选列:change_pct, volume, amount, total_market_value, float_market_value, up_count, down_count, flat_count, limit_up_count, limit_down_count, suspend_count, pe_ratio, pe_median, is_new_high, is_new_low --- ## 十三、股票基础信息接口 ### 13.1 获取股票基础信息 **接口**: `GET /stock/basic/{code}` **功能**: 获取指定股票的基础信息 **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | code | string | 是 | 股票代码 (URL路径参数) | **响应参数**: | 参数名 | 类型 | 说明 | |--------|------|------| | data.code | string | 股票代码 | | data.name | string | 股票名称 | | data.total_shares | int | 总股本 | | data.float_shares | int | 流通股本 | | data.industry_index_name | string | 所属东财行业指数 | | data.industry_index_code | string | 所属东财行业指数代码 | | data.institution_hold_ratio | float | 机构持股比例合计(%) | | data.industry_level3 | string | 所属东财3级行业 | | data.list_date | string | 上市日期 | **调用示例**: ```python response = requests.get( 'http://localhost:8000/api/v1/stock/basic/600000.SH', headers=headers ) stock_info = response.json()['data'] print(f"股票名称: {stock_info['name']}") print(f"总股本: {stock_info['total_shares']}") print(f"所属行业: {stock_info['industry_index_name']}") ``` --- ## 十四、联系与支持 如有问题,请联系技术支持团队。