feat: add rule-based weather alert engine for short-horizon trading signals, including momentum, forecast breakthrough, Ankara DEB, and advection alerts.

This commit is contained in:
2569718930@qq.com
2026-03-06 12:36:13 +08:00
parent 43b7c1b480
commit 4d6a915690
2 changed files with 17 additions and 1 deletions
+16
View File
@@ -481,6 +481,8 @@ def _build_telegram_messages(
temp_symbol = city_weather.get("temp_symbol", "°C")
city_name = city_weather.get("display_name") or city_weather.get("name", "").title()
current_temp = _sf((city_weather.get("current") or {}).get("temp"))
local_time = str(city_weather.get("local_time") or "").strip()
obs_time = str(((city_weather.get("current") or {}).get("obs_time")) or "").strip()
center_deb = rules.get("ankara_center_deb_hit", {})
momentum = rules.get("momentum_spike", {})
advection = rules.get("advection", {})
@@ -548,6 +550,13 @@ def _build_telegram_messages(
f"类型:{types_cn}",
f"动态:{dyn}",
]
if local_time or obs_time:
if local_time and obs_time:
lines_zh.append(f"时间:当地 {local_time} | 观测 {obs_time}")
elif local_time:
lines_zh.append(f"时间:当地 {local_time}")
else:
lines_zh.append(f"时间:观测 {obs_time}")
if center_deb_line:
lines_zh.append(center_deb_line)
if peak_line:
@@ -574,6 +583,13 @@ def _build_telegram_messages(
f"Type: {type_en_str}",
f"Now: {current_temp:.1f}{temp_symbol}",
]
if local_time or obs_time:
if local_time and obs_time:
lines_en.append(f"Time: local {local_time} | observed {obs_time}")
elif local_time:
lines_en.append(f"Time: local {local_time}")
else:
lines_en.append(f"Time: observed {obs_time}")
if center_deb_line:
center_temp = _sf(center_station.get("temp"))
deb_prediction = _sf(center_deb.get("deb_prediction"))
+1 -1
View File
@@ -192,7 +192,7 @@ def _maybe_send_alert(
last_city_ts = int(last_city.get("ts") or 0)
last_sig_ts = int((state.get("by_signature") or {}).get(signature) or 0)
if last_city_sig == signature and now_ts - last_city_ts < cooldown_sec:
if last_city_ts and now_ts - last_city_ts < cooldown_sec:
return False
if last_sig_ts and now_ts - last_sig_ts < cooldown_sec:
return False