Skip to content

Glossary

This glossary defines common terms used throughout the StackSats documentation, covering both Bitcoin-specific concepts and system-specific mechanics.

Bitcoin Terms

Sats (Satoshis)

The smallest unit of Bitcoin. - 1 Bitcoin (BTC) = 100,000,000 sats - 1 sat = 0.00000001 BTC

Strategies in this framework focus on maximizing the number of sats accumulated per dollar invested.

MVRV (Market Value to Realized Value)

A ratio used to assess whether Bitcoin is overvalued or undervalued relative to its "fair value". - Market Value: Current price $\times$ circulating supply. - Realized Value: The sum of the value of all coins at the price they last moved on-chain. This is often considered the aggregate "cost basis" of the network. - Interpretation: - High MVRV (> 3.0) often indicates market tops (price is far above cost basis). - Low MVRV (< 1.0) often indicates market bottoms (price is below cost basis).

Halving

An event that occurs approximately every 4 years where the rate of new Bitcoin issuance (block subsidy) is cut in half. This is a key component of Bitcoin's disinflationary monetary policy and often delineates 4-year market cycles.

Block Subsidy

The amount of new Bitcoin created in each block (approximately every 10 minutes) and awarded to the miner. This subsidy halves every 210,000 blocks.


System Terms

Bitcoin Research Kit (BRK)

The upstream Bitcoin analytics project whose canonical merged_metrics*.parquet dataset anchors StackSats' documented data workflow. StackSats supports BRK at the project and data-workflow level, but not as a promise of Rust crate API compatibility. See BRK Data Source for the canonical upstream links and support boundary.

Canonical merged_metrics parquet

The canonical Bitcoin analytics dataset used by StackSats is the long-format Bitcoin Research Kit (BRK) merged_metrics*.parquet distribution (day_utc, metric, value). See Merged Metrics Data Guide, Merged Metrics Parquet Schema, Merged Metrics Taxonomy, and BRK Data Source.

Runtime BRK parquet

Runtime commands and load_data(...) read a runtime-compatible BRK-wide parquet (for example bitcoin_analytics.parquet) via STACKSATS_ANALYTICS_PARQUET, managed default ~/.stacksats/data/bitcoin_analytics.parquet, or legacy local fallback ./bitcoin_analytics.parquet. This runtime parquet is a StackSats-derived artifact from canonical BRK merged_metrics. For custom DataFrames, use ColumnMapDataProvider or StrategyRunner.from_dataframe(...).

Allocation Span

The fixed window of time (default: 365 days) over which a fixed budget must be fully allocated. The model solves for the optimal distribution of capital over this rolling window.

Feasibility Clipping

The mechanism by which the framework ensures that a proposed daily weight is valid. It checks: 1. Non-negativity: Weights cannot be negative. 2. Maximum Weight: Access to daily liquidity is capped (default: 10% of total budget). 3. Remaining Budget: The weight cannot exceed the budget remaining for the current allocation span.

Strategy

User-defined logic for feature engineering, signals, and allocation intent.

FeatureTimeSeries

Validated input to a strategy: a Polars-backed time series with canonical date column and feature columns. Enforces schema (required columns) and time-series invariants (sorted unique dates; optional no-forward-looking check). Passed to the strategy via StrategyContext.features.

WeightTimeSeries

Validated output of a strategy: single-window weights, prices, and metadata. Enforces framework invariants (weight sum = 1, min/max daily weight, no forward-looking at export). Use WeightTimeSeriesBatch for multi-window exports.

Locked Prefix

The portion of the allocation timeline that is in the past. Once a day passes, its allocation is "locked" and cannot be changed by the strategy. This immutability ensures realistic backtesting and prevents "repainting" of history.

Sats per Dollar (SPD)

The primary efficiency metric for accumulation strategies. - Formula: $\text{Total Sats Accumulated} / \text{Total USD Invested}$ - Meaning: It represents the weighted average purchasing power of your capital. A higher SPD means you acquired more Bitcoin for the same amount of dollars compared to a benchmark (like uniform DCA). - Why it matters: In an accumulation strategy, the goal is to lower your average cost basis. Maximizing SPD is mathematically equivalent to minimizing average cost basis.

Run Artifacts

Files written by lifecycle commands under:

output/<strategy_id>/<version>/<run_id>/

Common artifacts include backtest_result.json, metrics.json, weights.csv, timeseries_schema.md, and artifacts.json.

Public API

Stable interfaces documented in top-level stacksats exports, documented artifact payloads, and the documented CLI subset.

Internal Modules

Lower-level implementation modules that may change between releases (for example stacksats.runner, stacksats.strategy_types, stacksats.backtest, stacksats.data.prelude, and stacksats.export_weights). Prefer top-level public API surfaces for long-term integrations.