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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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