119 lines
2.2 KiB
Markdown
119 lines
2.2 KiB
Markdown
# Crypto ATR Signal v1.1 修复报告
|
|
|
|
修复日期:`2026-06-22`
|
|
|
|
当前页面版本:`v1.1.0`
|
|
|
|
## 问题概述
|
|
|
|
首页信号列表原本会展示 `signals` 表中的历史信号,而不是只展示当前最新已收盘 4H K 线的信号。
|
|
|
|
这会导致一个问题:
|
|
|
|
```text
|
|
历史 K 线中 ATR 倍数更高的信号,可能排在当前最新 K 线信号前面。
|
|
```
|
|
|
|
因此用户在首页看到的并不完全是“当前最新一根 4H K 线”的信号。
|
|
|
|
## 问题原因
|
|
|
|
原首页查询逻辑直接读取 `signals` 表:
|
|
|
|
```sql
|
|
SELECT symbol, direction, multiple, range, atr14, open_time, created_at
|
|
FROM signals
|
|
ORDER BY CAST(multiple AS REAL) DESC, open_time DESC, symbol ASC
|
|
LIMIT 300
|
|
```
|
|
|
|
该查询没有限制:
|
|
|
|
```sql
|
|
WHERE open_time = 最新已收盘K线
|
|
```
|
|
|
|
所以历史信号会被一起展示。
|
|
|
|
## 修复方案
|
|
|
|
首页先从 `klines` 表中读取当前数据库里的最新 K 线时间:
|
|
|
|
```sql
|
|
SELECT MAX(open_time) AS open_time FROM klines
|
|
```
|
|
|
|
然后只查询该 `open_time` 对应的信号:
|
|
|
|
```sql
|
|
SELECT symbol, direction, multiple, range, atr14, open_time, created_at
|
|
FROM signals
|
|
WHERE open_time = ?
|
|
ORDER BY CAST(multiple AS REAL) DESC, open_time DESC, symbol ASC
|
|
LIMIT 300
|
|
```
|
|
|
|
ATR 倍数正序 / 倒序排序仍然保留,但排序范围只限于当前最新已收盘 K 线的信号。
|
|
|
|
## 修复结果
|
|
|
|
修复后:
|
|
|
|
```text
|
|
首页 = 当前最新已收盘 K 线信号
|
|
历史信号 = 继续保留在数据库中,但不混入首页
|
|
```
|
|
|
|
当前本地验证结果:
|
|
|
|
```text
|
|
数据库历史信号总数:68
|
|
最新 K 线信号数:26
|
|
首页当前信号:26
|
|
```
|
|
|
|
## 影响范围
|
|
|
|
影响文件:
|
|
|
|
```text
|
|
webapp.py
|
|
```
|
|
|
|
不影响:
|
|
|
|
```text
|
|
scanner.py 扫描逻辑
|
|
ATR 计算逻辑
|
|
缺口补抓逻辑
|
|
SQLite 数据结构
|
|
历史信号保存
|
|
实体占比过滤开关
|
|
数据清理逻辑
|
|
```
|
|
|
|
## 当前状态
|
|
|
|
已完成:
|
|
|
|
- 首页只展示最新已收盘 K 线信号。
|
|
- 历史信号继续保留,默认保留 `SIGNAL_RETENTION_DAYS=90` 天。
|
|
- ATR 倍数排序继续可用。
|
|
- 本地服务已重启验证。
|
|
|
|
## 后续建议
|
|
|
|
后续如果需要查看历史信号,建议单独增加:
|
|
|
|
```text
|
|
/history
|
|
```
|
|
|
|
或页面切换:
|
|
|
|
```text
|
|
当前信号 / 历史信号
|
|
```
|
|
|
|
这样首页保持清爽,历史查询也有独立入口。
|