Skip to content

Commit cc5a085

Browse files
committed
Silence IBKR precheck cycle notifications
1 parent f0ea5ff commit cc5a085

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

application/runtime_composer.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from application.runtime_reporting_adapters import build_runtime_reporting_adapters
1212
from quant_platform_kit.common.runtime_assembly import build_runtime_assembly
1313
from quant_platform_kit.common.runtime_target import build_runtime_context_fields
14-
from quant_platform_kit.common.port_adapters import CallablePortfolioPort
14+
from quant_platform_kit.common.port_adapters import CallableNotificationPort, CallablePortfolioPort
1515
from quant_platform_kit.common.runtime_target import RuntimeTarget
1616

1717

@@ -124,16 +124,21 @@ def build_reporting_adapters(self):
124124
printer=lambda line: self.printer(line, flush=True),
125125
)
126126

127-
def build_rebalance_runtime(self):
127+
def build_rebalance_runtime(self, *, silent_cycle_notifications: bool = False):
128128
notification_adapters = self.build_notification_adapters()
129+
notifications = (
130+
CallableNotificationPort(lambda _message: None)
131+
if silent_cycle_notifications
132+
else notification_adapters.notification_port
133+
)
129134
return IBKRRebalanceRuntime(
130135
connect_ib=self.connect_ib_fn,
131136
portfolio_port_factory=lambda ib: CallablePortfolioPort(
132137
lambda: self.build_portfolio_snapshot_fn(ib)
133138
),
134139
compute_signals=self.compute_signals_fn,
135140
execute_rebalance=self.execute_rebalance_fn,
136-
notifications=notification_adapters.notification_port,
141+
notifications=notifications,
137142
)
138143

139144
def build_rebalance_config(self, *, extra_notification_lines=()):

main.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,9 @@ def run_strategy_core(*, strategy_plugin_signals=(), dry_run_only_override: bool
536536
return run_paper_liquidation_cycle()
537537
composer = build_composer(dry_run_only_override=dry_run_only_override)
538538
return run_rebalance_cycle(
539-
runtime=composer.build_rebalance_runtime(),
539+
runtime=composer.build_rebalance_runtime(
540+
silent_cycle_notifications=bool(dry_run_only_override),
541+
),
540542
config=composer.build_rebalance_config(extra_notification_lines=build_extra_notification_lines(strategy_plugin_signals)),
541543
)
542544

tests/test_runtime_composer.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def fake_reporting_builder(**kwargs):
8282
notification_adapters = composer.build_notification_adapters()
8383
reporting_adapters = composer.build_reporting_adapters()
8484
runtime = composer.build_rebalance_runtime()
85+
silent_runtime = composer.build_rebalance_runtime(silent_cycle_notifications=True)
8586
config = composer.build_rebalance_config(extra_notification_lines=("plugin-line",))
8687

8788
assert notification_adapters.notification_port == "notification-port"
@@ -97,6 +98,8 @@ def fake_reporting_builder(**kwargs):
9798
assert runtime.compute_signals == "compute-signals"
9899
assert runtime.execute_rebalance == "execute-rebalance"
99100
assert runtime.notifications == "notification-port"
101+
silent_runtime.notifications.send_text("precheck heartbeat")
102+
assert "sent_message" not in observed
100103
assert config.separator == "━━━━━━━━━━━━━━━━━━"
101104
assert config.strategy_display_name == "全球 ETF 轮动"
102105
assert config.reconciliation_output_path == "/tmp/reconciliation.json"

0 commit comments

Comments
 (0)