Skip to content

Commit 93123ae

Browse files
committed
simplify compact notifications and update dashboard pin
1 parent 91c5c45 commit 93123ae

5 files changed

Lines changed: 46 additions & 20 deletions

File tree

constraints.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Auto-updated by update-qpk-pin.yml on every push to QPK main.
55

66
quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@b0eacd2fe4884f7f2447b704a232e9a121f396c4
7-
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@c8df5f9659340965bd7f53998892ed1018ed4254
7+
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@c57fb20528d40f363ae149ae6e3f6b1a240ec237
88
hk-equity-strategies @ git+https://github.com/QuantStrategyLab/HkEquityStrategies.git@700c8b19c46336d3d8fcba687e58553afcf0235f
99
cn-equity-strategies @ git+https://github.com/QuantStrategyLab/CnEquityStrategies.git@e09fd557c2bd9ae5f4d44228915c4e52c4b0dd21
1010
crypto-strategies @ git+https://github.com/QuantStrategyLab/CryptoStrategies.git@565be005e4186fd6d750884e7b0bc59f779f9549

notifications/telegram.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ def format_small_account_whole_share_bootstrap_notes(
185185
"account_overview_title": "📌 策略账户概览",
186186
"equity": "净值",
187187
"total_assets": "总资产(策略标的+现金)",
188+
"total_assets_margin": "总资产(策略净值)",
188189
"buying_power": "可用现金",
189190
"buying_power_margin": "购买力",
190191
"reserved_cash": "预留现金",
@@ -353,6 +354,7 @@ def format_small_account_whole_share_bootstrap_notes(
353354
"account_overview_title": "📌 Strategy Account",
354355
"equity": "Equity",
355356
"total_assets": "Total assets",
357+
"total_assets_margin": "Total assets (strategy net liquidation)",
356358
"buying_power": "Available cash",
357359
"buying_power_margin": "Buying power",
358360
"reserved_cash": "Reserved cash",
@@ -724,11 +726,15 @@ def _is_dashboard_account_metric_line(line: str, *, translator: Callable[..., st
724726
translator("investable_cash"),
725727
translator("equity"),
726728
"Total assets (strategy symbols + cash)",
729+
"Total assets (strategy symbols + cash, ex-margin)",
730+
"Total assets (strategy net liquidation)",
727731
"Buying power",
728732
"Reserved cash",
729733
"Investable cash",
730734
"Equity",
731735
"总资产(策略标的+现金)",
736+
"总资产(策略标的+现金,不含融资额度)",
737+
"总资产(策略净值)",
732738
"购买力",
733739
"预留现金",
734740
"可投资现金",
@@ -744,14 +750,15 @@ def _format_generated_dashboard_lines(
744750
translator: Callable[..., str],
745751
) -> list[str]:
746752
lines = [translator("account_overview_title")]
753+
cash_only_execution = bool(execution.get("cash_only_execution", portfolio.get("cash_only_execution", True)))
747754
total_equity = _safe_float(portfolio.get("total_equity"))
748755
if total_equity is not None:
749-
lines.append(f" - {translator('total_assets')}: {_format_money(total_equity)}")
756+
total_assets_label = "total_assets" if cash_only_execution else "total_assets_margin"
757+
lines.append(f" - {translator(total_assets_label)}: {_format_money(total_equity)}")
750758
buying_power = _safe_float(portfolio.get("liquid_cash"))
751759
if buying_power is None:
752760
buying_power = _safe_float(portfolio.get("buying_power"))
753761
if buying_power is not None:
754-
cash_only_execution = bool(execution.get("cash_only_execution", portfolio.get("cash_only_execution", True)))
755762
buying_power_label = "buying_power" if cash_only_execution else "buying_power_margin"
756763
lines.append(f" - {translator(buying_power_label)}: {_format_money(buying_power)}")
757764
reserved_cash = _safe_float(execution.get("reserved_cash"))
@@ -1224,8 +1231,6 @@ def render_cycle_summary(result: Mapping[str, Any], *, lang: str = "en") -> str:
12241231
lines.append(SEPARATOR)
12251232
lines.extend(dashboard_lines)
12261233
lines.append(SEPARATOR)
1227-
lines.extend(_format_timing_lines(execution, translator=translator))
1228-
lines.extend(_format_signal_lines(execution, translator=translator))
12291234
lines.extend(target_diff_lines)
12301235
lines.extend(
12311236
str(line).strip()

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ pytest
88
pytz
99
requests
1010
quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@b0eacd2fe4884f7f2447b704a232e9a121f396c4
11-
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@c8df5f9659340965bd7f53998892ed1018ed4254
11+
us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@c57fb20528d40f363ae149ae6e3f6b1a240ec237

tests/test_notifications_telegram.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def test_render_cycle_summary_dashboard_text_does_not_hide_account_overview():
4949
assert "Total assets (strategy symbols + cash): $2,000.00" not in message
5050
assert "Buying power: $100.00" not in message
5151
assert "📌 Strategy portfolio" not in message
52-
assert message.count("🎯 Signal:") == 1
52+
assert "🎯 Signal:" not in message
5353

5454

5555
def test_render_cycle_summary_includes_tqqq_volatility_delever_risk_control():
@@ -94,8 +94,30 @@ def test_render_cycle_summary_includes_tqqq_volatility_delever_risk_control():
9494
lang="en",
9595
)
9696

97-
assert (
98-
"🛡️ Risk control: QQQ 5d annualized volatility 31.2% is above effective threshold 30.0% "
99-
"(dynamic p90, 252d lookback, bounded 24.0%-36.0%, samples 252); TQQQ redirects to QQQM "
100-
"(leveraged sleeve: TQQQ retained 0.0%, QQQM 100.0%)"
101-
) in message
97+
assert "🛡️ Risk control:" not in message
98+
99+
100+
def test_render_cycle_summary_relabels_total_assets_when_margin_is_enabled():
101+
message = render_cycle_summary(
102+
{
103+
"account": "****1234",
104+
"strategy_profile": "tqqq_growth_income",
105+
"dry_run_only": False,
106+
"portfolio": {
107+
"total_equity": 50000.0,
108+
"liquid_cash": 75000.0,
109+
"portfolio_rows": (("TQQQ",),),
110+
"market_values": {"TQQQ": 8000.0},
111+
"quantities": {"TQQQ": 10},
112+
},
113+
"allocation": {"targets": {"TQQQ": 8000.0}},
114+
"execution": {"cash_only_execution": False},
115+
"submitted_orders": [],
116+
"skipped_orders": [],
117+
},
118+
lang="zh",
119+
)
120+
121+
assert "总资产(策略净值): $50,000.00" in message
122+
assert "购买力: $75,000.00" in message
123+
assert "不含融资额度" not in message

tests/test_rebalance_service.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -795,8 +795,8 @@ def test_render_cycle_summary_formats_skipped_orders_in_unified_chinese_template
795795
assert "🔔 【调仓指令】" in message
796796
assert "🆔 账户: ****1234" in message
797797
assert "📌 策略账户概览" in message
798-
assert "⏱ 执行时点: 2026-05-20 -> 2026-05-21 (次一交易日执行)" in message
799-
assert "🎯 信号: 入场信号" in message
798+
assert "⏱ 执行时点:" not in message
799+
assert "🎯 信号:" not in message
800800
assert "调仓变化: BOXX +7.89 USD, QQQ +44.39 USD, TQQQ +44.39 USD" in message
801801
assert "🧾 执行明细" in message
802802
assert "未下单: 原因=TQQQ,QQQ(整数股不足 1 股,无需下单), BOXX(低于调仓阈值)" in message
@@ -842,10 +842,9 @@ def test_render_cycle_summary_localizes_strategy_signal_codes():
842842
lang="zh",
843843
)
844844

845-
assert "📊 市场状态: 🚀 风险开启(SOXX+SOXL)" in message
846-
assert "🎯 信号: SOXX 站上 140 日门槛线,持有 SOXL 70.0% + SOXX 20.0%" in message
847-
assert " - 小账户提示:净值 $0 低于建议 $1,000;整数股和最小仓位限制可能导致实盘无法完全复现回测" in message
848-
assert message.count("🎯 信号:") == 1
845+
assert "📊 市场状态:" not in message
846+
assert "🎯 信号:" not in message
847+
assert "小账户提示" not in message
849848
assert "signal_blend_gate_risk_on" not in message
850849
assert "soxl_ratio" not in message
851850
assert "small_account_warning_note" not in message
@@ -970,8 +969,8 @@ def test_render_cycle_summary_formats_skipped_orders_in_unified_english_template
970969
assert "🔔 【Rebalance Instruction】" in message
971970
assert "🆔 Account: ****1234" in message
972971
assert "📌 Strategy Account" in message
973-
assert "⏱ Timing: 2026-05-20 -> 2026-05-21 (next trading day)" in message
974-
assert "🎯 Signal: Entry Signal" in message
972+
assert "⏱ Timing:" not in message
973+
assert "🎯 Signal:" not in message
975974
assert "Target changes: BOXX +7.89 USD, QQQ +44.39 USD, TQQQ +44.39 USD" in message
976975
assert "🧾 Execution details" in message
977976
assert (

0 commit comments

Comments
 (0)