mirror of
https://github.com/alphabench/raptorbt.git
synced 2026-11-02 07:56:12 +00:00
In plain words: a timer set for 09:20 on a live tick stream now fires at 09:20, even when the row that revealed 09:20 carried no price. It used to wait for the next print the session accepted, which for an index that only ticks on a trade could be minutes later. A row with ltp == 0 and no two-sided book appends no event, and push_tick still returns 0, but its timestamp proves the market reached that instant. The stream now advances that symbol's clock on such a row and fires every alert and timer due by then inside the push. Orders the timer submits are routed to their instrument at once and match from its next print, the rule submission_idx already applied across instruments. Intents such as enter() and close_position() name no symbol, so they are held for that symbol's next trade event rather than left on the queue for whichever symbol prints first. The batch runner drops such rows in the Rust merge and cannot fire on them; the docstring and README say so. Four tests pin it: an alert fires on a quote-less print with ts_fired at that instant and not again on the next print; a timer fires once per symbol whichever row reveals the time; an order submitted between prints is already resting and fills on the next print; an intent queued between prints closes its own symbol, not the one that prints first. All four fail with the old behaviour. Version 0.13.4. Co-authored-by: Pier Code <no-reply@piercode.com>