Alpha Library  /  Point-in-time Fundamentals  /  fund_ps_ttm_ind_neutral

fund_ps_ttm_ind_neutral

P/S TTM industry-neutral - inverse within-industry price-to-sales (daily market data)

Themes & universe

valueequity_cn1d

Formula

-\mathrm{zscore}_{x\mid\mathrm{industry}}(\mathrm{PS_{TTM}})

Definition

id
fund_ps_ttm_ind_neutral
zoo
fundamental
module_path
src.factors.zoo.fundamental.ps_ttm_ind_neutral
decay_horizon
252
min_warmup_bars
1
requires_sector
True
columns_required
val:ps_ttm

Notes

Nonpositive multiples are excluded rather than ranked as cheap. Industry-neutralized inverse trailing price-to-sales: each name is z-scored against its Shenwan level-1 industry peers instead of the whole cross-section (sector tag from tushare index_member_all SW2021 membership, point-in-time via in_date/out_date). This removes the industry confounding that dominates raw A-share PS — software and platform names carry structurally high margins and high PS while distributors and manufacturers are structurally low, so a raw low-PS screen is largely an industry bet. Low PS relative to industry peers scores high, and PS stays informative for loss-making names where earnings yield fails. A name with no industry label on a date stays NaN and is excluded from that date's cross-section; an industry group with fewer than two labelled names cannot form a within-group z-score and stays NaN. Keyed by trade_date, so PIT-safe by construction with no filing lag. Membership is point-in-time but the SW2021 taxonomy itself is retroactive — a name reclassified in 2021 carries its 2021 industry back through history. Lineage: industry-neutral variant of fund_ps_ttm (#1789 follow-up).

Run it

pip install vibe-trading-ai
vibe-trading alpha show fund_ps_ttm_ind_neutral
vibe-trading alpha bench --zoo fundamental --universe csi300 --period 2020-2025