Every step is an index
The dataset is precomputed once into a fixed feature tensor. After that `step()` does no indicator work at all — it reads a row. Rollout speed stops depending on how many features you asked for.
A Gymnasium-compatible, microstructure-aware backtest environment: precompute the dataset to a fixed feature tensor once, and every step() becomes a pure array index.