@kglozhkin/sim-state-core
v0.1.0
Published
Pure in-memory account/position/PnL state. Single source of truth shared by sim-state (online + backtest); eliminates backtest/live PnL skew.
Downloads
123
Readme
@kglozhkin/sim-state-core
Pure in-memory ядро учёта собственного состояния бота: позиции, капитал,
realized/unrealized P&L, отчёт. Единственный источник истины — используется
сервисом sim-state и в бэктесте (питается филлами от execution-simulator), и
в live (от order-gateway / user-канала). Один код → нет backtest/live skew по PnL.
Прецедент — @kglozhkin/orderbook-reducer (pure-lib, без NestJS/NATS).
API
const s = new SimState({ startingCapital: 1000 });
s.applyPlaced(order); // OrderPlaced — lock капитала под BUY
s.applyFilled(fill); // OrderFilled — позиция + realized + fees, конверт lock
s.applyCanceled(cancel); // OrderCanceled — free lock
s.setMark(tokenId, mid); // mark для unrealized
s.snapshot(); // { account, positions(+mark/unrealized), openOrders }
s.report(); // { summary, positions, fills } — паритет execution-simulatorМодель капитала (v1, long-ориентированная):
available = C0 + realizedNet − openLongCost − lockedBuy,
equity = C0 + realizedNet + unrealized.
Команды
yarn install
yarn build
yarn test # unit + equivalence (vs вендорнутый PositionTracker)Математика PositionBook.applyFill портирована дословно из
execution-simulator/src/pnl/position-tracker.ts; equivalence.test.ts стережёт
дрейф. Авторитетный паритет — e2e отчёта (sim-state vs execution-simulator
OUTPUT_JSON) перед чисткой execution-simulator.
