股票数据获取(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
下一步:双均线策略 →