# 期货分析系统 API 接口文档

本文档详细描述了 `service_implementation` 模块提供的所有 RESTful API 接口，方便业务方使用。

## 1. 接口概览

| 接口路径 | 方法 | 功能描述 |
|---------|------|----------|
| `/health` | GET | 健康检查接口 |
| `/api/contracts` | GET | 获取合约列表 |
| `/api/kline` | GET | 获取K线数据 |
| `/api/analyze` | POST | 市场分析接口 |
| `/api/recommendations` | GET | 获取交易建议 |
| `/api/risk` | POST | 风险监控接口 |
| `/api/analysis/history` | GET | 获取分析历史 |

## 2. 详细接口文档

### 2.1 健康检查接口

**接口路径**：`/health`

**请求方法**：GET

**功能描述**：检查服务是否正常运行

**请求参数**：无

**响应格式**：
```json
{
  "status": "ok",
  "message": "Service is running"
}
```

**示例请求**：
```bash
GET http://localhost:5000/health
```

**示例响应**：
```json
{
  "status": "ok",
  "message": "Service is running"
}
```

### 2.2 合约数据获取接口

**接口路径**：`/api/contracts`

**请求方法**：GET

**功能描述**：获取合约列表，支持按交易所和品种过滤

**请求参数**：
| 参数名 | 类型 | 必填 | 描述 | 默认值 |
|--------|------|------|------|--------|
| `exchange` | string | 否 | 交易所代码，如 'SHFE' | 空字符串（获取所有交易所） |
| `symbol` | string | 否 | 品种代码，如 'CU' | 空字符串（获取所有品种） |

**响应格式**：
```json
{
  "status": "success",
  "data": [
    {
      "symbol": "CU2603",
      "product": "CU",
      "product_name": "铜",
      "exchange": "SHFE",
      "month": "2603"
    }
  ]
}
```

**示例请求**：
```bash
GET http://localhost:5000/api/contracts?exchange=SHFE&symbol=CU
```

**示例响应**：
```json
{
  "status": "success",
  "data": [
    {
      "symbol": "CU2603",
      "product": "CU",
      "product_name": "铜",
      "exchange": "SHFE",
      "month": "2603"
    },
    {
      "symbol": "CU2604",
      "product": "CU",
      "product_name": "铜",
      "exchange": "SHFE",
      "month": "2604"
    }
  ]
}
```

### 2.3 K线数据获取接口

**接口路径**：`/api/kline`

**请求方法**：GET

**功能描述**：获取K线数据，支持不同时间周期和数据量

**请求参数**：
| 参数名 | 类型 | 必填 | 描述 | 默认值 |
|--------|------|------|------|--------|
| `symbol` | string | 是 | 合约代码，如 'CU2603' | 无 |
| `duration` | string | 否 | 时间周期，如 '1m', '5m', '1h', '1d' | '1m' |
| `limit` | integer | 否 | 数据量限制 | 100 |

**响应格式**：
```json
{
  "status": "success",
  "data": [
    {
      "datetime": "2026-02-23T09:00:00",
      "open": 35000.0,
      "high": 35100.0,
      "low": 34900.0,
      "close": 35050.0,
      "volume": 1000,
      "open_interest": 10000
    }
  ]
}
```

**示例请求**：
```bash
GET http://localhost:5000/api/kline?symbol=CU2603&duration=1m&limit=10
```

**示例响应**：
```json
{
  "status": "success",
  "data": [
    {
      "datetime": "2026-02-23T09:00:00",
      "open": 35000.0,
      "high": 35100.0,
      "low": 34900.0,
      "close": 35050.0,
      "volume": 1000,
      "open_interest": 10000
    },
    {
      "datetime": "2026-02-23T09:01:00",
      "open": 35050.0,
      "high": 35150.0,
      "low": 35000.0,
      "close": 35100.0,
      "volume": 1200,
      "open_interest": 10200
    }
  ]
}
```

### 2.4 DeepSeek 分析接口

**接口路径**：`/api/analyze`

**请求方法**：POST

**功能描述**：使用 AI 进行市场分析，返回分析结果

**请求参数**：
| 参数名 | 类型 | 必填 | 描述 | 默认值 |
|--------|------|------|------|--------|
| `symbol` | string | 是 | 合约代码，如 'CU2603' | 无 |
| `duration` | string | 否 | 时间周期，如 '1m', '5m', '1h', '1d' | '1m' |
| `analysis_type` | string | 否 | 分析类型，如 'technical' | 'technical' |

**请求体示例**：
```json
{
  "symbol": "CU2603",
  "duration": "1h",
  "analysis_type": "technical"
}
```

**响应格式**：
```json
{
  "status": "success",
  "data": {
    "symbol": "CU2603",
    "timestamp": "2026-02-23T10:00:00",
    "trend": "up",
    "probability": 0.8,
    "direction": "buy",
    "cycle": "short",
    "atr": 120.5,
    "adx": 25.3,
    "support": 34800.0,
    "resistance": 35200.0,
    "stop_loss": 34700.0,
    "target_price": 35500.0,
    "position_size": 1.0,
    "risk_ratio": 2.0,
    "fund_flow": {},
    "signals": {}
  }
}
```

**示例请求**：
```bash
POST http://localhost:5000/api/analyze
Content-Type: application/json

{
  "symbol": "CU2603",
  "duration": "1h",
  "analysis_type": "technical"
}
```

**示例响应**：
```json
{
  "status": "success",
  "data": {
    "symbol": "CU2603",
    "timestamp": "2026-02-23T10:00:00",
    "trend": "up",
    "probability": 0.8,
    "direction": "buy",
    "cycle": "short",
    "atr": 120.5,
    "adx": 25.3,
    "support": 34800.0,
    "resistance": 35200.0,
    "stop_loss": 34700.0,
    "target_price": 35500.0,
    "position_size": 1.0,
    "risk_ratio": 2.0,
    "fund_flow": {},
    "signals": {}
  }
}
```

### 2.5 交易建议接口

**接口路径**：`/api/recommendations`

**请求方法**：GET

**功能描述**：获取交易建议列表

**请求参数**：
| 参数名 | 类型 | 必填 | 描述 | 默认值 |
|--------|------|------|------|--------|
| `symbol` | string | 是 | 合约代码，如 'CU2603' | 无 |
| `status` | string | 否 | 建议状态，如 'pending', 'executed', 'cancelled' | 空字符串（获取所有状态） |

**响应格式**：
```json
{
  "status": "success",
  "data": [
    {
      "id": 1,
      "symbol": "CU2603",
      "timestamp": "2026-02-23T10:00:00",
      "direction": "buy",
      "entry_price": 35000.0,
      "stop_loss": 34700.0,
      "target_price": 35500.0,
      "position_size": 1.0,
      "execution_plan": "分批入场",
      "risk_tips": "注意止损",
      "status": "pending",
      "created_at": "2026-02-23T10:00:00"
    }
  ]
}
```

**示例请求**：
```bash
GET http://localhost:5000/api/recommendations?symbol=CU2603&status=pending
```

**示例响应**：
```json
{
  "status": "success",
  "data": [
    {
      "id": 1,
      "symbol": "CU2603",
      "timestamp": "2026-02-23T10:00:00",
      "direction": "buy",
      "entry_price": 35000.0,
      "stop_loss": 34700.0,
      "target_price": 35500.0,
      "position_size": 1.0,
      "execution_plan": "分批入场",
      "risk_tips": "注意止损",
      "status": "pending",
      "created_at": "2026-02-23T10:00:00"
    }
  ]
}
```

### 2.6 风险监控接口

**接口路径**：`/api/risk`

**请求方法**：POST

**功能描述**：监控交易风险状态，返回风险评估结果

**请求参数**：
| 参数名 | 类型 | 必填 | 描述 | 默认值 |
|--------|------|------|------|--------|
| `symbol` | string | 是 | 合约代码，如 'CU2603' | 无 |
| `current_price` | number | 是 | 当前价格 | 无 |
| `entry_price` | number | 是 | 入场价格 | 无 |
| `stop_loss` | number | 是 | 止损价格 | 无 |
| `target_price` | number | 是 | 目标价格 | 无 |

**请求体示例**：
```json
{
  "symbol": "CU2603",
  "current_price": 36000.0,
  "entry_price": 35000.0,
  "stop_loss": 34500.0,
  "target_price": 37000.0
}
```

**响应格式**：
```json
{
  "status": "success",
  "data": {
    "symbol": "CU2603",
    "current_price": 36000.0,
    "entry_price": 35000.0,
    "stop_loss": 34500.0,
    "target_price": 37000.0,
    "current_profit": 1000.0,
    "risk_status": "high"
  }
}
```

**示例请求**：
```bash
POST http://localhost:5000/api/risk
Content-Type: application/json

{
  "symbol": "CU2603",
  "current_price": 36000.0,
  "entry_price": 35000.0,
  "stop_loss": 34500.0,
  "target_price": 37000.0
}
```

**示例响应**：
```json
{
  "status": "success",
  "data": {
    "symbol": "CU2603",
    "current_price": 36000.0,
    "entry_price": 35000.0,
    "stop_loss": 34500.0,
    "target_price": 37000.0,
    "current_profit": 1000.0,
    "risk_status": "high"
  }
}
```

### 2.7 分析历史接口

**接口路径**：`/api/analysis/history`

**请求方法**：GET

**功能描述**：获取历史分析结果

**请求参数**：
| 参数名 | 类型 | 必填 | 描述 | 默认值 |
|--------|------|------|------|--------|
| `symbol` | string | 是 | 合约代码，如 'CU2603' | 无 |
| `limit` | integer | 否 | 数据量限制 | 100 |

**响应格式**：
```json
{
  "status": "success",
  "data": [
    {
      "id": 1,
      "symbol": "CU2603",
      "timestamp": "2026-02-23T10:00:00",
      "trend": "up",
      "probability": 0.8,
      "direction": "buy",
      "cycle": "short",
      "atr": 120.5,
      "adx": 25.3,
      "support": 34800.0,
      "resistance": 35200.0,
      "stop_loss": 34700.0,
      "target_price": 35500.0,
      "position_size": 1.0,
      "risk_ratio": 2.0,
      "fund_flow": {},
      "signals": {},
      "created_at": "2026-02-23T10:00:00"
    }
  ]
}
```

**示例请求**：
```bash
GET http://localhost:5000/api/analysis/history?symbol=CU2603&limit=10
```

**示例响应**：
```json
{
  "status": "success",
  "data": [
    {
      "id": 1,
      "symbol": "CU2603",
      "timestamp": "2026-02-23T10:00:00",
      "trend": "up",
      "probability": 0.8,
      "direction": "buy",
      "cycle": "short",
      "atr": 120.5,
      "adx": 25.3,
      "support": 34800.0,
      "resistance": 35200.0,
      "stop_loss": 34700.0,
      "target_price": 35500.0,
      "position_size": 1.0,
      "risk_ratio": 2.0,
      "fund_flow": {},
      "signals": {},
      "created_at": "2026-02-23T10:00:00"
    },
    {
      "id": 2,
      "symbol": "CU2603",
      "timestamp": "2026-02-23T09:00:00",
      "trend": "neutral",
      "probability": 0.5,
      "direction": "hold",
      "cycle": "short",
      "atr": 115.2,
      "adx": 18.7,
      "support": 34900.0,
      "resistance": 35100.0,
      "stop_loss": 34800.0,
      "target_price": 35300.0,
      "position_size": 0.5,
      "risk_ratio": 1.5,
      "fund_flow": {},
      "signals": {},
      "created_at": "2026-02-23T09:00:00"
    }
  ]
}
```

## 3. 错误处理

所有接口都遵循统一的错误响应格式：

```json
{
  "status": "error",
  "message": "错误信息"
}
```

常见错误码：
- `400 Bad Request`：请求参数错误
- `500 Internal Server Error`：服务器内部错误

## 4. 数据缓存机制

- **K线数据**：系统会先尝试从数据库获取，如果没有则从数据源获取并保存到数据库
- **分析结果**：所有分析结果都会保存到数据库，可通过 `/api/analysis/history` 接口查询
- **交易建议**：所有交易建议都会保存到数据库，可通过 `/api/recommendations` 接口查询

## 5. 数据源配置

系统支持从 `config.json` 文件读取数据源配置：

1. **默认数据源**：通过 `dataSource.defaultDataSource` 配置
2. **TQSDK 配置**：通过 `dataSource.tqsdk` 配置账号密码
3. **RQData 配置**：通过 `dataSource.rqdata` 配置账号密码

## 6. 启动服务

```bash
# 安装依赖
pip install -r service_implementation/requirements.txt

# 启动服务
python service_implementation/service/app.py
```

服务默认运行在 `http://0.0.0.0:5000`。

## 7. 测试接口

可以使用以下工具测试接口：
- **Postman**：图形化 API 测试工具
- **curl**：命令行工具
- **Python requests**：Python 库

### 示例：使用 curl 测试健康检查接口

```bash
curl http://localhost:5000/health
```

### 示例：使用 curl 测试合约数据接口

```bash
curl http://localhost:5000/api/contracts?exchange=SHFE&symbol=CU
```

### 示例：使用 curl 测试分析接口

```bash
curl -X POST http://localhost:5000/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"symbol": "CU2603", "duration": "1h", "analysis_type": "technical"}'
```

## 8. 注意事项

1. **API 连接**：服务启动时会自动尝试连接数据源 API，如果连接失败会使用模拟数据
2. **数据格式**：所有价格数据均为浮点数，成交量和持仓量为整数
3. **时间格式**：所有时间字段均为 ISO 8601 格式
4. **错误处理**：使用过程中如遇到错误，请检查请求参数和服务日志
5. **性能优化**：对于高频调用的接口（如 K线数据），建议使用缓存机制减少重复请求

## 9. 版本信息

- **API 版本**：v1.0
- **服务版本**：1.0.0
- **更新时间**：2026-02-23

本文档由期货分析系统自动生成，如有变更请以实际接口为准。