US Market Data Toolkit
Geeksfino/finskills
Free Python scripts that fetch US stock data, SEC filings, insider trades and macro indicators, and run financial score calculators and portfolio analytics.
Builds value or growth stock screens from PE, PB, ROE and financial statement fields for backtests, using tushare data for A-shares and yfinance for Hong Kong and US stocks.
$ npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install HKUDS/Vibe-Trading fundamental-filter --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent/src/skills/fundamental-filter .claude/skills/fundamental-filter && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "fundamental-filter" agent skill from https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filter into .claude/skills/fundamental-filter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fundamental-filter", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filterType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install HKUDS/Vibe-Trading fundamental-filter --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .agents/skills && cp -r skills-src/agent/src/skills/fundamental-filter .agents/skills/fundamental-filter && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "fundamental-filter" agent skill from https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filter into .agents/skills/fundamental-filter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fundamental-filter", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install HKUDS/Vibe-Trading fundamental-filter --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/agent/src/skills/fundamental-filter .cursor/skills/fundamental-filter && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "fundamental-filter" agent skill from https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filter into .cursor/skills/fundamental-filter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fundamental-filter", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/HKUDS/Vibe-Trading.git --path agent/src/skills/fundamental-filter--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install HKUDS/Vibe-Trading fundamental-filter --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/agent/src/skills/fundamental-filter .gemini/skills/fundamental-filter && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "fundamental-filter" agent skill from https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filter into .gemini/skills/fundamental-filter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fundamental-filter", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install HKUDS/Vibe-Trading fundamental-filterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .github/skills && cp -r skills-src/agent/src/skills/fundamental-filter .github/skills/fundamental-filter && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "fundamental-filter" agent skill from https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filter into .github/skills/fundamental-filter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fundamental-filter", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install HKUDS/Vibe-Trading fundamental-filter --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/agent/src/skills/fundamental-filter .opencode/skills/fundamental-filter && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "fundamental-filter" agent skill from https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/fundamental-filter into .opencode/skills/fundamental-filter/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fundamental-filter", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
fundamental-filterBuilds value or growth stock screens from PE, PB, ROE and financial statement fields for backtests, using tushare data for A-shares and yfinance for Hong Kong and US stocks.
The skill produces long or flat signals from fundamental data. The value filter requires a positive PE below a maximum, PB below a limit and ROE above a minimum, while the optional growth filter checks a reasonable PE_TTM range, a profitability floor and a market cap minimum that drops micro-caps. A table shows which metrics each market supports and how they are fetched.
For A-shares, daily valuation fields such as pe, pb and roe come in through extra_fields in config.json, and statement fields from the income, balance sheet, cash flow and financial indicator tables come in through fundamental_fields. Statement data is merged into daily bars only after its disclosure date, which keeps the test free of look-ahead, with columns prefixed by table name. Hong Kong and US stocks read trailingPE, priceToBook, returnOnEquity and similar fields from yfinance Ticker info. An example_signal_engine.py is included.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b1f6ce7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
pipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Fundamental Factor Screening loads about 1.7k tokens when it runs. Until then it costs about 67 tokens; SKILL.md has 475 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from HKUDS/Vibe-Trading at commit b1f6ce7, republished under its MIT licence (© HKUDS). 475 words, ~1,689 tokens.
.claude/skills/fundamental-filter/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Filter stocks using fundamental financial data (PE/PB/ROE, etc.) to build value or growth screen signals for backtesting. Supports multiple markets with different data sources.
| Market | Data Source | Method | Supported Metrics |
|---|---|---|---|
| A-shares | tushare daily_basic | extra_fields in config.json | pe, pb, pe_ttm, ps_ttm, dv_ttm, total_mv, circ_mv, roe |
| A-shares | Tushare statements | fundamental_fields in config.json | income, balancesheet, cashflow, fina_indicator fields |
| US stocks | yfinance Ticker.info | Direct API call | trailingPE, forwardPE, priceToBook, returnOnEquity, marketCap, dividendYield |
| HK stocks | yfinance Ticker.info | Direct API call | trailingPE, priceToBook, returnOnEquity, marketCap |
{
"source": "tushare",
"codes": ["000001.SZ", "600036.SH", "000858.SZ"],
"start_date": "2023-01-01",
"end_date": "2024-12-31",
"extra_fields": ["pe", "pb", "pe_ttm", "roe", "total_mv"],
"initial_cash": 1000000,
"commission": 0.001
}The extra_fields columns are automatically merged into the daily DataFrame by the DataLoader.
Use fundamental_fields when the strategy needs PIT-safe financial statement data instead of daily valuation fields:
{
"source": "tushare",
"codes": ["000001.SZ", "600036.SH", "000858.SZ"],
"start_date": "2023-01-01",
"end_date": "2024-12-31",
"fundamental_fields": {
"income": ["total_revenue", "n_income"],
"balancesheet": ["total_hldr_eqy_exc_min_int"],
"fina_indicator": ["roe", "debt_to_assets"]
},
"initial_cash": 1000000,
"commission": 0.001
}The backtest runner queries the configured tables through TushareFundamentalProvider and merges each published statement snapshot into daily bars only after its announcement/disclosure date. Statement columns are prefixed by table name:
| Requested field | SignalEngine column |
|---|---|
income.total_revenue | income_total_revenue |
income.n_income | income_n_income |
balancesheet.total_hldr_eqy_exc_min_int | balancesheet_total_hldr_eqy_exc_min_int |
fina_indicator.roe | fina_indicator_roe |
Representative financial-quality pre-filter:
revenue = row.get("income_total_revenue")
profit = row.get("income_n_income")
net_assets = row.get("balancesheet_total_hldr_eqy_exc_min_int")
roe = row.get("fina_indicator_roe")
passes = (
revenue is not None and revenue > 0
and profit is not None and profit > 0
and net_assets is not None and net_assets > 0
and roe is not None and roe >= 8.0
)For HK/US stocks, fundamental data is not available as daily time-series via the backtest loader. Instead, use yfinance Ticker info for point-in-time screening:
import yfinance as yf
def screen_us_stocks(tickers, criteria):
"""Screen US/HK stocks by fundamental criteria."""
passed = []
for symbol in tickers:
info = yf.Ticker(symbol).info
pe = info.get("trailingPE")
pb = info.get("priceToBook")
roe = info.get("returnOnEquity") # Decimal (e.g., 0.25 = 25%)
mcap = info.get("marketCap")
if pe is None or pb is None or roe is None:
continue # Skip stocks with missing data
if (0 < pe < criteria["pe_max"]
and pb < criteria["pb_max"]
and roe > criteria["roe_min"]
and (mcap or 0) > criteria.get("mcap_min", 0)):
passed.append({
"symbol": symbol,
"pe": pe,
"pb": pb,
"roe": round(roe * 100, 1), # Convert to percentage
"mcap": mcap,
})
return passed
# Example: screen S&P 500 components
criteria = {"pe_max": 20, "pb_max": 3.0, "roe_min": 0.08, "mcap_min": 10_000_000_000}
results = screen_us_stocks(["AAPL", "MSFT", "JNJ", "JPM", "XOM"], criteria)# HK stocks use the same yfinance interface
hk_tickers = ["0700.HK", "9988.HK", "1810.HK", "2318.HK", "0005.HK"]
results = screen_us_stocks(hk_tickers, criteria) # Same function works| Parameter | Default | Description |
|---|---|---|
| pe_max | 20.0 | PE ceiling (exclude overvalued) |
| pb_max | 3.0 | PB ceiling |
| roe_min | 8.0 | ROE floor (%), exclude low-profitability |
| pe_min | 0.0 | PE floor (exclude loss-making stocks) |
| mcap_min | 0 | Market cap floor (for US/HK, in USD) |
extra_fields columns may contain NaN (new listings, ST stocks) — must fillna or dropnafundamental_fields columns are prefixed by table and may be NaN before the first statement is published in the backtest windowfundamental_fields is daily-only: an announcement date has no time of day, so an intraday interval is rejected rather than silently making a filing visible from the first bar of its own announcement day. "fundamental_subdaily": "next_day" opts in, with day D's filing visible from the first bar of D+1ann_date / f_ann_date; the runner's merge already enforces point-in-time visibilitype > 0Ticker.info is a point-in-time snapshot, not historical time-series — cannot directly use for daily rebalancing backtests on US/HK stockspip install pandas numpy yfinance1/N = selected for long (N = number of stocks passing the screen), 0 = not selected© HKUDS, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in agent/src/skills/fundamental-filter of HKUDS/Vibe-Trading.
Open the folder on GitHubat commit b1f6ce7
Fundamental Factor Screening next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Fundamental Factor Screening this skillHKUDS/Vibe-Trading | 35k | — | ~1.7k | Automated safety check: Pass | MIT | |
| US Market Data ToolkitGeeksfino/finskills | 282 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Value Stock Screenerokikusan-public/stock_skills | 135 | — | ~2.4k | Automated safety check: Pass | None | |
| Yfinance Datahimself65/finance-skills | 3.4k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Fin Yfinance Datacriptogus/agent-evolve-network | 288 | — | ~806 | Automated safety check: Pass | MIT | |
| Stock Deep Analysis Workflowwbh604/UZI-Skill | 7.1k | — | ~9.1k | Automated safety check: Notes | MIT |
Geeksfino/finskills
Free Python scripts that fetch US stock data, SEC filings, insider trades and macro indicators, and run financial score calculators and portfolio analytics.
okikusan-public/stock_skills
Screens for undervalued stocks across about 60 regions with yfinance's EquityQuery, using ratios such as PER, PBR, dividend yield and ROE, with optional theme filters.
himself65/finance-skills
Fetch financial and market data with the yfinance Python library (Yahoo Finance).
criptogus/agent-evolve-network
Fetch market and fundamental data via the yfinance Python library — quotes, OHLC history, financial statements, holders, dividends, options, and more.
wbh604/UZI-Skill
Runs a staged deep analysis of a single stock on China A-share, Hong Kong and US markets, ending in an HTML report with valuation models and investor-panel scores.
zillionare/zillionare
面向中文自然语言的 Tushare 数据研究技能。用于把“看看这只股票最近怎么样”“帮我查财报趋势”“最近哪个板块最强”“北向资金在买什么”“给我导出一份行情数据”这类请求,转成可执行的数据获取、清洗、对比、筛选、导出与简要分析流程。适用于 A 股、指数、ETF/基金、财务、估值、资金流、公告新闻、板块概念与宏观数据等研究场景。
HKUDS/Vibe-Trading
Index of Eastmoney's free, no-token market data interfaces for China A-shares and Hong Kong stocks: fund flows, dragon-tiger lists, margin trading, reports and news.
HKUDS/Vibe-Trading
Retrieves public OKX cryptocurrency market data such as spot prices, candlesticks, funding rates and open interest through the OKX V5 REST API, with no authentication.
HKUDS/Vibe-Trading
Fetches U.S. SEC EDGAR data: resolves tickers to CIK numbers, lists recent 10-K, 10-Q and 8-K filings with document URLs, and pulls XBRL financial series.
HKUDS/Vibe-Trading
Predicts whether a mainland China A-share company risks an ST or *ST warning after its next annual report, using financial thresholds and Sina penalty records.
HKUDS/Vibe-Trading
Breaks a structural trend such as AI infrastructure into its physical supply chain and ranks lesser-known listed companies sitting on each bottleneck.
HKUDS/Vibe-Trading
Plans and drafts an eight-part, roughly 120k-word investigative series on one company, built around a strict fact-check pass rather than fast drafting.
Categories
Builds value or growth stock screens from PE, PB, ROE and financial statement fields for backtests, using tushare data for A-shares and yfinance for Hong Kong and US stocks. The skill produces long or flat signals from fundamental data. The value filter requires a positive PE below a maximum, PB below a limit and ROE above a minimum, while the optional growth filter checks a reasonable PE_TTM range, a profitability floor and a market cap minimum that drops micro-caps.
Fundamental Factor Screening fits situations like: building a value screen on PE, PB and ROE for a backtest; setting extra_fields or fundamental_fields in config.json for A-shares; screening Hong Kong or US stocks with yfinance fundamentals; adding a financial-quality pre-filter that avoids look-ahead bias.
Run `npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a claude-code`. Or copy the skill folder (agent/src/skills/fundamental-filter in HKUDS/Vibe-Trading) into .claude/skills/fundamental-filter in your project. Claude Code loads it when a task matches its description.
Run `npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a codex`. Or copy the skill folder (agent/src/skills/fundamental-filter in HKUDS/Vibe-Trading) into .agents/skills/fundamental-filter in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add HKUDS/Vibe-Trading --skill fundamental-filter -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fundamental-filter, .gemini/skills/fundamental-filter, .github/skills/fundamental-filter and .opencode/skills/fundamental-filter in your project.
Going by SKILL.md and its folder, Fundamental Factor Screening needs Python for the scripts in its folder and the command-line tools its instructions call (pip). Our summary lists: A tushare data source for A-shares; yfinance for Hong Kong and US stocks.
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Fundamental Factor Screening is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Fundamental Factor Screening: US Market Data Toolkit (Geeksfino/finskills, 282 stars), Value Stock Screener (okikusan-public/stock_skills, 135 stars), Yfinance Data (himself65/finance-skills, 3.4k stars) and Fin Yfinance Data (criptogus/agent-evolve-network, 288 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
HKUDS (a GitHub organization) maintains it in HKUDS/Vibe-Trading, which has 35,097 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on October 9, 2026.
Source: HKUDS/Vibe-Trading on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.