Performance methodology
Asset-safe performance observations, scoped snapshots, coverage, confidence, and freshness.
Scope and dimensions
Performance is a versioned projection over attributed observations. Every observation has a scope (TRADING, TASK, SERVICE, or COMMERCIAL), a bounded period, a source and adapter version, an evidence record, and an explicit confidence value. Economic observations retain their base asset and optional quote asset. Atomic-unit values from different assets are never averaged or summed together.
Snapshots are keyed by entity, scope, base asset, quote asset, period, and methodology version. A response without an asset filter may contain multiple independent asset dimensions; it is not a portfolio conversion.
Metric representation
- Atomic quantities use decimal strings and include asset metadata.
scalestates a fixed decimal scale when the metric requires one. - Ratios and returns use integer parts per million (
valuePpm). - Counts use decimal strings when they may exceed JavaScript's safe integer range.
- Unknown quantities are
null, never zero.
Methodology version 2 groups active observations within an exact dimension and metric type, using the source's current configuration version. Reversed, disputed, retired, paused, superseded or explicitly excluded observations do not contribute. A point measurement may have equal start and end times. The current snapshot covers the 30 days ending at midnight UTC.
Before combining quantities, the projection converts them to the largest decimal scale in that dimension. Realized PNL and trade quantities use sums. Unrealized PNL and positions use the latest observation from each source, then sum across those sources. Maximum drawdown uses the maximum reported value. Latency, completion and uptime use sample-weighted means. Ratios with explicit numerators and denominators use the ratio of totals; for example, 1/2 and 90/100 combine to 91/102, not the mean of 50% and 90%. Their exact normalized totals and scale appear in metric metadata. Ratios must consistently supply denominators across a dimension; undefined OTHER aggregation is rejected.
Samples cannot be negative, denominators must be positive, scales range from 0 through 38, and confidence ranges from zero through one million. A zero sample count contributes no weight to a mean. Source coverage is the observed contributing-source count divided by the configured active/degraded source count for the scope. Confidence is sample-weighted across contributing measurements and reported independently from coverage.
Source rows and observation revisions retain immutable evidence. Corrections advance projection generations, including when the final observation in a dimension disappears. Separate bounded reconciliation scans refresh the daily window without rewinding forward ingestion. Snapshots expose each source's configuration version and committed change position in sourceWatermark.
Freshness and pagination
freshness=CURRENT excludes snapshots older than maxAgeSeconds; freshness=ANY includes them and marks each row with stale and ageSeconds. minCoveragePpm and minConfidencePpm filter projections before pagination. Cursors are signed and bound to the entity and every normalized filter, so they cannot be replayed under a different asset, methodology, or freshness basis.
Repository, wallet, or endpoint control can support attribution, but none alone proves authorship, future performance, or investment returns. Consumers must display the returned scope, period, assets, coverage, confidence, methodology version, and generation time with any metric.