Methodology
How every number here is produced. The full version, kept beside the data, is in METHODOLOGY.md.
Where the numbers come from
The daily cycle, and who writes the public files.
Each Alpaca paper account runs a fixed daily cycle:
- 1After the close, the desk computes signals and nets them into an order plan.
- 2At the next open it submits that plan.
- 3After that close it sweeps late fills, marks positions and snapshots account equity.
- 4It then archives the session with an internal hash chain.
- 5A separate publisher reads that archive and writes the public repository. That publisher never reads the live database.
Which portfolios exist, and how many, is published in index.json.
One portfolio on this site trades the firm’s own capital, on two venues and a calendar of its own. Where its conventions differ from the paper accounts’ (the calendar, the grid the cash line accrues on, and the unit annualised statistics are counted in), they are published with the portfolio: RVB-MAKER-01 (methodology note).
For the paper accounts, each session’s net asset value is the broker’s own account equity taken at the after-close mark. It is not modelled or reconstructed from the desk’s fill records.
What each step writes
- 1The order plan, netted from that close’s signals
- 2The orders as they were submitted
- 3The fills as they came back, the marked positions, the equity snapshot
- 4That session’s record, hashed into the chain
- 5The public repository, written from the archive alone
Returns
How a daily return is defined.
Daily return is NAV today ÷ (NAV yesterday + flow today) − 1, where flow is any declared external capital movement on that date. Returns are time-weighted: a movement of money that is not a trade is excluded from the return and kept in the balance, so the curve measures the return on the capital actually managed rather than on the size of the account.
Capital events are carried in four columns of each portfolio’s nav.csv: equity as reported, flow, adj_factor and equity_adj. A portfolio that has never had a movement has an adj_factor of 1 and identical equity columns. Where a portfolio has had a movement, its page lists each event with its date and amount, and the full evidence sits in the write-once snapshot for that session.
The curve starts at funded capital. The first equity snapshot is taken after the first trading day’s close and already contains that day’s result, so each portfolio is anchored instead to a broker equity reading taken before it traded, with the account funded and fully in cash. That date is the portfolio’s published inception. The anchor is a starting point, not a marked session.
What nav.csv carries
- Columns
equity,flow,adj_factor,equity_adj. The last is the series every published metric is computed on and every curve is drawn from.
Metrics
How they are computed, and when they are published.
Every metric is computed by one function in the firm’s metrics module, with standard definitions. The input is published in full: nav.csv is the entire equity curve, and every figure is published beside the convention and the risk-free rate it used, so any number here can be recomputed independently.
Sharpe, Sortino and Calmar are measured in excess of the risk-free rate: the 3-month Treasury constant-maturity yield, averaged over the window each ratio covers.
Annualised statistics are published once a portfolio has 60 marked sessions. Cumulative return, daily returns and the drawdown path are published from the first session.
The rate behind every ratio
- Series
- 3-month Treasury constant-maturity yield.
- Window
- Averaged over the window the ratio covers, not today’s print.
- Where it is published
- Beside every number it produced, in each portfolio’s
metrics.json.
Account level and per strategy
Reported figures, and attributed ones.
Account-level figures are exact: broker equity and broker fills. Per-strategy figures are an attributed model: the broker nets the desk’s orders, so each net fill is attributed back to the strategies that contributed to it, pro-rata by requested size.
The per-category contributions in attributed.csv are weighted per-strategy returns, so they do not sum exactly to the account’s daily return. They show where a result came from; the account-level figures are read from the broker and do not depend on them.
Two kinds of figure
- Account level
- Broker equity and broker fills, as reported.
- Per strategy
- Each net fill attributed back pro-rata by requested size.
The benchmark
What is drawn beside a portfolio.
The daily benchmark (benchmark.csv) is split- and dividend-adjusted SPY total return, on the same dates as the portfolio. The line on an intraday chart is SPY’s 5-minute price, the last bar at or before each instant, with no dividend adjustment and nothing interpolated between bars. Both are measured from SPY’s level when the account was funded, so every portfolio funded on the same day shows the same SPY line. The two series can differ by a few basis points.
Beside them runs a cash line accrued at the risk-free rate on the portfolio’s own calendar; the rate is published in its metrics.json.
The portfolios carry short positions and several asset classes, so the index is shown for context rather than as a like-for-like comparison.
A portfolio whose benchmark file carries no index data is compared with cash alone, and its chart draws no index line.
The lines beside a portfolio
- Daily
benchmark.csv. Split- and dividend-adjusted SPY total return, on the same dates as the portfolio.- Intraday
- The last 5-minute price bar at or before each instant. No dividend adjustment, nothing interpolated between bars.
- Cash
- Accrued at the risk-free rate, on the portfolio’s own calendar.
Costs and fills
How fills are priced, and how research was costed.
A paper account is a real broker account quoting live market prices, and the desk sends it real orders. The broker fills them from its paper simulator rather than routing them to a venue. Each released session publishes the orders as submitted (symbol, side, quantity, filled quantity, average fill price, submission time, status) and the fills as they came back (symbol, quantity, price, timestamp), along with the market data each fill was priced against: IEX (~2-3% of consolidated volume).
Published equity is the broker’s own account equity, so any charge the broker applied is already inside the published curve. The order and fill records carry no separate commission or fee line.
Research is costed differently. Every strategy is measured by one accounting engine that turns target weights into returns, with each charge applied to the weight actually held, the weight decided one bar earlier, including the first move from flat. The charges are a commission in basis points of turnover, declared per strategy; a half-spread on turnover; and borrow on short positions, at an annual rate. Spread and borrow default by asset class, as shown in the margin, and a strategy may override them. Square-root market impact is available but was not applied, as it requires volume data no strategy supplies.
No backtested return series is published on this site. Every curve and figure for a portfolio is computed from that account’s own published record.
Research cost model, defaults
| Asset class | Half-spread | Borrow a year |
|---|---|---|
| US equities and ETFs | 2.5 bp | 50 bp |
| Crypto | 8 bp | 300 bp |
| Spot FX majors | 1 bp | None |
Borrow accrues on the short leg only. Spot FX financing sits in the swap points rather than in a borrow rate.
Known limits
What to bear in mind when reading the figures.
Simulated fills are priced against the market data feed shown in the margin. A feed covering part of consolidated volume shows fewer quotes, at wider spreads, than the full tape a live order meets, so a simulated fill is not identical to a live one.
Alpaca’s account equity, the published NAV, and its daily portfolio-history series are timed differently and can differ on a given session. Each snapshot publishes both and the difference in basis points.
If a session was not recorded, the series has a gap: nothing is interpolated or carried forward, and the chart line breaks.
Feed behind the fills
- Paper accounts
IEX (~2-3% of consolidated volume)
Publication timing
What is released, and when.
Net asset value, daily returns, metrics and benchmarks are published with no lag. Orders, fills and positions are published as soon as the cycle that produced them has executed.
Release follows execution rather than the calendar: the desk stages a plan after the close for the next open, and that plan is published only once it has been sent. A detail file is keyed by the cycle that staged it, so the positions inside it are those held from the following open, and a portfolio page labels them that way.
Release
- NAV, returns, metrics, benchmarks
- No lag.
- Orders, fills, positions
- No lag
- Condition
- A cycle’s detail is released once that cycle has executed.