Skip to main content

股票数据获取(Tushare)

数据是量化投资的燃料。Tushare 是国内最常用的免费金融数据接口,提供了股票、基金、期货等多类数据。


Tushare 简介

Tushare 是一个免费的 Python 金融数据接口包,提供:

  • 股票行情数据(日线、分钟线)
  • 公司财务数据
  • 指数数据
  • 宏观经济数据
  • 新闻舆情数据

安装与初始化

# 安装
# pip install tushare

import tushare as ts

# 设置 token(需在 https://tushare.pro 注册获取)
ts.set_token('your_token_here')
pro = ts.pro_api()

获取股票基本信息

# 获取上市公司列表
stock_list = pro.stock_basic(
exchange='', # 交易所:SSE=上交所 SZSE=深交所
list_status='L', # L=上市 D=退市 P=暂停上市
fields='ts_code,symbol,name,area,industry,list_date'
)

print(f"共有 {len(stock_list)} 只上市股票")
print(stock_list.head())

# 按行业筛选
tech_stocks = stock_list[stock_list['industry'].str.contains('软件|互联网', na=False)]
print(f"软件和互联网行业: {len(tech_stocks)} 只")

获取日线行情数据

# 获取单只股票日线
df = pro.daily(
ts_code='000001.SZ', # 平安银行
start_date='20240101',
end_date='20240601'
)

# 按日期排序
df = df.sort_values('trade_date')

print(df.head())
print(f"\n数据范围: {df['trade_date'].min()} ~ {df['trade_date'].max()}")
print(f"交易日数: {len(df)}")

# 列说明:
# open: 开盘价, high: 最高价, low: 最低价
# close: 收盘价, pre_close: 昨收价
# vol: 成交量(手), amount: 成交额(千元)

批量获取多只股票数据

# 定义股票池
stock_codes = ['000001.SZ', '000002.SZ', '600000.SH', '600036.SH']

all_data = {}
for code in stock_codes:
try:
df = pro.daily(ts_code=code, start_date='20240101', end_date='20240601')
df = df.sort_values('trade_date')
all_data[code] = df
print(f"{code} 获取成功: {len(df)} 条数据")
except Exception as e:
print(f"{code} 获取失败: {e}")

获取财务数据

# 利润表
income = pro.income(
ts_code='000001.SZ',
period='20231231', # 报告期
fields='ts_code,ann_date,end_date,revenue,n_income,eps,basic_eps'
)

# 资产负债表
balance = pro.balancesheet(
ts_code='000001.SZ',
period='20231231',
fields='ts_code,total_assets,total_liab,total_hldr_eqy'
)

# 现金流量表
cashflow = pro.cashflow(
ts_code='000001.SZ',
period='20231231',
fields='ts_code,n_cashflow_act'
)

其他数据源

AKShare(免费,无需 token)

# pip install akshare
import akshare as ak

# 获取 A 股实时行情
stock_zh_a_spot_df = ak.stock_zh_a_spot_em()

# 获取历史数据
hist = ak.stock_zh_a_hist(
symbol="000001",
period="daily",
start_date="20240101",
end_date="20240601",
adjust="qfq" # 前复权
)

Yahoo Finance(国际股票)

# pip install yfinance
import yfinance as yf

# 获取美股数据
apple = yf.download('AAPL', start='2024-01-01', end='2024-06-01')

数据持久化

获取数据后应保存到本地,避免重复请求:

import os

DATA_DIR = './data'

def save_stock_data(code, df):
"""保存股票数据到本地 CSV"""
os.makedirs(DATA_DIR, exist_ok=True)
filepath = os.path.join(DATA_DIR, f'{code}.csv')
df.to_csv(filepath, index=False)

def load_stock_data(code):
"""从本地 CSV 加载股票数据"""
filepath = os.path.join(DATA_DIR, f'{code}.csv')
if os.path.exists(filepath):
return pd.read_csv(filepath)
return None

下一步双均线策略 →