vec_sim_gen_plot() plotting helper exits, including error paths.strategyr as an optional suggested integration and excluded only its
external-package integration tests from CRAN runs. Core strategy-adapter
tests continue to run on every platform.Author and Maintainer fields; Authors@R is the
canonical author and maintainer declaration.URL and issue tracker BugReports fields to
DESCRIPTION.plumber as an optional Suggests dependency. The core package
remains usable without the local HTTP live-service tooling..DS_Store files from the source tree.synthetic_price_return instrument profile for signed
marked price exposure in educational price-return simulations.fee_scaled fills retain durable partial execution-quality outcomes.R CMD check --as-cran without
--no-manual and installs TinyTeX to build the reference manual. Warnings
remain release failures.Author and Maintainer DESCRIPTION fields so
Authors@R is the single canonical source of package authorship metadata.CRAN-CORE.md scope document. It identifies the stable
CRAN-facing execution, portfolio, asset/calendar, durable-data, risk, and
typed-accounting APIs; distinguishes compatibility and local-tooling exports;
and documents the 0.18.x execution and schema compatibility policy.0.18.x release line.
Any future API or schema change must now be deliberate, documented, and
accompanied by a release-version and migration decision.data.table versions.sim_exchange_load() continues to accept intact legacy serialized fields,
preserving read compatibility for state written before this release.inst/scripts entrypoints.
Declared the remaining data.table NSE bindings used by typed variation-event
projections, removing the associated R CMD check notes.sim_instrument_profiles() now documents profile-level settlement, carry,
lifecycle hooks, and explicit limitations for equity, ETF, futures, FX spot,
crypto spot, crypto perpetuals, bonds, and generic other assets.stock and etf assets gain their profile, calendar,
settlement, margin, and accounting defaults on import or exchange load.0.18.0. Generic other assets reject
unsupported corporate-action and lifecycle operations rather than implying
accounting support that does not exist.funding row to the public step event stream,
account-event ledger, and profile cash ledger.Added deterministic built-in calendars for XNYS, CME, FX 24/5, and crypto
24/7 sessions, including observed fixed XNYS holidays. Registered assets may
now declare bar_cadence_seconds; sim_exchange_calendarize_bars() derives
tradability from the asset calendar and sim_exchange_validate_cadence()
verifies timestamp alignment without treating holiday/session gaps as missing
data.
sim_exchange_new(calendar_mode = ...) now applies these rules at exchange
admission: "raw" preserves legacy feed behavior, "calendarize" turns
closed-session or cadence-misaligned observations into valuation-only bars,
and "strict" rejects them. Portfolio market-boundary records are written
only for fresh, completed, tradable bars.
Added durable exchange calendar exceptions, a complete deterministic XNYS
regular-holiday and Black Friday early-close schedule, and
sim_calendar_expected_bars() for expected completed-bar endpoints.
sim_portfolio_target_replay(production_calendar = TRUE) now rejects raw
admission and requires calendarized or strict market-bar handling.
Bars marked incomplete or non-tradable are now valuation-only in
sim_exchange_step(): they update durable market marks and snapshots but
cannot execute orders or trigger funding, variation margin, liquidation, or
strategy transitions. This makes stale/closed-market prices safe for account
valuation while preserving executable-bar semantics.
Added sim_portfolio_decision_policy() for calendar-aware target decisions.
complete_universe remains the default; as_of_valuation permits bounded
carried marks, and per_asset_decision permits only targets with a fresh,
completed, tradable bar. The policy is supported by incremental, batch, and
bulk target replay APIs.
heterogeneous_v2 now settles derivative variation margin inside the C++
typed account step. The exchange adapter persists the returned typed cash
event; it no longer recomputes variation margin in R for that route.
Homogeneous v2 inventory portfolio boundaries now use the same atomic typed heterogeneous adapter as mixed-profile groups. Typed cash, inventory, and margin tables are the v2 execution inputs; legacy state lists are derived compatibility projections only.
Explicit execution_engine = "legacy_v1" selection now raises a deprecation
warning. The internal portfolio_step_rcpp() state-list endpoint remains a
deprecated compatibility adapter while downstream callers migrate.
The typed margin-position derivative kernel is now the shared C++ execution
path. portfolio_step_rcpp() remains an internal deprecated compatibility
endpoint which adapts legacy state lists into typed margin rows; the
heterogeneous kernel no longer rebuilds or consumes legacy state lists.
sim_exchange_new() now defaults to execution_engine = "heterogeneous_v2".
Derivatives-only portfolio boundaries retain the established target/order
ledger through the typed derivative adapter; mixed inventory-plus-margin
boundaries continue through the atomic heterogeneous account adapter.
Added a typed heterogeneous account path for inventory and margin products. Mixed spot, equity/ETF, FX spot, futures, and perpetual target-rebalance groups now cross one atomic C++ admission boundary with shared cash.
Durable derivatives state is now held in margin_positions; legacy R state
lists remain compatibility projections rather than mixed-execution inputs.
Mixed target-derived derivative actions now carry action/direction, quantity
step, funding, and fee-aware admission metadata into C++. Infeasible target
increases clip to the largest feasible contract-step quantity with a public
margin_clipped outcome; explicit contract orders retain rejection semantics.
Atomic group preflight now evaluates all limit legs before any state mutation: GTC groups stay pending, IOC groups cancel, and FOK groups reject as a unit.
The heterogeneous ledger records futures variation margin and funding as typed durable cash events. Unified liquidation evaluates inventory and margin equity together.
cash_balances now records settled and unsettled cash as the durable
profile-aware balance state. Legacy account/currency fields are synchronized
compatibility projections; settlement-lag proceeds survive save/load without
being treated as settled collateral.
Heterogeneous inventory and mixed-profile adapters now pass both balance components into C++ valuation and preserve them on commit, so pending settlement cash is no longer dropped at an execution boundary.
Added sim_exchange_account_state() for a public-safe typed account
projection covering base-currency account totals, currency cash balances,
inventory positions, margin positions, and typed account events. Live
dashboard exports now include these durable tables.
The heterogeneous C++ account kernel now books explicit bond coupon,
bond_accrual, and redemption actions into settled currency cash and
emits typed lifecycle events. The v2 exchange adapter persists these events
to account and cash ledgers, marks their durable action records applied only
after the market boundary, and preserves them through save/load.
Added sim_bond_schedule_add() and sim_bond_schedules() for durable,
fixed ACT/day-count bond schedules. The C++ heterogeneous kernel now emits
non-cash accrual events, settles due coupons, and redeems inventory at
maturity; schedule cursors persist through exchange save/load and dashboard
exports.
The live state service and dashboard now expose the typed account projection directly: base-currency account totals, settled/unsettled cash by currency, inventory and margin positions, lifecycle events, and bond schedule cursors.
Bond schedule accrual is now an authoritative typed inventory receivable: it contributes to base-currency account equity before coupon payment, is reset when a coupon settles, and is included in maturity redemption.
Sparse bond replay boundaries now settle every crossed coupon in order and retain the subsequent partial-period accrued interest, matching an equivalent replay with intermediate market boundaries.
timestamp remains the completed-bar decision boundary.sim_schema_migrate() and load-time typed migration for durable
tables. Older exports gain missing fields without losing extension columns;
CSV reload now restores typed all-NA timestamp and lineage columns.sim_portfolio_market_step() advances a completed market batch once and
executes only earlier eligible orders; sim_portfolio_target_submit() then
accepts one agent's target decision without rerunning market execution.portfolio_market_boundaries exchange state. Target
submissions require the exact asset/timestamp bars to have been accepted by
the market-boundary API, preventing same-bar fills and accidental repeated
processing of a completed batch.sim_portfolio_target_step() as a compatibility composition of
the two boundary APIs. Sequential callers retain existing behavior, while
multi-agent callers can now make one market call followed by lightweight
target submissions.portfolio_fills ledger with immutable FILL...
identifiers for target-weight portfolio execution.order_id, rebalance_id,
agent/asset identity, execution action, quantity, price, fee, realized P&L,
and applicable target weight.sim_portfolio_export() now exports the durable ledger in fills.json, so
exports remain complete after subsequent exchange steps and save/load cycles.tgt_pos execution at full account exposure. Previously,
a target of 1 at lev = 1 could translate to exactly all available
notional and then fail when the execution fee was applied.equity - transaction_fee >= initial_margin.lev = 1 gross-exposure limits.Rcpp::List::create()
implementation accepts at most 20 arguments.sim_events() restores the established flat event
table before exposing it to callers.sim_portfolio_step() now derives its public order lifecycle table from
authoritative C++ before/after states and submitted orders, avoiding an
unstable portfolio-recorder serialization path on older Rcpp releases.sim_portfolio_execution() to define explicit, exchange-locked
target-weight execution assumptions: next-eligible-bar timing, fees,
slippage, spread, leverage, maintenance margin, and gross-weight limits.sim_portfolio_target_step(), the public multi-asset target-weight
replay interface. It translates named registered-symbol weights into
contract quantities from authoritative account equity and completed-bar or
carried valuation prices.rebalance_ids. A
single plan may contain multiple asset orders, including explicit
close-then-open actions for direction changes.no_new_bar outcomes, and assets
without a genuinely new bar cannot fill or trigger a new strategy reaction.NULL target weights now record an explicit no_decision outcome and keep
existing positions; rounded unchanged targets record no_op; invalid target
vectors record a rejected rebalance without submitting orders.sim_portfolio_export() for consumer-safe JSON exports of orders,
fills, positions, valuations, account snapshots, targets, and realized
weights. The export intentionally excludes credentials and provider payloads.inst/examples/vox_arena_portfolio_replay.R.sim_exchange_save() and sim_exchange_load() now preserve execution
configuration while remaining compatible with older save directories.Released as tag v0.12.0.
sim_portfolio_step(), an exported R wrapper around a new multi-asset
C++ step kernel.portfolio_step_rcpp(), a C++ kernel that processes one timestamp batch
across multiple assets for one agent/account.portfolio_margin = TRUE, instead of relying only on post-step R aggregation.sim_exchange_new(list(portfolio_margin = TRUE, ...)).failed.Released as tag v0.11.0.
sim_market_model_calibrate() to estimate market-model settings from
historical bars.sim_market_model_calibrate_exchange() to calibrate and install a
market model directly into an exchange.Released as tag v0.10.0.
sim_strategy_register(), sim_strategy_unregister(), sim_strategy_list(),
and sim_strategy_validate_config().inst/examples/.Released as tag v0.9.0.
sim_asset_add(),
sim_asset_remove(), and sim_assets().multi_asset_random_walk, multi_asset_ar_garch, factor_random_walk, and
regime_random_walk.Released as tag v0.7.0.
agent_id + asset_id.Released as tag v0.6.4.
sim_feed_warmup() for generating historical simulated bars before
starting a live feed.Released as tag v0.6.3.
sim_agent_add(), sim_agent_remove(), sim_agent_set_status(),
sim_agent_rankings(), and sim_agents_step().Released as tag v0.6.2.
inst/dashboard/replay/, inst/dashboard/live_state/, and
inst/dashboard/live_agent/.inst/dashboard/shared/.scripts/.Released as tag v0.6.1.
sim_market_events() for accessing market bars associated with a
simulation/export.Released as tag v0.6.0.
sim_feed_config(), sim_feed_configure(), sim_feed_start(),
sim_feed_stop(), sim_feed_step(), and sim_feed_status()./feed/config, /feed/start, /feed/stop, /feed/step, and
/feed/status.4h or 5m.Released as tag v0.5.0.
agent_commands, order_requests, and
order_cancellations.sim_agent_command_schema(), sim_submit_order(), sim_cancel_order(), and
sim_exchange_process_commands().sim_live_service() and sim_live_service_run().PaperTrader and PaperTradingPlatform
classes.Released as tag v0.4.0.
inst/dashboard/.sim_dashboard_export(), sim_dashboard_open(), and
sim_exchange_dashboard().inst/scripts/ for dashboard export,
replay export, exchange-step demo, and serving static dashboard output.inst/scripts/README.md documenting installed local scripts.Released as tag v0.3.0.
sim_state() to represent a reusable incremental execution state.sim_step(), an R wrapper for a C++ one-bar execution step.step_rcpp() as the C++ primitive that accepts prior state, one bar,
and a batch of explicit order actions.sim_step() directly for incremental
state updates instead of rerunning full history.TRADESIMR_SCHEMA_VERSION and
sim_schema_version().sim_import(), sim_read_manifest(), sim_read_table(),
sim_read_events(), sim_read_account(), and sim_run_from_events().sim_exchange_save(), sim_exchange_load(), and
sim_exchange_export_events().Released as tag v0.2.0.
sim_backtest().validate_market_data(), validate_intents(), as_market_bars(), and
as_target_positions().sim_events(), sim_orders(), sim_fills(), sim_positions(),
sim_cash_ledger(), sim_account(), and sim_risk().sim_schemas() and initial durable table schema definitions.sim_export() for writing simulation outputs to files.sim_exchange_new().vec_sim_* helpers as fast approximate baseline tools
while the stateful engine became the authoritative execution path.