Yfinance logo

Yfinance

OrganizationPopular
HKUDS
yfinance

yfinance global market data interface — retrieve OHLCV and research data for US, HK, and Canadian stocks, ETFs, and indices via Yahoo Finance. Free, no API key required.

Overview

PublisherHKUDS
RepositoryVibe-Trading
Skill nameyfinance
Stars
35.2K
Forks
5.7K
Bundled files
6
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by HKUDS on GitHub. Read the source before you install it.

Installation

Install the Yfinance AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/yfinance
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/HKUDS/Vibe-Trading.git /tmp/Vibe-Trading
mkdir -p .claude/skills
cp -r /tmp/Vibe-Trading/agent/src/skills/yfinance .claude/skills/yfinance
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Yfinance in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Yfinance on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Yfinance is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

yfinance

Overview

yfinance is an open-source Python wrapper for Yahoo Finance, providing global market data (US, HK, and Canadian stocks, ETFs, indices) including historical and real-time quotes. Completely free, no registration or API key required.

The project has a built-in yfinance DataLoader (backtest/loaders/yfinance_loader.py). When backtesting, set source: "yfinance" or source: "auto" to invoke it automatically.

For OHLCV bars in agent/swarm work, prefer the get_market_data tool when it is available. It routes through the project loader layer, normalizes symbols, removes malformed OHLC rows, and returns strict JSON. Use direct yfinance calls mainly for data outside OHLCV coverage such as company info, financial statements, options, holders, and insider transactions.

Deep Yahoo Interfaces (references/)

Beyond the yfinance package, the project ships a built-in Yahoo public-API client (backtest.loaders.yahoo_client) and two read-only agent tools that sit on top of it. These reach Yahoo's own unauthenticated JSON endpoints directly via requests (no yfinance install needed), share one throttled HTTP gate (Yahoo rate-limits by source IP), and handle the cookie+crumb handshake automatically. Each interface has its own reference doc — read the one you need rather than loading them all:

DocCovers
yahoo_client.get_chartDirect v8 OHLCV bars (range or epoch window)
yahoo_client.get_quote_summaryv10 quoteSummary modules (key stats, financials, ownership)
yahoo_client.get_optionsv7 option chain (expirations + calls/puts)
yahoo_client.searchv1 instrument search by ticker/name
get_options_chain toolAgent tool: US options ladder envelope
get_stock_profile toolAgent tool: company profile/estimates/ownership envelope

Path convention: every link above is written relative to this document (references/...), the form GitHub resolves when the file is opened in a browser. read_file resolves the same string against the skill that owns it, so the agent and a human reader reach one file. Reuse the relative form for any new reference docs, and keep reference paths unique across skills: a path two skills both carry is reported as ambiguous rather than guessed.

The Yahoo client uses the project ticker convention (AAPL.US → AAPL, 00700.HK → 0700.HK, TD.TO and PNG.V pass through); see the Ticker Format Conversion table below — the same rules apply across all of the interfaces above.

Quick Start

Preferred OHLCV tool call:

json
{
  "codes": ["AAPL.US", "700.HK", "TD.TO", "PNG.V"],
  "start_date": "2025-01-01",
  "end_date": "2026-01-01",
  "source": "yfinance",
  "interval": "1D"
}

If you must write a Python script for OHLCV, use the DataLoader instead of raw yf.download:

python
from backtest.loaders.registry import get_loader_cls_with_fallback

loader = get_loader_cls_with_fallback("yfinance")()
data = loader.fetch(
    ["AAPL.US", "700.HK", "TD.TO", "PNG.V"],
    "2025-01-01",
    "2026-01-01",
    interval="1D",
)

for symbol, df in data.items():
    print(symbol, df.tail())

Ticker Format Conversion

The project uses a unified ticker format. The DataLoader automatically converts to yfinance format:

Project Formatyfinance FormatMarket
AAPL.USAAPLUS stock
MSFT.USMSFTUS stock
700.HK0700.HKHK stock
9988.HK9988.HKHK stock
TD.TOTD.TOToronto Stock Exchange stock
PNG.VPNG.VTSX Venture stock
SPY.USSPYUS ETF

Rules:

  • US stocks: strip the .US suffix → use the raw ticker
  • HK stocks: keep .HK, pad the number to 4 digits (700 → 0700)
  • Canadian stocks: keep .TO (TSX) or .V (TSXV) unchanged

Supported Data Types

1. Historical OHLCV

Prefer get_market_data for OHLCV whenever the tool is available:

json
{
  "codes": ["AAPL.US", "MSFT.US", "GOOGL.US"],
  "start_date": "2025-01-01",
  "end_date": "2026-01-01",
  "source": "yfinance",
  "interval": "1D",
  "max_rows": 250
}

For script-based OHLCV analysis, use the loader:

python
from backtest.loaders.registry import get_loader_cls_with_fallback

loader = get_loader_cls_with_fallback("yfinance")()

# Single stock
single = loader.fetch(["AAPL.US"], "2025-01-01", "2026-01-01", interval="1D")

# Specific interval
hourly = loader.fetch(["AAPL.US"], "2026-03-01", "2026-03-30", interval="1H")

Supported intervals:

  • Minute-level: 1m, 2m, 5m, 15m, 30m, 60m, 90m
  • Hourly: 1h
  • Daily and above: 1d, 5d, 1wk, 1mo, 3mo

Minute data limits:

  • 1m: up to 7 days of history
  • 2m/5m/15m/30m/60m/90m: up to 60 days
  • 1h: up to 730 days
  • 1d and above: unlimited

2. Company Info

python
ticker = yf.Ticker("AAPL")

info = ticker.info
print(f"Company: {info.get('longName')}")
print(f"Industry: {info.get('industry')}")
print(f"Market cap: {info.get('marketCap')}")
print(f"PE: {info.get('trailingPE')}")
print(f"EPS: {info.get('trailingEps')}")
print(f"Dividend yield: {info.get('dividendYield')}")

3. Financial Statements

python
ticker = yf.Ticker("AAPL")

# Income statement (annual)
income = ticker.financials
# Income statement (quarterly)
income_q = ticker.quarterly_financials

# Balance sheet
balance = ticker.balance_sheet

# Cash flow statement
cashflow = ticker.cashflow

# Earnings data
earnings = ticker.earnings

4. Dividends and Splits

python
ticker = yf.Ticker("AAPL")

# Dividend history
dividends = ticker.dividends

# Stock split history
splits = ticker.splits

# All corporate actions
actions = ticker.actions

5. Institutional Holdings

python
ticker = yf.Ticker("AAPL")

# Institutional holders
holders = ticker.institutional_holders

# Major holders summary
major = ticker.major_holders

# Insider transactions
insider = ticker.insider_transactions

6. Indices and ETFs

python
# Major indices
sp500 = yf.download("^GSPC", start="2025-01-01", end="2026-01-01", progress=False)  # S&P 500
nasdaq = yf.download("^IXIC", start="2025-01-01", end="2026-01-01", progress=False)  # NASDAQ
hsi = yf.download("^HSI", start="2025-01-01", end="2026-01-01", progress=False)      # Hang Seng Index

# ETFs
spy = yf.download("SPY", start="2025-01-01", end="2026-01-01", progress=False)
qqq = yf.download("QQQ", start="2025-01-01", end="2026-01-01", progress=False)

7. FX Rates

python
# Currency pairs
usdcny = yf.download("CNY=X", start="2025-01-01", end="2026-01-01", progress=False)
usdhkd = yf.download("HKD=X", start="2025-01-01", end="2026-01-01", progress=False)
eurusd = yf.download("EURUSD=X", start="2025-01-01", end="2026-01-01", progress=False)

Backtest Usage

config.json Example

json
{
  "source": "yfinance",
  "codes": ["AAPL.US", "MSFT.US"],
  "start_date": "2020-01-01",
  "end_date": "2026-03-30",
  "initial_cash": 1000000,
  "commission": 0.001,
  "extra_fields": null
}

Cross-Market Auto Mode

json
{
  "source": "auto",
  "codes": ["000001.SZ", "AAPL.US", "700.HK", "BTC-USDT"],
  "start_date": "2024-01-01",
  "end_date": "2026-03-30",
  "initial_cash": 1000000,
  "commission": 0.001,
  "extra_fields": null
}

source: "auto" routes automatically by ticker format: A-shares → the China fallback chain, HK stocks → the HK chain, Canadian .TO/.V stocks → Yahoo/yfinance, and crypto → OKX.

Notes

  • Free, no API key: yfinance scrapes Yahoo Finance public data — no registration needed
  • Rate limits: high-frequency requests may trigger temporary Yahoo bans — prefer batch downloads over per-ticker loops
  • Minute data range: limited by Yahoo Finance (see table above)
  • HK tickers: Yahoo Finance uses 4-digit numbers + .HK; pad with leading zeros where needed
  • Adjustment: auto_adjust=True (default) returns forward-adjusted prices; the project loader uses auto_adjust=False
  • Timezone: returned data includes timezone info; the DataLoader strips it automatically
  • extra_fields not supported: yfinance via the backtest loader returns OHLCV only; PE/PB and other fundamentals require separate yf.Ticker().info calls
  • Comparison with Tushare: Tushare covers deep A-share data (financials, fund flows, block trades, etc.); yfinance covers global markets but with less depth

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Yfinance AI skill do?

yfinance global market data interface — retrieve OHLCV and research data for US, HK, and Canadian stocks, ETFs, and indices via Yahoo Finance. Free, no API key required.

Why use Yfinance on TypingMind?

Because you install it once and use it with any model. Yfinance is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Yfinance in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/HKUDS/Vibe-Trading/tree/main/agent/src/skills/yfinance. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Yfinance?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Yfinance?

As many as you like. As long as a model supports skills, you can use Yfinance with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Yfinance AI skill free?

Yes. It is published on GitHub by HKUDS under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇