Portfolio · Endpoint
Equity curve
Derived equity, cumulative return and drawdown series for a book.
/v1/alphas/{alpha}/equity-curveParameters
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
alpha | string | required | — | alpha_id (e.g. CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42). Use the value returned by GET /v1/alphas. |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
book | string | optional | long_short | One of the books listed by /books — long_short and long_only, plus their raw_ twins for keys with raw-book access. A book the key may not see is rejected exactly like one that does not exist. |
from | YYYY-MM-DD | optional | window start | First trading day, inclusive. |
to | YYYY-MM-DD | optional | window end | Last trading day, inclusive. |
limit | integer 1–5000 | optional | 500 | Rows per page. Below 1 or above 5000 is a 400 bad_request naming the parameter and the constraint it broke. |
offset | integer | optional | 0 | Rows to skip; pagination.has_more is false at the end. |
Example request
curl
curl -H "Authorization: Bearer sxk_live_4f9c…" \ "https://api.simicx.com/v1/alphas/CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42/equity-curve?book=long_short&from=2026-06-19&to=2026-06-26"
Try it
Execute GET /v1/alphas/{alpha}/equity-curve against the live API using your key. Paste a key below to send without signing in, or sign in to auto-fill from your profile — either way, the call counts towards your rate limits. Whether the route answers depends on your key's endpoint allow-list — /v1/me lists what is in force; a new key starts with only the self-service routes until an administrator grants more.
Sent server-side via a same-origin proxy; only the documented host(s) are allowed.
Paste an API key above to list alphas your key may access.
Request
https://api.simicx.com/v1/alphas/{alpha}/equity-curve?book=long_short&limit=500&offset=0Example response
JSON · synthetic values, real schema
{
"data": [
{ "date": "2026-06-19", "timestamp": "2026-06-19T20:00:00Z", "starting_equity": 1.2798, "ending_equity": 1.2798, "period_return": 0.0, "cumulative_return": 0.0, "peak_equity": 1.2798, "drawdown": 0.0, "drawdown_pct": 0.0, "gross_exposure": 1.94, "net_exposure": 0.03, "turnover": 0.31 },
{ "date": "2026-06-22", "timestamp": "2026-06-22T20:00:00Z", "starting_equity": 1.2798, "ending_equity": 1.2741, "period_return": -0.004454, "cumulative_return": -0.004454, "peak_equity": 1.2798, "drawdown": 0.0057, "drawdown_pct": 0.4454, "gross_exposure": 1.95, "net_exposure": 0.01, "turnover": 0.02 },
{ "date": "2026-06-23", "timestamp": "2026-06-23T20:00:00Z", "starting_equity": 1.2741, "ending_equity": 1.2802, "period_return": 0.004788, "cumulative_return": 0.000313, "peak_equity": 1.2802, "drawdown": 0.0, "drawdown_pct": 0.0, "gross_exposure": 1.96, "net_exposure": 0.02, "turnover": 0.01 },
{ "date": "2026-06-26", "timestamp": "2026-06-26T20:00:00Z", "starting_equity": 1.2802, "ending_equity": 1.2867, "period_return": 0.005077, "cumulative_return": 0.005392, "peak_equity": 1.2867, "drawdown": 0.0, "drawdown_pct": 0.0, "gross_exposure": 1.96, "net_exposure": 0.02, "turnover": 0.11 }
],
"pagination": { "limit": 500, "offset": 0, "returned": 4, "total": 4, "has_more": false },
"meta": {
"run": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42",
"alpha_id": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42",
"source_alpha_id": "causal_haar_activity_displacement_reversal_b3874c9db78d",
"book": "long_short",
"summary": {
"book": "long_short",
"first_date": "2026-06-19",
"last_date": "2026-06-26",
"sessions": 4,
"starting_equity": 1.2798,
"ending_equity": 1.2867,
"peak_equity": 1.2867,
"total_return": 0.005392,
"cumulative_return_pct": 0.5392,
"max_drawdown": 0.0057,
"max_drawdown_pct": 0.4454,
"max_drawdown_date": "2026-06-22"
}
}
}Response fields
Every field the response can carry, what it means, and how it is computed.
datetimestampstarting_equityending_equityperiod_returncumulative_returnpeak_equitydrawdowndrawdown_pctgross_exposurenet_exposureturnovermeta.summarypagination.limitoffsetpagination.returnedpagination.totalpagination.has_moremeta.runmeta.alpha_iddatetimestampYYYY-MM-DD / ISO timestampThe observation point.
How it is computed
Every trading session in the window; timestamp is the engine's UTC instant for the session.
starting_equityending_equityratioLedger equity at the open and close of the session.
How it is computed
As in the portfolio ledger — growth multiples of initial equity, net of modelled costs.
period_returnratio | nullThe session's return.
How it is computed
(ending − starting) / starting; null — never an exception, never a silent 0 — when starting equity is missing or zero.
cumulative_returnratio | nullCompounded return within the requested window.
How it is computed
Running product of (1 + period_return), so the window starts at 0 — a 2023 query answers 2023's return, not a slice of an off-screen baseline.
peak_equityratioRunning peak within the window.
How it is computed
max of starting and ending equity seen so far — the opening equity counts, so a first-session loss registers as drawdown.
drawdowndrawdown_pctequity units (≥ 0) / percentage pointsDecline from the running peak.
How it is computed
peak_equity − ending_equity; _pct is that as a percentage of the peak. The window's worst values land in meta.summary.max_drawdown*.
gross_exposurenet_exposureturnoverratioThe session's exposures and traded fraction.
How it is computed
Carried through from the same day's portfolio ledger row — see /portfolio.
meta.summaryobjectWhole-window figures over the full series, not just the page.
How it is computed
{ book, first_date, last_date, sessions, starting_equity, ending_equity, peak_equity, total_return, cumulative_return_pct, max_drawdown, max_drawdown_pct, max_drawdown_date }. Computed over the full series before pagination so each page shares the same baseline.
pagination.limitoffsetintegerThe page window applied.
How it is computed
Echoes the request parameters (or their defaults — 100 rows, 500 on /equity-curve).
pagination.returnedintegerRows in this page.
How it is computed
data.length — below limit on the last page.
pagination.totalintegerRows matching the query across all pages.
How it is computed
Server-side count before paging.
pagination.has_morebooleanWhether another page exists.
How it is computed
offset + returned < total — false on the last page; stop paging there.
meta.runstringThe alpha that served the response.
How it is computed
Echoes the resolved alpha_id. Retain for reproducible analysis.
meta.alpha_idstringSource label associated with the alpha, when present.
How it is computed
Informational; address data endpoints with alpha_id / meta.run.
Illustration
Illustrative synthetic data — the shape of GET /v1/alphas/{alpha}/equity-curve. Equity is normalised to 1.00 at inception; the lower panel is drawdown against the running peak, whose minimum is the max_drawdown metric.

