This changelog follows the repository tags. There is no
v0.8.0 tag in the current git history; v0.9.0
follows v0.7.0.
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.