Skip to content

Commit 1fb979f

Browse files
Pigbibiclaude
andcommitted
feat(ui): add signal_short — concise notification headlines
- Add _signal_short(): extracts first clause before comma/colon - Show 🎯 headline + 📋 details separately - i18n: '无净值' → '暂未持仓,等待建仓' - Add '信号方向' / 'Signal Direction' label Co-Authored-By: Claude <noreply@anthropic.com>
1 parent a100a40 commit 1fb979f

2 files changed

Lines changed: 31 additions & 6 deletions

File tree

application/rebalance_service.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,20 @@ def _strategy_dashboard_text(signal_metadata, *, translator) -> str:
339339
return f"{dashboard_text}\n" + "\n".join(timing_lines)
340340

341341

342+
def _signal_short(signal_desc: str, max_len: int = 80) -> str:
343+
"""Extract the headline from a verbose signal description."""
344+
text = (signal_desc or "").strip()
345+
if not text:
346+
return ""
347+
# Take first clause before comma, colon, or exceed max_len
348+
for sep in (",", "。", ":", ";", "\n"):
349+
idx = text.find(sep)
350+
if idx > 0:
351+
text = text[:idx]
352+
break
353+
return text[:max_len] + ("…" if len(text) > max_len else "")
354+
355+
342356
def build_dashboard(
343357
positions,
344358
account_values,
@@ -408,8 +422,13 @@ def build_dashboard(
408422
diagnostics_text = "\n".join(diagnostics_lines)
409423
localized_status_desc = _localize_notification_text(status_desc, translator=translator)
410424
localized_signal_desc = _localize_notification_text(signal_desc, translator=translator)
425+
signal_short = _signal_short(localized_signal_desc)
411426
status_lines = _format_prefixed_text(status_icon, localized_status_desc)
412-
signal_lines = _format_prefixed_text("🎯", localized_signal_desc)
427+
# Show short signal first, then details if significantly different
428+
if len(signal_short) < len(localized_signal_desc) - 10:
429+
signal_lines = _format_prefixed_text("🎯", signal_short) + _format_prefixed_text("📋", localized_signal_desc)
430+
else:
431+
signal_lines = _format_prefixed_text("🎯", localized_signal_desc)
413432
status_text = "\n".join(status_lines)
414433
signal_text = "\n".join(signal_lines)
415434
return (
@@ -458,9 +477,13 @@ def _build_compact_message(
458477
status_line = _first_prefixed_line(status_icon, status_desc, translator=translator)
459478
if status_line:
460479
lines.append(status_line)
461-
signal_line = _first_prefixed_line("🎯", signal_desc, translator=translator)
462-
if signal_line:
463-
lines.append(signal_line)
480+
signal_short = _signal_short(str(signal_desc or ""))
481+
if signal_short:
482+
lines.append(f"🎯 {signal_short}")
483+
# Full signal details
484+
localized = _localize_notification_text(str(signal_desc), translator=translator)
485+
if len(localized) > len(signal_short) + 10:
486+
lines.append(f"📋 {localized}")
464487
compact_body = [str(line).strip() for line in body_lines or () if str(line).strip()]
465488
if compact_body:
466489
lines.append(separator)

notifications/telegram.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,9 @@ def _break_telegram_market_symbol_auto_links(value) -> str:
109109
"skip_reason_negative_cash": "账户现金为负,避免额外融资",
110110
"skip_order_detail": "{symbol}({reason})",
111111
"skip_order_detail_with_qty": "{symbol} {quantity}({reason})",
112-
"no_equity": "⏳ 等待净值",
112+
"no_equity": "暂未持仓,等待建仓",
113113
"signal_label": "信号",
114+
"signal_short_label": "信号方向",
114115
"signal_monthly_snapshot_waiting": "月度快照节奏 | 等待进入执行窗口",
115116
"status_monthly_snapshot_waiting_window": "不执行 | 原因=当前不在月度执行窗口 | 快照日期={snapshot_as_of} | 允许日期={allowed_dates}",
116117
"status_no_execution_window_after_snapshot": "不执行 | 原因=快照后没有可用执行窗口 | 快照日期={snapshot_as_of}",
@@ -322,8 +323,9 @@ def _break_telegram_market_symbol_auto_links(value) -> str:
322323
"skip_reason_negative_cash": "account cash is negative; buy skipped to avoid margin",
323324
"skip_order_detail": "{symbol} ({reason})",
324325
"skip_order_detail_with_qty": "{symbol} {quantity} ({reason})",
325-
"no_equity": "No equity",
326+
"no_equity": "No position yet — waiting to build",
326327
"signal_label": "Signal",
328+
"signal_short_label": "Signal Direction",
327329
"signal_monthly_snapshot_waiting": "monthly snapshot cadence | waiting inside execution window",
328330
"status_monthly_snapshot_waiting_window": "no-op | reason=outside monthly execution window | snapshot_as_of={snapshot_as_of} | allowed={allowed_dates}",
329331
"status_no_execution_window_after_snapshot": "no-op | reason=no execution window after snapshot | snapshot_as_of={snapshot_as_of}",

0 commit comments

Comments
 (0)