Skip to content

Order Heartbeat

Order WS messages must be drained regularly to keep broker state up to date.

Call broker.dispatch_order_notifications() on a timer even when market data is quiet.

import backtrader as bt

class HeartbeatStrategy(bt.Strategy):
    def __init__(self) -> None:
        self.add_timer(
            when=bt.Timer.SESSION_START,
            interval=10.0,
            repeat=True,
        )

    def notify_timer(self, timer, when, *args, **kwargs) -> None:
        self.broker.dispatch_order_notifications(max_messages=200)

What NOT To Do

  • Do not wait for market ticks to process orders if your strategy is order-heavy.

Scenario Example

Scenario: Orders appear stuck in Submitted status. - Ensure the heartbeat is running. - Confirm the Order WS is connected and draining.