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