Data Reference
Schemas for ctx.data (DataAccessor). Use these methods inside universe() and signal().
Examples use synthetic data for illustration. Actual values will differ.
ohlcv
ohlcv(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: MultiIndex DataFrame (date, symbol) with columns: open, high, low, close, volume, adjusted_close (float).
Example (synthetic data)
ctx.data.ohlcv(["SYN_001", "SYN_002"], lookback=3) # open high low close volume adjusted_close # date symbol # 2025-01-02 SYN_001 100.0 102.5 99.1 101.3 1500000 101.3 # 2025-01-02 SYN_002 45.2 46.8 44.9 46.1 800000 46.1
returns
returns(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame indexed by date; columns are symbols; values are daily close-to-close returns (float).
Example (synthetic data)
ctx.data.returns(["SYN_001", "SYN_002"], lookback=5) # SYN_001 SYN_002 # 2025-01-06 0.012 -0.004 # 2025-01-07 -0.003 0.008
close
close(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame indexed by date; columns are symbols; values are close (float).
Example (synthetic data)
ctx.data.close(["SYN_001"], lookback=2) # SYN_001 # 2025-01-06 100.0 # 2025-01-07 101.2
open
open(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame indexed by date; columns are symbols; values are open (float).
Example (synthetic data)
ctx.data.open(["SYN_001"], lookback=2) # SYN_001 # 2025-01-06 100.0 # 2025-01-07 101.2
high
high(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame indexed by date; columns are symbols; values are high (float).
Example (synthetic data)
ctx.data.high(["SYN_001"], lookback=2) # SYN_001 # 2025-01-06 100.0 # 2025-01-07 101.2
low
low(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame indexed by date; columns are symbols; values are low (float).
Example (synthetic data)
ctx.data.low(["SYN_001"], lookback=2) # SYN_001 # 2025-01-06 100.0 # 2025-01-07 101.2
volume
volume(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame indexed by date; columns are symbols; values are volume (float).
Example (synthetic data)
ctx.data.volume(["SYN_001"], lookback=2) # SYN_001 # 2025-01-06 100.0 # 2025-01-07 101.2
vwap
vwap(symbols=None, lookback=None, start_date=None, end_date=None) -> DataFrame
| Parameter | Type | Description |
|---|---|---|
| symbols | list[str] | None | Subset of universe symbols (default: all available) |
| lookback | int | None | Number of most recent trading days |
| start_date | str | None | Inclusive start date YYYY-MM-DD |
| end_date | str | None | Inclusive end date YYYY-MM-DD |
Returns: DataFrame of volume-weighted average price per symbol per day (computed from OHLCV if vwap column absent).
Example (synthetic data)
ctx.data.vwap(["SYN_001"], lookback=2) # SYN_001 # 2025-01-06 100.5 # 2025-01-07 101.0
fundamentals
fundamentals(symbol: str, dataset: str = "key_metrics_ttm") -> dict | None
| Parameter | Type | Description |
|---|---|---|
| symbol | str | Ticker symbol in the platform universe |
| dataset | str | key_metrics_ttm | ratios_ttm | income_statement | balance_sheet | cash_flow | earnings | profile |
Returns: Dictionary of field name → numeric value for the requested dataset, or None if unavailable.
Example (synthetic data)
ctx.data.fundamentals("SYN_001", "key_metrics_ttm")
# {"peRatioTTM": 18.5, "returnOnEquityTTM": 0.22, "debtToEquityTTM": 0.45, ...}fundamentals datasets
key_metrics_ttm (57 fields)
revenuePerShareTTM, netIncomePerShareTTM, operatingCashFlowPerShareTTM, freeCashFlowPerShareTTM, cashPerShareTTM, bookValuePerShareTTM, tangibleBookValuePerShareTTM, shareholdersEquityPerShareTTM, interestDebtPerShareTTM, marketCapTTM, enterpriseValueTTM, peRatioTTM, priceToSalesRatioTTM, pocfratioTTM, pfcfRatioTTM, pbRatioTTM, ptbRatioTTM, evToSalesTTM, enterpriseValueOverEBITDATTM, evToOperatingCashFlowTTM, evToFreeCashFlowTTM, earningsYieldTTM, freeCashFlowYieldTTM, debtToEquityTTM, debtToAssetsTTM, netDebtToEBITDATTM, currentRatioTTM, interestCoverageTTM, incomeQualityTTM, dividendYieldTTM, payoutRatioTTM, salesGeneralAndAdministrativeToRevenueTTM, researchAndDevelopmentToRevenueTTM, intangiblesToTotalAssetsTTM, capexToOperatingCashFlowTTM, capexToRevenueTTM, capexToDepreciationTTM, stockBasedCompensationToRevenueTTM, grahamNumberTTM, roicTTM, returnOnTangibleAssetsTTM, grahamNetNetTTM, workingCapitalTTM, tangibleAssetValueTTM, netCurrentAssetValueTTM, investedCapitalTTM, averageReceivablesTTM, averagePayablesTTM, averageInventoryTTM, daysSalesOutstandingTTM, daysPayablesOutstandingTTM, daysOfInventoryOnHandTTM, receivablesTurnoverTTM, payablesTurnoverTTM, inventoryTurnoverTTM, roeTTM, capexPerShareTTM
ratios_ttm (69 fields)
dividendYielTTM, dividendYielPercentageTTM, peRatioTTM, pegRatioTTM, payoutRatioTTM, currentRatioTTM, quickRatioTTM, cashRatioTTM, daysOfSalesOutstandingTTM, daysOfInventoryOutstandingTTM, operatingCycleTTM, daysOfPayablesOutstandingTTM, cashConversionCycleTTM, grossProfitMarginTTM, operatingProfitMarginTTM, pretaxProfitMarginTTM, netProfitMarginTTM, effectiveTaxRateTTM, returnOnAssetsTTM, returnOnEquityTTM, returnOnCapitalEmployedTTM, netIncomePerEBTTTM, ebtPerEbitTTM, ebitPerRevenueTTM, debtRatioTTM, debtEquityRatioTTM, longTermDebtToCapitalizationTTM, totalDebtToCapitalizationTTM, interestCoverageTTM, cashFlowToDebtRatioTTM, companyEquityMultiplierTTM, receivablesTurnoverTTM, payablesTurnoverTTM, inventoryTurnoverTTM, fixedAssetTurnoverTTM, assetTurnoverTTM, operatingCashFlowPerShareTTM, freeCashFlowPerShareTTM, cashPerShareTTM, operatingCashFlowSalesRatioTTM, freeCashFlowOperatingCashFlowRatioTTM, cashFlowCoverageRatiosTTM, shortTermCoverageRatiosTTM, capitalExpenditureCoverageRatioTTM, dividendPaidAndCapexCoverageRatioTTM, priceBookValueRatioTTM, priceToBookRatioTTM, priceToSalesRatioTTM, priceEarningsRatioTTM, priceToFreeCashFlowsRatioTTM, priceToOperatingCashFlowsRatioTTM, priceCashFlowRatioTTM, priceEarningsToGrowthRatioTTM, priceSalesRatioTTM, dividendYieldTTM, enterpriseValueMultipleTTM, priceFairValueTTM, dividendPerShareTTM, bookValuePerShareTTM, tangibleBookValuePerShareTTM, shareholdersEquityPerShareTTM, interestDebtPerShareTTM, marketCapTTM, enterpriseValueTTM, evToSalesTTM, evToOperatingCashFlowTTM, evToFreeCashFlowTTM, earningsYieldTTM, freeCashFlowYieldTTM
Other datasets (key fields)
- income_statement: revenue, grossProfit, operatingIncome, netIncome, eps, ebitda, ...
- balance_sheet: totalAssets, totalLiabilities, totalEquity, cashAndCashEquivalents, totalDebt, ...
- cash_flow: operatingCashFlow, capitalExpenditure, freeCashFlow, dividendsPaid, ...
- earnings: date, eps, epsEstimated, revenue, revenueEstimated, ...
- profile: companyName, sector, industry, country, exchange, ...
sector
sector(symbol: str) -> str | None
| Parameter | Type | Description |
|---|---|---|
| symbol | str | Ticker symbol |
Returns: GICS sector name string, or None.
Example (synthetic data)
ctx.data.sector("SYN_001") # "Technology"market_cap
market_cap(symbol: str) -> float | None
| Parameter | Type | Description |
|---|---|---|
| symbol | str | Ticker symbol |
Returns: Market capitalization in USD (float). Used internally; not exposed via public APIs.
Example (synthetic data)
ctx.data.market_cap("SYN_001") # 250000000000.0Common Recipes
Momentum ranking (6-month return)
returns = ctx.data.returns(lookback=126)
cum = (1 + returns).prod() - 1
top = cum.sort_values(ascending=False).head(20)
w = 1.0 / len(top)
signal = {sym: round(w, 6) for sym in top.index}Sector filtering
all_syms = list(ctx.data.returns(lookback=5).columns) return [s for s in all_syms if ctx.data.sector(s) == "Technology"]
Quality scoring (ROE + margins)
scores = {}
for sym in universe:
m = ctx.data.fundamentals(sym, "key_metrics_ttm")
if m and m.get("returnOnEquityTTM") and m.get("netProfitMarginTTM"):
scores[sym] = m["returnOnEquityTTM"] * m["netProfitMarginTTM"]
top = sorted(scores, key=scores.get, reverse=True)[:15]
w = 1.0 / len(top)
signal = {s: w for s in top}Volatility (trailing std of returns)
rets = ctx.data.returns(lookback=21)
vol = rets.std()
low_vol = vol.nsmallest(20)
w = 1.0 / len(low_vol)
signal = {sym: round(w, 6) for sym in low_vol.index}Mean reversion (z-score)
close = ctx.data.close(lookback=63)
z = (close.iloc[-1] - close.mean()) / close.std()
worst = z.nsmallest(20)
w = 1.0 / len(worst)
signal = {sym: round(w, 6) for sym in worst.index}See also Data API.