1、新增二板炸板情况统计;

2、更新项目结构;
This commit is contained in:
2026-05-09 16:59:45 +08:00
parent 9ea4b61ee3
commit d5c053e59d
12 changed files with 1312 additions and 562 deletions
+160
View File
@@ -0,0 +1,160 @@
# 炸板次日表现接口文档
## 1. 基本信息
- 接口名称:炸板次日表现
- 请求方法:`GET`
- 请求路径:`/api/v1/limit-board/break-next-performance`
- 接口用途:按 T 日范围查询 T-2 未涨停、T-1 涨停、T 日触及涨停价但收盘未封住的炸板股票,并返回 T+1 交易日表现。
- 导出路径:`/api/v1/download/limit-board/break-next-performance-csv`
## 2. 请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
| --- | --- | --- | --- | --- |
| `tradeStartDate` | `string` | 是 | 无 | T 日起始日期,格式 `YYYY-MM-DD` |
| `tradeEndDate` | `string` | 是 | 无 | T 日结束日期,格式 `YYYY-MM-DD` |
| `page` | `int` | 否 | `1` | 页码 |
| `pageSize` | `int` | 否 | `20` | 每页数量 |
| `tOpenGainLt101` | `bool` | 否 | 无 | 筛选 T 日开盘价是否小于 T-1 收盘价的 101%,支持别名 `tOpenLessThan101`、`t_open_gain_lt_101` |
| `breakTimeBefore1100` | `bool` | 否 | 无 | 筛选 T 日炸板时间是否在 `11:00:00` 前,空炸板时间按 `true` 处理,支持别名 `tBreakTimeBefore1100`、`break_time_before_1100` |
兼容 `start_date`、`end_date` 作为日期参数别名。
示例:
```http
GET /api/v1/limit-board/break-next-performance?tradeStartDate=2026-05-07&tradeEndDate=2026-05-07&tOpenGainLt101=true&breakTimeBefore1100=true&page=1&pageSize=20
```
导出示例:
```http
GET /api/v1/download/limit-board/break-next-performance-csv?tradeStartDate=2026-05-07&tradeEndDate=2026-05-07&tOpenGainLt101=true&breakTimeBefore1100=true
```
## 3. 统计规则
- 以 `trade_calendar` 中 `exchange = 'SSE'` 且 `is_open = 1` 的记录推导 T-2、T-1、T、T+1 交易日。
- 样本池来自 `stock_limit_combined_data`:T 日必须为炸板记录,即 `final_status = 2`;T-1 必须为涨停记录,即 `final_status = 1`;T-2 同一股票不能存在 `final_status = 1`。
- T 日和 T+1 日 OHLC 来自 `stock_daily`。
- 股票板块来自 `stock_limit_combined_data.market`。
- T 日开盘涨幅以 T-1 收盘价为基准计算。
- 如果 T 日有 Tushare 炸板记录,则返回具体的 Tushare 炸板时间 `tushare_first_time` 并格式化为 `HH:MM:SS`;无 Tushare 炸板记录或无具体时间时 `first_time` 为空。
- T 日炸板时间为空时,`break_time_before_1100` 默认返回 `true`。
- T+1 开盘涨幅、最高获利、最大亏损、收盘涨跌幅均以 T 日收盘价为基准计算。
- T+1 盘中是否可以获利表示:T+1 盘中最高价是否能弥补 T 日最高价买入后到 T 日收盘价的差价,按 `next_high >= t_high` 判断;缺少 T+1 最高价、T 日最高价或 T 日收盘价时返回 `null`。
## 4. 响应字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `trade_start_date` | `string` | 查询起始 T 日 |
| `trade_end_date` | `string` | 查询结束 T 日 |
| `page` | `int` | 当前页 |
| `page_size` | `int` | 每页数量 |
| `total` | `int` | 命中总数 |
| `total_pages` | `int` | 总页数 |
| `summary.break_count` | `int` | T 日炸板股票总数 |
| `summary.next_trade_data_count` | `int` | 有 T+1 行情数据的股票数 |
| `list` | `array` | 明细列表 |
明细核心字段:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `trade_date` | `string` | T 日 |
| `ts_code` / `symbol` / `name` | `string` | 股票标识 |
| `market` / `industry` | `string` | 板块和行业 |
| `t_open` / `t_high` / `t_close` | `number \| null` | T 日行情 |
| `t_open_pct_chg` | `number \| null` | T 日开盘涨幅,基于 T-1 收盘价 |
| `t_open_gain_lt_101` | `boolean` | T 日开盘价是否小于 T-1 收盘价的 101% |
| `first_time` | `string` | T 日 Tushare 炸板时间,格式化为 `HH:MM:SS`,无 Tushare 炸板记录或无具体时间时为空 |
| `break_time_before_1100` | `boolean` | T 日炸板时间是否在 `11:00:00` 前;空炸板时间默认为 `true` |
| `has_tushare_break_data` | `boolean` | T 日是否存在 Tushare 炸板记录,即 `tushare_limit_type = 'Z'` |
| `next_open` / `next_high` / `next_low` / `next_close` | `number \| null` | T+1 行情 |
| `next_open_pct_chg` | `number \| null` | T+1 开盘涨幅,基于 T 日收盘价 |
| `next_intraday_profitable` | `boolean \| null` | T+1 盘中是否可以获利,按 T+1 最高价是否能弥补 T 日最高价买入后到 T 日收盘价的差价判断,即 `next_high >= t_high` |
| `next_high_profit_pct` | `number \| null` | T+1 最高获利百分比,基于 T 日收盘价 |
| `next_low_loss_pct` | `number \| null` | T+1 最大亏损百分比,基于 T 日收盘价 |
| `next_close_pct_chg` | `number \| null` | T+1 收盘涨跌幅,基于 T 日收盘价 |
## 5. 响应示例
```json
{
"trade_start_date": "2026-05-07",
"trade_end_date": "2026-05-07",
"page": 1,
"page_size": 20,
"total": 3,
"total_pages": 1,
"summary": {
"break_count": 3,
"next_trade_data_count": 3
},
"list": [
{
"trade_date": "2026-05-07",
"symbol": "000060",
"ts_code": "000060.SZ",
"name": "中金岭南",
"market": "主板",
"industry": "铅锌",
"t_open": 7.71,
"t_open_pct_chg": 3.77,
"t_open_gain_lt_101": false,
"t_high": 8.17,
"t_close": 8.08,
"t_pct_chg": 8.7483,
"first_time": "13:55:30",
"break_time_before_1100": false,
"has_tushare_break_data": true,
"next_open": 7.81,
"next_high": 8.23,
"next_low": 7.77,
"next_close": 7.95,
"next_open_pct_chg": -3.34,
"next_intraday_profitable": true,
"next_high_profit_pct": 1.86,
"next_low_loss_pct": -3.84,
"next_close_pct_chg": -1.61
}
]
}
```
## 6. CSV 导出
- 响应类型:`text/csv; charset=utf-8`
- 响应头:`Content-Disposition: attachment; filename="limit_break_next_performance_YYYYMMDD_YYYYMMDD_daily_detail.csv"`
- 文件包含 UTF-8 BOM,便于 Excel 直接打开中文列名。
- 导出接口复用列表接口的日期、`tOpenGainLt101`、`breakTimeBefore1100` 筛选条件,不使用分页参数。
列顺序:
| 列名 | 来源字段 |
| --- | --- |
| `T日` | `trade_date` |
| `股票代码` | `ts_code` |
| `股票简称` | `name` |
| `T涨跌幅` | `t_pct_chg` |
| `T开盘<1%` | `t_open_gain_lt_101`,导出为 `是`/`否` |
| `tushare炸板时间` | `first_time` |
| `11点前炸板` | `break_time_before_1100`,导出为 `是`/`否` |
| `T+1盘中可盈利` | `next_intraday_profitable`,导出为 `是`/`否`/`无次日数据` |
| `T+1最高获利` | `next_high_profit_pct` |
| `T+1开盘涨幅` | `next_open_pct_chg` |
| `T+1收盘涨跌` | `next_close_pct_chg` |
| `市场` | `market` |
| `行业` | `industry` |
| `T开盘` | `t_open` |
| `T开盘涨幅` | `t_open_pct_chg` |
| `T最高` | `t_high` |
| `T收盘` | `t_close` |
| `tushare是否炸板` | `has_tushare_break_data`,导出为 `是`/`否` |
| `T+1开盘` | `next_open` |
| `T+1最高` | `next_high` |
| `T+1最低` | `next_low` |
| `T+1收盘` | `next_close` |
| `T+1最大亏损` | `next_low_loss_pct` |