You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1223 lines
27 KiB

# 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']}")
```
---
## 十四、联系与支持
如有问题,请联系技术支持团队。