Skip to content

Corporate Actions

Market-data announcements are not always executable events. The Rust backtest runtime applies supported action models only when the required event terms and reference coverage are available.

Each run needs qualified coverage for its instruments and dates. Support for an action type does not mean every historical announcement has the terms needed to execute it.

ActionRuntime behavior
Forward splitMultiplies open quantities, divides entry prices, adjusts portfolio state, and rescales pending orders.
Reverse splitApplies the inverse quantity and price adjustment, then rescales pending orders.
Symbol changeMigrates positions, orders, indicator state, and active basket membership from the old instrument ID to the new one.
Cash distributionCaptures entitlement and applies the declared cash, withholding, and tax character on the event’s specified timeline.
Return of capitalApplies the declared cash distribution and reduces eligible long-lot basis, floored at zero; any excess over basis is tracked separately.

Supported cash, stock, and mixed cash-and-stock merger settlements use declared terms:

Merger considerationModeled outcome
CashCloses the source holding for the declared cash consideration.
StockConverts the source holding into declared successor shares, applying the specified basis and fractional-share terms.
MixedApplies declared cash and successor shares together, with the specified basis and tax treatment.

The engine has declared economic-action models for cash distributions, return of capital, spinoffs, and terminal settlements. These require their own complete event terms and coverage; the merger controls do not certify all those events in provider history.

The engine also applies timestamped basket membership changes. Add and Remove events control which instruments are active for basket-based evaluation; they are not corporate-action conversions.

The simulator applies the declared consideration, timing, successor identity, and accounting model. It does not infer missing merger terms from a ticker change, invent a liquidation price from the last quote, or treat an announcement category as complete settlement instructions.

Missing required identity or action coverage blocks the run. A supported static-basket or individual-symbol case does not qualify the whole index for the same dates; see Baskets and Universes for range limits.

A split changes quantity and price scale without changing the modeled position cost basis. The runtime updates open lots and pending orders so stops and limits keep their intended relative price level.

A symbol change moves the runtime’s state to the new instrument ID. This keeps an open position, pending orders, indicators, and a basket’s active membership aligned with the renamed instrument.

The runtime records cash-dividend and return-of-capital applications as broker events. Review those events alongside completed trades when an open position crosses an action date. They show what the backtest applied; they do not provide tax, legal, or corporate-action processing advice.

For mergers, inspect the source closure, delivered successor quantity, cash, and remaining basis together. An equity curve alone can hide an incorrect settlement or successor valuation.

Reruns keep the run’s original action reference data after reference updates. Price bars are not frozen; later price corrections can change results.