降低市场监控Telegram推送频率,减少重复通知
收紧推送周期、冷却时间和触发门槛的默认值,避免52城 同时监控导致的通知轰炸。删除不再使用的doc_refresher技能。 Constraint: 用户反馈电报群通知太频繁且同城市重复推送 Rejected: 在.env中配置 | 用户要求写死在代码默认值中 Confidence: high Scope-risk: narrow Directive: 如需临时放宽,仍可通过同名环境变量覆盖 Tested: Not-tested: 需实际运行bot验证推送频率
This commit is contained in:
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: doc_refresher
|
|
||||||
description: 自动同步和刷新项目文档,确保 Markdown 文件与当前代码功能状态完全一致。
|
|
||||||
---
|
|
||||||
|
|
||||||
# Documentation Refresher Skill
|
|
||||||
|
|
||||||
此技能用于在项目架构发生重大调整(如功能下线、重心转移)后,自动重写和更新项目的所有 Markdown 文档。
|
|
||||||
|
|
||||||
## 核心任务
|
|
||||||
|
|
||||||
1. **代码扫描**:分析 `run.py` 和核心逻辑,识别哪些功能是“活跃的”,哪些功能是“暂停/移除的”。
|
|
||||||
2. **术语统一**:确保所有文档使用一致的语气(例如从“监控机器人”转向“天气查询机器人”)。
|
|
||||||
3. **多语言同步**:确保 `_ZH.md` 与英文版文档内容同步。
|
|
||||||
|
|
||||||
## 更新准则
|
|
||||||
|
|
||||||
- **状态准确性**:如果功能已在代码中被注释(如监控引擎、模拟交易),文档必须明确标注为“已暂停”或直接移除。
|
|
||||||
- **示例更新**:更新文档中的 Telegram 指令示例,移除已下线的指令(如 `/signal`, `/portfolio`)。
|
|
||||||
- **流程简化**:针对当前“天气查询模式”,简化安装和运行流程说明。
|
|
||||||
|
|
||||||
## 使用流程
|
|
||||||
|
|
||||||
1. 查看 `run.py` 确认当前运行模式。
|
|
||||||
2. 遍历项目根目录下所有的 `.md` 文件。
|
|
||||||
3. 对每个文件内容进行重构,保持格式美观。
|
|
||||||
4. 校验多语言版本的一致性。
|
|
||||||
@@ -154,7 +154,7 @@ class StartupCoordinator:
|
|||||||
def _start_trade_alert_loop(self) -> LoopStatus:
|
def _start_trade_alert_loop(self) -> LoopStatus:
|
||||||
enabled = _env_bool("TELEGRAM_ALERT_PUSH_ENABLED", True)
|
enabled = _env_bool("TELEGRAM_ALERT_PUSH_ENABLED", True)
|
||||||
chat_ids = get_telegram_chat_ids_from_env()
|
chat_ids = get_telegram_chat_ids_from_env()
|
||||||
interval = max(60, _env_int("TELEGRAM_ALERT_PUSH_INTERVAL_SEC", 300))
|
interval = max(60, _env_int("TELEGRAM_ALERT_PUSH_INTERVAL_SEC", 1800))
|
||||||
cities_count = _parse_csv_count(os.getenv("TELEGRAM_ALERT_CITIES"))
|
cities_count = _parse_csv_count(os.getenv("TELEGRAM_ALERT_CITIES"))
|
||||||
details = {
|
details = {
|
||||||
"mode": "critical-alerts-and-focus-digest",
|
"mode": "critical-alerts-and-focus-digest",
|
||||||
@@ -163,19 +163,19 @@ class StartupCoordinator:
|
|||||||
"chat_targets": len(chat_ids),
|
"chat_targets": len(chat_ids),
|
||||||
"alert_cooldown_sec": max(
|
"alert_cooldown_sec": max(
|
||||||
60,
|
60,
|
||||||
_env_int("TELEGRAM_ALERT_PUSH_COOLDOWN_SEC", 1800),
|
_env_int("TELEGRAM_ALERT_PUSH_COOLDOWN_SEC", 21600),
|
||||||
),
|
),
|
||||||
"mispricing_interval_sec": max(
|
"mispricing_interval_sec": max(
|
||||||
max(60, _env_int("TELEGRAM_ALERT_PUSH_COOLDOWN_SEC", 1800)),
|
max(60, _env_int("TELEGRAM_ALERT_PUSH_COOLDOWN_SEC", 21600)),
|
||||||
_env_int("TELEGRAM_ALERT_MISPRICING_INTERVAL_SEC", 7200),
|
_env_int("TELEGRAM_ALERT_MISPRICING_INTERVAL_SEC", 43200),
|
||||||
),
|
),
|
||||||
"min_trigger_count": max(1, _env_int("TELEGRAM_ALERT_MIN_TRIGGER_COUNT", 2)),
|
"min_trigger_count": max(1, _env_int("TELEGRAM_ALERT_MIN_TRIGGER_COUNT", 3)),
|
||||||
"min_severity": str(os.getenv("TELEGRAM_ALERT_MIN_SEVERITY") or "medium").strip().lower(),
|
"min_severity": str(os.getenv("TELEGRAM_ALERT_MIN_SEVERITY") or "high").strip().lower(),
|
||||||
"mispricing_only": _env_bool("TELEGRAM_ALERT_MISPRICING_ONLY", True),
|
"mispricing_only": _env_bool("TELEGRAM_ALERT_MISPRICING_ONLY", True),
|
||||||
"focus_digest_enabled": _env_bool("TELEGRAM_MARKET_FOCUS_DIGEST_ENABLED", True),
|
"focus_digest_enabled": _env_bool("TELEGRAM_MARKET_FOCUS_DIGEST_ENABLED", True),
|
||||||
"focus_digest_interval_sec": max(
|
"focus_digest_interval_sec": max(
|
||||||
300,
|
300,
|
||||||
_env_int("TELEGRAM_MARKET_FOCUS_DIGEST_INTERVAL_SEC", 1800),
|
_env_int("TELEGRAM_MARKET_FOCUS_DIGEST_INTERVAL_SEC", 21600),
|
||||||
),
|
),
|
||||||
"focus_push_start_local_hour": min(
|
"focus_push_start_local_hour": min(
|
||||||
23,
|
23,
|
||||||
|
|||||||
@@ -1228,24 +1228,24 @@ def start_trade_alert_push_loop(bot: Any, config: Dict[str, Any]) -> Optional[th
|
|||||||
logger.warning("telegram market monitor loop skipped: TELEGRAM_CHAT_IDS is not set")
|
logger.warning("telegram market monitor loop skipped: TELEGRAM_CHAT_IDS is not set")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
interval_sec = max(60, _env_int("TELEGRAM_ALERT_PUSH_INTERVAL_SEC", 300))
|
interval_sec = max(60, _env_int("TELEGRAM_ALERT_PUSH_INTERVAL_SEC", 1800))
|
||||||
cities = _parse_city_list(os.getenv("TELEGRAM_ALERT_CITIES"))
|
cities = _parse_city_list(os.getenv("TELEGRAM_ALERT_CITIES"))
|
||||||
state_path = _state_file()
|
state_path = _state_file()
|
||||||
alert_cooldown_sec = max(60, _env_int("TELEGRAM_ALERT_PUSH_COOLDOWN_SEC", 1800))
|
alert_cooldown_sec = max(60, _env_int("TELEGRAM_ALERT_PUSH_COOLDOWN_SEC", 21600))
|
||||||
mispricing_interval_sec = max(
|
mispricing_interval_sec = max(
|
||||||
alert_cooldown_sec,
|
alert_cooldown_sec,
|
||||||
_env_int("TELEGRAM_ALERT_MISPRICING_INTERVAL_SEC", 7200),
|
_env_int("TELEGRAM_ALERT_MISPRICING_INTERVAL_SEC", 43200),
|
||||||
)
|
)
|
||||||
min_trigger_count = max(1, _env_int("TELEGRAM_ALERT_MIN_TRIGGER_COUNT", 2))
|
min_trigger_count = max(1, _env_int("TELEGRAM_ALERT_MIN_TRIGGER_COUNT", 3))
|
||||||
min_severity = str(os.getenv("TELEGRAM_ALERT_MIN_SEVERITY") or "medium").strip().lower()
|
min_severity = str(os.getenv("TELEGRAM_ALERT_MIN_SEVERITY") or "high").strip().lower()
|
||||||
if min_severity not in SEVERITY_RANK:
|
if min_severity not in SEVERITY_RANK:
|
||||||
min_severity = "medium"
|
min_severity = "high"
|
||||||
mispricing_only = _env_bool("TELEGRAM_ALERT_MISPRICING_ONLY", True)
|
mispricing_only = _env_bool("TELEGRAM_ALERT_MISPRICING_ONLY", True)
|
||||||
focus_digest_enabled = _env_bool("TELEGRAM_MARKET_FOCUS_DIGEST_ENABLED", True)
|
focus_digest_enabled = _env_bool("TELEGRAM_MARKET_FOCUS_DIGEST_ENABLED", True)
|
||||||
focus_digest_top_n = max(3, min(8, _env_int("TELEGRAM_MARKET_FOCUS_DIGEST_TOP_N", 5)))
|
focus_digest_top_n = max(3, min(8, _env_int("TELEGRAM_MARKET_FOCUS_DIGEST_TOP_N", 5)))
|
||||||
focus_digest_interval_sec = max(
|
focus_digest_interval_sec = max(
|
||||||
300,
|
300,
|
||||||
_env_int("TELEGRAM_MARKET_FOCUS_DIGEST_INTERVAL_SEC", 1800),
|
_env_int("TELEGRAM_MARKET_FOCUS_DIGEST_INTERVAL_SEC", 21600),
|
||||||
)
|
)
|
||||||
def _runner() -> None:
|
def _runner() -> None:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user