The data
Schema
376+ queryable columns per ticker. Numeric and string fields below, then boolean flags by family. Reference any by bare name in a SQL WHERE clause or as the signal in any /v2 endpoint.
Identification
| Name | Type | Description |
|---|---|---|
ticker | string | Ticker symbol. Equities use the exchange symbol (e.g. AAPL). Crypto uses the bare symbol (e.g. BTC, ETH). |
name | string | Company or asset display name. |
asset_type | enum | Asset class. One of `equity`, `etf`, or `crypto`. |
active | boolean | Whether this ticker is actively tracked. False for delisted or auto-halted symbols. |
Price & change
| Name | Type | Description |
|---|---|---|
price | number | Most recent trade price. |
previous_close | number | Official prior-session close. |
session_open | number | Today’s opening print. |
session_high | number | Highest trade so far today. |
session_low | number | Lowest trade so far today. |
day_change | number | Absolute change vs `previous_close`. |
day_change_pct | number | Percent change vs `previous_close`. Expressed as a percent (5.2 = 5.2%), not a fraction. |
gap_pct | number | Percent change of `session_open` vs `previous_close`. One value per session. |
premarket_price | number | Last premarket price, if available. |
afterhours_price | number | Last after-hours price, if available. |
bid | number | Best bid from Polygon’s consolidated NBBO at the most recent snapshot tick. |
bid_size | integer | Round lots at the bid. Raw count — NOT multiplied by 100. Multiply by 100 to get share count. |
ask | number | Best ask from Polygon’s consolidated NBBO at the most recent snapshot tick. |
ask_size | integer | Round lots at the ask. Raw count — NOT multiplied by 100. |
change_1w | number | Percent change in close vs. the close 5 trading days ago. Computed post-close; does NOT update intraday — use `from_open_pc` + `day_change_pct` for intraday-aware change. |
change_1m | number | Percent change vs. close ~21 trading days ago. Daily; see `change_1w` for note. |
change_3m | number | Percent change vs. close ~63 trading days ago. |
change_6m | number | Percent change vs. close ~126 trading days ago. |
change_1y | number | Percent change vs. close ~252 trading days ago. |
change_ytd | number | Percent change since the first trading day of the calendar year. |
from_open_pc | number | Intraday: percent change from today’s session open to the latest snapshot price. Resets at session boundary. |
premarket_change_pc | number | Pre-market: percent change from the previous session close to the latest pre-market print. Resets at session boundary. |
prev_day_open | number | Previous trading day’s official open. |
prev_day_high | number | Previous trading day’s session high. |
prev_day_low | number | Previous trading day’s session low. |
prev_day_volume | integer | Previous trading day’s total volume (raw shares). |
prev_day_vwap | number | Previous trading day’s session VWAP. |
min_open | number | Current minute bar’s open. Updates every snapshot tick during market hours. |
min_high | number | Current minute bar’s running high. |
min_low | number | Current minute bar’s running low. |
min_close | number | Current minute bar’s most-recent close (last print). |
min_vwap | number | Current minute bar’s volume-weighted average price. |
min_volume | integer | Current minute bar’s accumulated shares traded. |
min_trade_count | integer | Current minute bar’s number of trades. |
min_dollar_volume | number | Current minute bar’s dollar volume (close × volume approximation). |
min_day_accumulated_volume | integer | Today’s cumulative shares traded across the session so far (4 AM ET onward). |
min_day_accumulated_dollar_volume | number | Today’s cumulative dollar volume across the session so far. |
gap | number | Overnight gap as percent: `(today_open − prev_close) / prev_close`. Signed — positive = gap up, negative = gap down. Use this for custom gap thresholds; the boolean shortcuts `gap_up` (≥3%) and `gap_up_extreme` (≥10%) cover the canonical levels. |
days_up | integer | Consecutive trading days closing higher than the prior close. Resets to 0 on a down day. |
days_down | integer | Consecutive trading days closing lower than the prior close. Resets to 0 on an up day. |
afterhours_change_pc | number | Percent change between regular-session close and most recent after-hours print. Sparse — most equities don't trade in after-hours, and the column updates only when a print actually happens. |
Volume
| Name | Type | Description |
|---|---|---|
volume_today | integer | Shares traded so far today. |
avg_volume_10d | integer | 10-day trailing average daily volume. |
avg_volume_30d | integer | 30-day trailing average daily volume. |
relative_volume | number | Ratio of today’s pace-adjusted volume to the 10-day average. 2.0 means 2× normal. |
day_dollar_volume | number | Today’s cumulative dollar volume traded. |
day_vwap | number | Today’s session volume-weighted average price. |
options_volume | integer | Today’s options contract volume across all listed strikes and expiries for the underlying. Calls + puts combined. |
volume_change_vs_avg | number | Ratio of today’s pace-adjusted volume to its 10-day average. Numeric surface of the same denominator `relative_volume` uses. |
volume_ratio_5min | number | Current 5-minute window’s share volume divided by the 10-day average of that 5-minute window. Detects intraday-localized bursts. |
volume_trend_5d | number | Slope of daily volume regressed over the last 5 trading days. Positive = building, negative = drying. |
days_to_cover | number | Short interest divided by 30-day average daily volume. Trader’s "how many days of normal trading to cover all shorts" measure. |
short_interest | integer | Raw shares-shorted count as last reported (FINRA bi-monthly). Pair with `short_interest_settlement_date` (profile.ts) for the as-of date. |
short_percent_of_float | number | Short interest as a fraction of the free float. 0.10 = 10% of float is short. |
illiquid | boolean | Classification: `avg_volume_30d < 100k shares OR day_dollar_volume < $1M`. Useful to exclude micro-caps from scans. Boolean form proper belongs in flags.ts under `classification`; numeric thresholds documented here. |
high_short_interest | boolean | Classification: `short_percent_of_float >= 0.15`. Boolean form belongs in flags.ts. |
52-week & period extremes
| Name | Type | Description |
|---|---|---|
high_52w | number | Highest trade in the trailing 52 weeks (live, includes today). |
low_52w | number | Lowest trade in the trailing 52 weeks (live, includes today). |
high_20d | number | Highest trade in the trailing 20 trading days. |
low_20d | number | Lowest trade in the trailing 20 trading days. |
days_since_52w_high | integer | Trading days since the most recent 52-week high. |
days_since_52w_low | integer | Trading days since the most recent 52-week low. |
high_5d | number | Highest intraday high over the last 5 trading sessions, inclusive of the current session. |
low_5d | number | Lowest intraday low over the last 5 trading sessions, inclusive of the current session. |
high_5d_eod | number | Highest close over the last 5 trading sessions. Close-basis (no intraday wicks) — pair with `high_5d` to distinguish. |
low_5d_eod | number | Lowest close over the last 5 trading sessions. Close-basis. |
high_20d_eod | number | Highest close over the last 20 trading sessions. Close-basis. For the intraday-wick variant use `at_20d_high`. |
low_20d_eod | number | Lowest close over the last 20 trading sessions. Close-basis. |
high_52w_eod | number | Highest close over the trailing 52 weeks. The `_eod` distinguishes from the canonical intraday `52_week_high` (which captures wicks). |
low_52w_eod | number | Lowest close over the trailing 52 weeks. |
high_52w_date | date | Date the trailing-52-week high was set. Useful for "fresh 52w highs in the last 30 days" scans. |
low_52w_date | date | Date the trailing-52-week low was set. |
last_20d_high_date | date | Date the trailing-20-day high was set. |
last_20d_low_date | date | Date the trailing-20-day low was set. |
Relative position
| Name | Type | Description |
|---|---|---|
pct_from_sma_10 | number | Percent difference between current close and `sma_10`. Positive = above MA, negative = below. Continuous version of the `above_sma_10` boolean. |
pct_from_sma_20 | number | Percent difference between current close and `sma_20`. Continuous version of the `above_sma_20` boolean. |
pct_from_sma_100 | number | Percent difference between current close and `sma_100`. Daily-cadence because the slow MA changes slowly. |
pct_from_52w_high | number | Percent below the 52-week high. Always >= 0 (use the `at_52w_high` flag to test highs). |
pct_from_52w_low | number | Percent above the 52-week low. Always >= 0. |
position_in_52w_range | number | Where the live price sits in the 52-week range, 0–100. 0 = at low, 100 = at high. |
pct_from_sma_50 | number | Percent distance from the 50-day SMA. Negative when price is below the average. |
pct_from_sma_200 | number | Percent distance from the 200-day SMA. Negative when price is below the average. |
pct_from_vwap | number | Percent distance from today’s VWAP. |
Volatility
| Name | Type | Description |
|---|---|---|
atr_14 | number | 14-day Average True Range. |
atr_percent | number | ATR(14) as a percent of price. Useful as a volatility filter. |
bollinger_pct_b | number | Position within Bollinger bands. 0 = at lower band, 1 = at upper band, >1 = outside. |
bollinger_middle | number | 20-day SMA — the centerline of the Bollinger band. `bollinger_upper` and `bollinger_lower` are already documented; this fills in the missing middle. |
bollinger_width | number | `(bollinger_upper − bollinger_lower) / bollinger_middle`. Normalized width — measures volatility regime. Narrow widths often precede expansion (see `bollinger_squeeze` in flags.ts). |
vwap_upper_band | number | VWAP + 2 standard deviations of intraday price action. Dynamic resistance reference. |
vwap_lower_band | number | VWAP − 2 standard deviations. Dynamic support reference. |
Technical indicators
| Name | Type | Description |
|---|---|---|
vwap | number | Daily volume-weighted average price from market open through the most recent print. Updates intraday with each new tick. |
sma_100 | number | 100-day simple moving average of close. Slower than `sma_50`, faster than `sma_200` — useful for intermediate-term trend. |
ema_9 | number | 9-day exponential moving average of close. Most-recent-weighted; reacts faster than the same-period SMA. Commonly paired with `ema_21` for short-trend bias. |
ema_12 | number | 12-day EMA. Fast-side input of canonical MACD (`macd = ema_12 − ema_26`). |
ema_21 | number | 21-day EMA. Often paired with `ema_9` for short-trend bias; also serves as a dynamic-support reference. |
ema_26 | number | 26-day EMA. Slow-side input of canonical MACD (`macd = ema_12 − ema_26`). |
sma_10_crossed_above_50_today | boolean | Bullish short-trend trigger: `sma_10` crossed above `sma_50` on today’s close. One-day event flag (not sticky); resets next session. Faster cousin of `golden_cross` (which is the 50/200 pair). |
sma_10_crossed_below_50_today | boolean | Bearish short-trend trigger: `sma_10` crossed below `sma_50` on today’s close. One-day event flag (not sticky); resets next session. Faster cousin of `death_cross`. |
sma_10 | number | 10-day simple moving average. |
sma_20 | number | 20-day simple moving average. |
sma_50 | number | 50-day simple moving average. |
sma_200 | number | 200-day simple moving average. |
rsi_14 | number | Relative Strength Index, 14-period. Range 0–100. |
macd_line | number | MACD line (12-EMA minus 26-EMA). |
macd_signal | number | MACD signal line (9-EMA of MACD line). |
macd_histogram | number | MACD line minus signal. Positive when bullish, negative when bearish. |
bollinger_upper | number | Upper Bollinger band (20-period, 2σ). |
bollinger_lower | number | Lower Bollinger band (20-period, 2σ). |
trend_short | enum | Short-term trend classification from short-MA slope. One of `uptrend`, `downtrend`, `sideways`. |
trend_medium | enum | Medium-term trend classification from `sma_50` slope. One of `uptrend`, `downtrend`, `sideways`. |
trend_long | enum | Long-term trend classification from `sma_200` slope. One of `uptrend`, `downtrend`, `sideways`. |
Fundamentals
| Name | Type | Description |
|---|---|---|
market_cap | number | Market capitalization. Updated daily; intraday change derived from `price` × `shares_outstanding`. |
pe_ratio | number | Price-to-earnings ratio (trailing twelve months). Null for unprofitable issuers. |
eps | number | Earnings per share (trailing twelve months). |
dividend_yield | number | Forward dividend yield as a fraction (0.025 = 2.5%). Null for non-payers. |
beta | number | Trailing beta vs SPY. Null for issuers with insufficient price history. |
float_shares | integer | Public float (shares available to trade). |
shares_outstanding | integer | Total shares outstanding. |
next_eps_estimate | number | Wall Street consensus EPS estimate for the next reported quarter — weighted average across analyst contributors. |
next_eps_estimate_high | number | Highest single-analyst EPS estimate for the next reported quarter. |
next_eps_estimate_low | number | Lowest single-analyst EPS estimate for the next reported quarter. |
next_revenue_estimate | integer | Wall Street consensus revenue estimate (USD, full dollars) for the next reported quarter. |
eps_estimate_revision_up_30d | integer | Count of analysts who raised their next-quarter EPS estimate in the last 30 days. A positive read on forward sentiment momentum. |
eps_estimate_revision_down_30d | integer | Count of analysts who lowered their next-quarter EPS estimate in the last 30 days. |
earnings_growth_yoy | number | Year-over-year EPS growth percent from the most recently reported quarter vs. the same quarter prior year. Signed; positive = growth. |
revenues | number | Total revenue for the most-recently reported quarter (Polygon `/stocks/financials/v1/income-statements`). |
revenue_ttm | number | Trailing-twelve-month revenue (AlphaVantage-sourced). |
revenue_per_share_ttm | number | Trailing-12m revenue divided by diluted shares outstanding. USD per share. |
revenue_growth_yoy | number | Year-over-year revenue growth: most-recent quarter vs same quarter prior year. Signed; positive = growth. |
revenue_growth_yoy_quarterly | number | YoY quarterly revenue growth from AlphaVantage. Signed. |
cost_of_revenue | number | Cost of goods sold for the quarter. |
gross_profit | number | `revenues − cost_of_revenue` for the quarter. |
gross_profit_ttm | number | Trailing-12m gross profit (AlphaVantage). |
operating_expenses | number | Sum of operating costs reported on the income statement for the quarter (excludes COGS). |
operating_income_loss | number | Operating income or loss for the quarter. Signed. |
costs_and_expenses | number | Total costs and expenses reported on the income statement (COGS + opex). |
selling_general_and_administrative_expenses | number | SG&A for the quarter. |
research_and_development | number | R&D spend for the quarter. NULL for companies that don't report R&D as a line item. |
wages | number | Wages and salaries line item, where reported. Rare — most companies fold this into SG&A. |
benefits_costs_expenses | number | Benefits and post-employment costs line item, where reported. Mostly insurance / utility issuers. |
nonoperating_income_loss | number | Non-operating income/loss (interest income, gains/losses on investments, etc.) for the quarter. Signed. |
income_tax_expense_benefit | number | Income tax expense (positive) or benefit (negative) for the quarter. |
income_tax_expense_benefit_deferred | number | Deferred portion of income tax. Rare line item. |
income_loss_from_continuing_operations_before_tax | number | Pre-tax income from continuing operations for the quarter. |
income_loss_from_continuing_operations_after_tax | number | After-tax income from continuing operations for the quarter. |
net_income_loss | number | Bottom-line net income/loss for the quarter. Signed. |
net_income_loss_attributable_to_parent | number | Net income attributable to the parent entity (excludes noncontrolling interest). |
net_income_loss_attributable_to_noncontrolling_interest | number | Portion of net income attributable to minority owners of consolidated subsidiaries. Usually 0 for non-conglomerates. |
net_income_loss_available_to_common_stockholders_basic | number | Net income available to common shareholders — numerator for basic EPS. |
preferred_stock_dividends_and_other_adjustments | number | Preferred-share dividends and other adjustments subtracted from net income to arrive at the common-stockholder figure. |
participating_securities_distributed_and_undistributed_earnings | number | Earnings allocated to participating securities (convertible-debt issuers, certain RSU structures). |
basic_average_shares | integer | Weighted-average basic shares outstanding for the quarter. Denominator for basic EPS. |
basic_earnings_per_share | number | Basic EPS for the most-recently reported quarter. Signed. |
diluted_average_shares | integer | Weighted-average diluted shares outstanding for the quarter. Denominator for diluted EPS. |
diluted_eps_ttm | number | Trailing-12m diluted EPS (AlphaVantage). |
weighted_shares_outstanding | integer | Weighted shares outstanding from the latest 10-Q / 10-K. Used by `market_cap = price × weighted_shares_outstanding`. |
ebitda | number | Earnings before interest, taxes, depreciation, and amortization (AlphaVantage, TTM). |
enterprise_value | number | Market cap + total debt − cash. |
assets | number | Total assets on the balance sheet as of the most recently reported quarter. |
current_assets | number | Assets expected to be converted to cash or used up within 12 months. |
noncurrent_assets | number | Long-lived assets — property, plant, equipment, intangibles, long-term investments. |
fixed_assets | number | Property, plant, and equipment (PP&E), net of accumulated depreciation. |
inventory | number | Inventory on hand. NULL for service and financial companies that don't carry inventory. |
other_current_assets | number | Current assets not separately broken out (prepaid expenses, short-term receivables, etc.). |
other_noncurrent_assets | number | Non-current assets not separately broken out (intangibles, deferred tax assets, etc.). |
cash_on_hand | number | Cash plus cash equivalents — the most-liquid balance-sheet line. |
liabilities | number | Total liabilities on the balance sheet. |
current_liabilities | number | Liabilities due within 12 months — accounts payable, short-term debt, accrued expenses. |
noncurrent_liabilities | number | Liabilities due beyond 12 months — long-term debt, deferred taxes, pension obligations. |
other_current_liabilities | number | Current liabilities not separately broken out. |
accounts_payable | number | Trade payables to suppliers as of the quarter end. |
long_term_debt | number | Long-term debt obligations. Often NULL because issuers fold this into `noncurrent_liabilities` instead of breaking it out. |
equity | number | Total shareholders' equity. |
equity_attributable_to_parent | number | Equity attributable to the parent entity's shareholders (excludes minority interest). |
equity_attributable_to_noncontrolling_interest | number | Equity attributable to minority shareholders of consolidated subsidiaries. Usually 0 for non-conglomerates. |
book_value | number | Trailing-12m book value per share (AlphaVantage). Computed from `equity_attributable_to_parent / diluted_average_shares`. |
debt_to_equity | number | Total debt divided by total shareholders' equity. Common leverage ratio; lower = less leveraged. |
current_ratio | number | Current assets ÷ current liabilities. Short-term liquidity. >1 = able to cover short-term obligations from current assets. |
quick_ratio | number | (Current assets − inventory) ÷ current liabilities. Stricter liquidity — assumes inventory isn't quickly convertible. |
free_cash_flow | number | Operating cash flow minus capital expenditures. Cash the business generates above what it needs to maintain operations. |
forward_pe | number | Forward price-to-earnings ratio using next-12m consensus EPS. Lower = cheaper on forward basis. |
peg_ratio | number | PE ratio divided by EPS growth rate (AlphaVantage). Few populated — AlphaVantage only computes PEG for tickers with positive earnings growth and analyst coverage. |
price_to_book | number | Current price ÷ `book_value`. Common value-investing metric. |
price_to_sales | number | Current price ÷ `revenue_per_share_ttm`. Often used when companies have no earnings. |
price_to_cash_flow | number | Current price ÷ operating cash flow per share. Less manipulable than P/E. |
price_to_free_cash_flow | number | Current price ÷ `free_cash_flow` per share. Strictest cash-based valuation. |
ev_to_ebitda | number | `enterprise_value` ÷ `ebitda`. Capital-structure-neutral profitability multiple. |
ev_to_sales | number | `enterprise_value` ÷ `revenue_ttm`. Capital-structure-neutral revenue multiple. |
return_on_equity | number | Net income ÷ shareholders' equity. Quarterly figure. |
return_on_equity_ttm | number | Trailing-12m return on equity (AlphaVantage). |
return_on_assets | number | Net income ÷ total assets. Quarterly figure. |
return_on_assets_ttm | number | Trailing-12m return on assets (AlphaVantage). |
profit_margin | number | Net income ÷ revenue. Quarterly. |
profit_margin_ttm | number | Trailing-12m profit margin (AlphaVantage). |
free_float_percent | number | Percent of shares outstanding actually available for trading (excludes insider / restricted holdings). |
percent_insiders | number | Percent of shares held by company insiders (executives, directors, founders). |
percent_institutions | number | Percent of shares held by institutional investors (mutual funds, ETFs, pensions). |
net_cash_flow_from_operating_activities | number | Net cash from operations for the quarter. |
net_cash_flow_from_investing_activities | number | Net cash from investing activities (capex, acquisitions). Negative for net spend. |
net_cash_flow_from_financing_activities | number | Net cash from financing (debt, dividends, buybacks). |
net_cash_flow | number | Sum of operating + investing + financing cash flow — period change in cash. |
net_cash_flow_from_operating_activities_continuing | number | Same as `net_cash_flow_from_operating_activities` but excludes discontinued operations. |
net_cash_flow_from_investing_activities_continuing | number | Investing cash flow excluding discontinued operations. |
net_cash_flow_from_financing_activities_continuing | number | Financing cash flow excluding discontinued operations. |
net_cash_flow_continuing | number | Total cash flow excluding discontinued operations. Rare line item — populated only for companies in active discontinued-ops winddown. |
gross_margin | number | `gross_profit / revenues` for the quarter. |
operating_margin | number | `operating_income_loss / revenues` for the quarter. |
operating_margin_ttm | number | Trailing-12m operating margin (AlphaVantage). |
liabilities_and_equity | number | Total liabilities + total equity. Should equal `assets` (balance-sheet identity). Documented for completeness — useful as a sanity check rather than a scan target. |
Classification
| Name | Type | Description |
|---|---|---|
sector | enum | GICS sector. One of: Technology, Healthcare, Financials, Consumer Discretionary, Consumer Staples, Energy, Industrials, Materials, Utilities, Real Estate, Communication Services. |
industry | string | GICS industry within the sector. |
etf_holders | array | ETFs that hold this ticker, ordered by the ticker's weight within each (the reverse of ETF holdings). Filter with array operators in /v2/scan, e.g. `'SPY' = ANY(etf_holders)` to find SPY constituents. Refreshed nightly post-close. |
exchange | enum | Listing exchange. One of `NYSE`, `NASDAQ`, `AMEX`, `OTC`, `CRYPTO`. |
country | string | ISO country code of the issuer. |
cap_class | enum | Market-capitalization tier. One of `nano` (<$50M), `micro` ($50M–$300M), `small` ($300M–$2B), `mid` ($2B–$10B), `large` ($10B–$200B), `mega` (≥$200B), or `unknown` when `market_cap` is null. Updates daily post-close as `market_cap` moves. Preferred over the legacy `nano_cap/micro_cap/small_cap/mid_cap/large_cap/mega_cap` boolean columns (which remain in sync as backward-compat shortcuts). |
total_employees | integer | Number of full-time employees as last reported. Useful for size-based filters ("small-cap by employee count"). |
market | enum | Asset market: `stocks`, `fx`, `crypto`, `commodities`. Distinct from `asset_type` (which says equity / etf). |
currency_name | string | Currency the prices are quoted in (`usd`, `eur`, `gbp`, etc.). Effectively always `usd` for US-listed equities. |
Event dates
| Name | Type | Description |
|---|---|---|
earnings_date | date | Next scheduled earnings announcement date. Null if not scheduled. |
days_to_earnings | integer | Calendar days until next earnings announcement. Negative after report. |
earnings_fiscal_quarter | string | Fiscal quarter the next earnings report covers (e.g. "2026Q1"). Distinct from calendar quarter — covers companies whose fiscal year doesn't match the calendar. |
earnings_report_time | enum | When in the trading day the next earnings will be reported. One of `BMO` (before market open), `AMC` (after market close), `DMH` (during market hours). |
earnings_beat_streak | integer | Consecutive quarters the company has beaten consensus EPS estimates. Resets to 0 on a miss. |
last_reported_eps | number | Actual EPS reported in the most recent earnings announcement. |
last_eps_estimate | number | Consensus EPS estimate going into the most recent earnings announcement. |
last_earnings_surprise | number | `last_reported_eps − last_eps_estimate`. Signed; positive = beat. |
last_earnings_surprise_pct | number | Beat as percent of consensus. |
dividend | number | Most-recent dividend amount per share. |
dividend_date | date | Date of the most-recent dividend payment. |
dividend_frequency | enum | Payment frequency: `quarterly`, `monthly`, `semiannual`, `annual`. |
ex_dividend_date | date | Next ex-dividend date. |
News
| Name | Type | Description |
|---|---|---|
news_volume | number | Count of news articles published in the last 24 hours mentioning this ticker with AlphaVantage relevance score ≥ 0.6. Refreshed every 15 minutes. Null when no qualifying articles in the window. |
news_volume_weighted_sentiment | number | Range -1.0 to +1.0. The relevance-weighted average sentiment of articles in the last 24 hours, attenuated by `tanh(news_volume / 15)` so quiet tickers (1-2 articles) read near zero regardless of sentiment sign. Strong negative = loud bad news; strong positive = loud good news; values near 0 = quiet or mixed. Null when no qualifying articles. |
Analyst ratings
| Name | Type | Description |
|---|---|---|
analyst_consensus_rating | enum | Consensus analyst rating across contributing firms. One of `strong buy`, `buy`, `hold`, `sell`, `strong sell`. NULL for tickers without analyst coverage. |
analyst_consensus_rating_value | number | Consensus rating as a numeric score on the standard 1–5 scale (1 = strong buy, 5 = strong sell). Lower is more bullish. |
analyst_consensus_target_price | number | Mean of contributing analysts' 12-month price targets. |
analyst_target_price_high | number | Highest single-analyst 12-month price target across contributing firms. |
analyst_target_price_low | number | Lowest single-analyst 12-month price target across contributing firms. |
analyst_target_upside_pct | number | Implied upside from the current price to the consensus target, in percent. `(analyst_consensus_target_price - price) / price * 100`. Negative when price is above target. Recomputed every minute during market hours. |
analyst_count_strong_buy | integer | Number of contributing firms rating the ticker as strong buy. |
analyst_count_buy | integer | Number of contributing firms rating the ticker as buy. |
analyst_count_hold | integer | Number of contributing firms rating the ticker as hold (neutral). |
analyst_count_sell | integer | Number of contributing firms rating the ticker as sell. |
analyst_count_strong_sell | integer | Number of contributing firms rating the ticker as strong sell. |
analyst_count_total | integer | Total number of contributing firms covering the ticker with any rating. Sum of the five `analyst_count_*` buckets. `well_covered` fires when this is at least 10. |
analyst_count_with_target | integer | Number of contributing firms whose rating includes a published 12-month price target. Always ≤ `analyst_count_total`. |
last_rating_date | date | Date of the most recent rating action across all firms covering the ticker. |
last_rating_firm | string | Name of the firm that issued the most recent rating action. |
last_rating_action | enum | Action taken in the most recent rating change. Common values: `upgrades`, `downgrades`, `initiates_coverage_on`, `maintains`, `reiterates`, `assumes`, `reinstates`, `suspends`. |
Flags · Moving averages
| Name | Kind | Description | Condition |
|---|---|---|---|
above_sma_10 | state | Price is above the 10-day simple moving average. | close > sma_10 |
above_sma_20 | state | Price is above the 20-day simple moving average. | close > sma_20 |
above_sma_50 | state | Price is above the 50-day simple moving average. | close > sma_50 |
above_sma_200 | state | Price is above the 200-day simple moving average. | close > sma_200 |
above_vwap | state | Price is above today’s volume-weighted average price. | close > vwap |
golden_cross | event | 50-day SMA crossed above 200-day SMA today. | Yesterday: sma_50 ≤ sma_200. Today: sma_50 > sma_200. |
golden_regime | state | Long-term uptrend regime — 50-day SMA above 200-day SMA. | sma_50 > sma_200 |
death_cross | event | 50-day SMA crossed below 200-day SMA today. | Yesterday: sma_50 ≥ sma_200. Today: sma_50 < sma_200. |
death_regime | state | Long-term downtrend regime — 50-day SMA below 200-day SMA. | sma_50 < sma_200 |
macd_above_signal | state | MACD line is above its signal line. | macd > macd_signal |
macd_below_signal | state | MACD line is below its signal line. | macd < macd_signal |
above_vwap_minute | state | Current price above session VWAP. | close > vwap_session |
Flags · Trend
| Name | Kind | Description | Condition |
|---|---|---|---|
in_uptrend | state | Stacked uptrend across short, medium, and long horizons. | close > sma_10 AND sma_10 > sma_20 AND close > sma_50 AND close > sma_200 |
in_downtrend | state | Stacked downtrend across short, medium, and long horizons. | close < sma_10 AND sma_10 < sma_20 AND close < sma_50 AND close < sma_200 |
trend_reversal_bullish_today | event | Trend flipped from down to up today. | Yesterday: in_downtrend. Today: in_uptrend. |
trend_reversal_bearish_today | event | Trend flipped from up to down today. | Yesterday: in_uptrend. Today: in_downtrend. |
Flags · 52-week & 20-day extremes
| Name | Kind | Description | Condition |
|---|---|---|---|
at_52w_high | state | Price is within 0.5% of the 52-week high. | close >= high_52w * 0.995 |
at_52w_low | state | Price is within 0.5% of the 52-week low. | close <= low_52w * 1.005 |
at_20d_high | state | Price is at or above the 20-day high. | close >= high_20d |
at_20d_low | state | Price is at or below the 20-day low. | close <= low_20d |
approaching_52w_high | state | Price is within 5% of the 52-week high. | close >= high_52w * 0.95 AND close < high_52w * 0.995 |
approaching_52w_low | state | Price is within 5% of the 52-week low. | close <= low_52w * 1.05 AND close > low_52w * 1.005 |
tested_session_high_recent | state | Price touched today’s session high within the last 5 minutes. | max(high, last 5 min) >= session_high * 0.999 |
tested_session_low_recent | state | Price touched today’s session low within the last 5 minutes. | min(low, last 5 min) <= session_low * 1.001 |
Flags · Session position
| Name | Kind | Description | Condition |
|---|---|---|---|
above_session_open | state | Close above today’s session-open price. | close > open_0930 |
above_premarket_high | state | Close above the pre-market session high. | close > max(price[04:00..09:30]) |
below_premarket_low | state | Close below the pre-market session low. | close < min(price[04:00..09:30]) |
at_session_high | state | At today’s intraday session high (within tolerance). | price >= session_high * 0.999 |
at_session_low | state | At today’s intraday session low (within tolerance). | price <= session_low * 1.001 |
above_yesterday_close | state | Close above the prior session’s close. | close > close_prev |
above_yesterday_high | state | Close above the prior session’s intraday high. | close > high_prev |
below_yesterday_low | state | Close below the prior session’s intraday low. | close < low_prev |
Flags · Gaps
| Name | Kind | Description | Condition |
|---|---|---|---|
gap_up | event | Today opened 3%+ above prior close. | (open - close_prev) / close_prev >= 0.03 |
gap_down | event | Today opened 3%+ below prior close. | (close_prev - open) / close_prev >= 0.03 |
gap_up_extreme | event | Today opened 10%+ above prior close. | (open - close_prev) / close_prev >= 0.10 |
gap_down_extreme | event | Today opened 10%+ below prior close. | (close_prev - open) / close_prev >= 0.10 |
gap_filled_today | event | Today’s opening gap was closed by an intraday move. | Opened with gap >= 0.5% AND intraday range straddled close_prev. |
Flags · Bollinger bands
| Name | Kind | Description | Condition |
|---|---|---|---|
at_bollinger_upper | state | Price has reached the upper Bollinger band. | close >= bb_upper |
at_bollinger_lower | state | Price has reached the lower Bollinger band. | close <= bb_lower |
bollinger_squeeze | state | Bollinger band width compressed to a multi-week low — volatility is contracted. | bollinger_width <= 0.10 |
expanded_hourly_range | state | This hour’s range is unusually wide. | (high - low) > 1.5 * atr_hourly_20 |
narrow_hourly_range | state | This hour’s range is unusually narrow. | (high - low) < 0.5 * atr_hourly_20 |
Flags · Volume
| Name | Kind | Description | Condition |
|---|---|---|---|
high_volume_alert | event | Today’s volume is at least 2× the 30-day average. | volume >= 2 * avg_volume_30d |
low_volume_regime | state | This name is in a sustained quiet stretch. | avg(volume, 10) <= 0.75 * avg_volume_30d |
volume_burst_3x | event | Current minute volume ≥ 3× recent average. | volume >= 3 * avg(volume, 30 min prior) |
volume_burst_5x | event | Current minute volume ≥ 5× recent average. | volume >= 5 * avg(volume, 30 min prior) |
quiet_minute | state | A sustained quiet stretch — 10-minute volume average well below recent baseline. | avg(volume, 10m) < 0.5 * avg(volume, prior 30m) |
Flags · Momentum
| Name | Kind | Description | Condition |
|---|---|---|---|
rsi_overbought | state | RSI(14) is in overbought territory. | rsi_14 >= 70 |
rsi_oversold | state | RSI(14) is in oversold territory. | rsi_14 <= 30 |
momentum_strong_up | event | Strong upward momentum across multiple measures. | rsi_14 > 60 AND macd_hist > macd_hist_prev AND close > sma_20 |
momentum_strong_down | event | Strong downward momentum across multiple measures. | rsi_14 < 40 AND macd_hist < macd_hist_prev AND close < sma_20 |
momentum_exhaustion_up | event | Upward momentum showing signs of exhaustion. | rsi_14 >= 70 AND macd_hist < macd_hist_peak |
momentum_exhaustion_down | event | Downward momentum showing signs of exhaustion. | rsi_14 <= 30 AND macd_hist > macd_hist_trough |
three_up_hours | state | Three consecutive higher hourly closes. | close > close_1h_ago > close_2h_ago > close_3h_ago |
three_down_hours | state | Three consecutive lower hourly closes. | close < close_1h_ago < close_2h_ago < close_3h_ago |
morning_strength | state | First two hours of session net positive. | close_1130 > open_0930 |
afternoon_drift_up | state | Afternoon session net up. | close_1600 > close_1200 |
last_hour_rally | event | Final hour of session net up. | close_1600 > close_1500 |
last_hour_selloff | event | Final hour of session net down. | close_1600 < close_1500 |
held_above_vwap_30m | state | Price has stayed above session VWAP without dipping for at least 30 minutes. | close > vwap_session for every minute in the last 30 |
held_below_vwap_30m | state | Price has stayed below session VWAP without lifting for at least 30 minutes. | close < vwap_session for every minute in the last 30 |
microspike_up | event | Single 1-minute candle return ≥ +1%. | (close - open) / open >= 0.01 |
microspike_down | event | Single 1-minute candle return ≤ −1%. | (close - open) / open <= -0.01 |
rapid_move_up_5m | state | Price up more than +0.5% in the last 5 minutes. | (close - close_5m_ago) / close_5m_ago >= 0.005 |
rapid_move_down_5m | state | Price down more than −0.5% in the last 5 minutes. | (close - close_5m_ago) / close_5m_ago <= -0.005 |
opening_drive_up | event | First 5 minutes of session up > +0.5%. | close_0935 > open_0930 * 1.005 |
opening_drive_down | event | First 5 minutes of session down < −0.5%. | close_0935 < open_0930 * 0.995 |
pre_close_drift_up | event | Last 10 minutes before close net up. | close_1600 > close_1550 |
pre_close_drift_down | event | Last 10 minutes before close net down. | close_1600 < close_1550 |
Flags · Support & resistance
| Name | Kind | Description | Condition |
|---|---|---|---|
at_support | state | Price is testing a detected support level. | Price within 1.5 × ATR(20) of an active detected support level — a cluster of two or more historical swing lows within an ATR-scaled band, still unbroken. |
at_resistance | state | Price is testing a detected resistance level. | Price within 1.5 × ATR(20) of an active detected resistance level — a cluster of two or more historical swing highs within an ATR-scaled band, still unbroken. |
Flags · Patterns
| Name | Kind | Description | Condition |
|---|---|---|---|
range_expansion | event | Today's true range > 2 × ATR(14) with volume — direction-agnostic regime-change tag. | true_range > 2 * atr_14 AND volume > 1.5 * avg_volume_10d |
bounce_off_support | event | Reversal off a detected support level. | Within the last 3 bars a bar low touched an active support level band (level ± 1.5 × ATR(20)), AND today’s close is above yesterday’s close. |
pullback | state | Pullback to the 20-day moving average within an uptrend. | in_uptrend (price > SMA20 > SMA50 > SMA200) AND price within ±2% of the 20-day SMA. Live evaluation at minute resolution. |
in_opening_range | state | Price is inside the first-hour high/low range. | or_low <= price <= or_high (OR = first 15 min after 09:30 ET) |
above_opening_range | state | Price is trading above the first 15-minute opening-range high. | close > or_high (OR = first 15 min after 09:30 ET) |
below_opening_range | state | Price is trading below the first 15-minute opening-range low. | close < or_low (OR = first 15 min after 09:30 ET) |
hourly_reversal_bullish | event | Lower low, higher close than the prior hour. | low < low_1h_ago AND close > close_1h_ago |
hourly_reversal_bearish | event | Higher high, lower close than the prior hour. | high > high_1h_ago AND close < close_1h_ago |
consolidating_15m | state | Last 15 minutes traded in a tight range. | high_15m - low_15m < 0.5 * atr_min_30 |
range_break_15m_up | event | Broke above the prior 15-minute high. | close > max(high, prior 15 min) |
range_break_15m_down | event | Broke below the prior 15-minute low. | close < min(low, prior 15 min) |
repeated_test_of_high | state | Tested today’s session high three or more times — failed-breakout setup. | High touched (within 0.1%) at least 3 times without sustained breakout. |
repeated_test_of_low | state | Tested today’s session low three or more times — failed-breakdown setup. | Low touched (within 0.1%) at least 3 times without sustained breakdown. |
Flags · Edge-triggered alerts
| Name | Kind | Description | Condition |
|---|---|---|---|
price_up_3pct | event | Intraday move of 3%+ vs prior close. | day_change_pct >= 3 |
price_down_3pct | event | Intraday move of -3% or worse vs prior close. | day_change_pct <= -3 |
pre_earnings_drift | state | Stock has moved ≥5% (absolute) over the trailing week with earnings within 7 days — a setup the literature shows often continues through the report. | days_to_earnings BETWEEN 1 AND 7 AND ABS(change_1w) >= 0.05 |
vwap_cross_up | event | Crossed above session VWAP this minute. | close_prev_min <= vwap_session AND close > vwap_session |
vwap_cross_down | event | Crossed below session VWAP this minute. | close_prev_min >= vwap_session AND close < vwap_session |
Flags · Fundamentals
| Name | Kind | Description | Condition |
|---|---|---|---|
small_cap | classification | Market cap between $300M and $2B. | market_cap >= 300M AND market_cap < 2B. |
mid_cap | classification | Market cap between $2B and $10B. | market_cap >= 2B AND market_cap < 10B. |
large_cap | classification | Market cap between $10B and $200B. | market_cap >= 10B AND market_cap < 200B. |
mega_cap | classification | Market cap above $200B. | market_cap >= 200B. |
value_stock | classification | Trades at a value-style P/E. | pe_ratio > 0 AND pe_ratio <= 15. |
high_dividend_yield | classification | Dividend yield above 4%. | dividend_yield >= 0.04. |
high_beta | classification | Beta above 1.5: moves more than the market. | beta >= 1.5. |
low_float | classification | Public float under 50 million shares. | float_shares < 50,000,000. |
profitable | classification | Most-recently-reported quarter had positive net income. | net_income_loss > 0 |
profitable_estimate | classification | Analyst consensus expects positive EPS for the upcoming report. | next_eps_estimate > 0 |
loss_estimate | classification | Analyst consensus expects negative EPS for the upcoming report. | next_eps_estimate < 0 |
Flags · Corporate events
| Name | Kind | Description | Condition |
|---|---|---|---|
earnings_this_week | state | Earnings announcement scheduled in the next 7 days. | 0 <= days_to_earnings <= 7. Sourced from AlphaVantage forward earnings calendar plus historical earnings table. |
earnings_today | event | Earnings reported today. | EXISTS(ticker_earnings_history row with reported_date = today). Both pre-market and post-market reports count. |
recently_reported_earnings | state | Reported earnings within the last 5 days. | EXISTS(ticker_earnings_history row with reported_date in [today - 5d, today - 1d]). Captures the post-earnings reaction window. |
earnings_approaching | state | Earnings within 3 days. | days_to_earnings >= 0 AND days_to_earnings <= 3 |
earnings_tomorrow | state | Earnings reported in 1 calendar day. Pair with `earnings_report_time` to know BMO vs. AMC. | days_to_earnings = 1 |
earnings_next_week | state | Earnings 8–14 days out — useful for the lead-up swing window. | days_to_earnings >= 8 AND days_to_earnings <= 14 |
earnings_published | state | Earnings report date has passed (next earnings date is in the past). | days_to_earnings <= 0 |
Flags · Analyst ratings
| Name | Kind | Description | Condition |
|---|---|---|---|
bullish_consensus | state | Consensus analyst rating is `strong buy` or `buy`. | analyst_consensus_rating IN ('strong buy', 'buy') |
bearish_consensus | state | Consensus analyst rating is `sell` or `strong sell`. | analyst_consensus_rating IN ('sell', 'strong sell') |
recent_upgrade | state | At least one analyst upgraded the ticker in the last 7 days. | EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'upgrades' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_downgrade | state | At least one analyst downgraded the ticker in the last 7 days. | EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'downgrades' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_initiation | state | At least one analyst initiated coverage in the last 7 days. | EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND action = 'initiates_coverage_on' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_target_raise | state | At least one analyst raised their price target in the last 7 days. | EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND price_target_action = 'raises' AND timestamp >= NOW() - INTERVAL '7 days') |
recent_target_lower | state | At least one analyst lowered their price target in the last 7 days. | EXISTS (SELECT 1 FROM analyst_events WHERE ticker = t.ticker AND price_target_action = 'lowers' AND timestamp >= NOW() - INTERVAL '7 days') |
above_price_target | state | Current price is above the consensus analyst target. | price > analyst_consensus_target_price |
below_price_target | state | Current price is below the consensus analyst target. | price < analyst_consensus_target_price |
well_covered | classification | Ten or more analyst firms cover the ticker. | analyst_count_total >= 10 |
target_upside_above_10pct | state | Consensus price target implies more than 10% upside from the current price. | analyst_target_upside_pct > 10 |
target_upside_above_25pct | state | Consensus price target implies more than 25% upside from the current price. | analyst_target_upside_pct > 25 |
target_downside_above_10pct | state | Current price is more than 10% above the consensus target — significant implied downside. | analyst_target_upside_pct < -10 |
estimate_revised_up | state | At least one analyst raised their next-quarter EPS estimate in the last 30 days. | eps_estimate_revision_up_30d > 0 |
estimate_revised_down | state | At least one analyst lowered their next-quarter EPS estimate in the last 30 days. | eps_estimate_revision_down_30d > 0 |
high_earnings_estimate | classification | Consensus next-quarter EPS estimate exceeds an absolute $1.00 per share threshold. | next_eps_estimate > 1.00 |