对于个人量化投资者而言,运用 Python 获取交易数据是制定策略的首要步骤。
Python 拥有多样的金融数据获取库和工具,能够帮助你从不同来源收集股票、基金、期货、加密货币等市场的历史与实时数据。以下为你系统整理的内容:
- 适合个人投资者的 Python 数据获取方案
- 常用库简介 + 安装 + 实战代码示例
- 免费 vs 付费选择建议
- 数据清洗与存储建议
一、常用 Python 库概览(按用途分类)
| 库名 | 支持市场 | 是否免费 | 特点 |
|---|---|---|---|
|
A股、港股、期货、基金、宏观 | 免费 | 中文社区维护,覆盖面广 |
|
A股、港股、指数、龙虎榜 | 部分免费 | 数据品质高,需积分 |
|
A股、指数 | 免费 | 国产,无需注册,简便易用 |
|
美股、ETF、全球指数 | 免费 | Yahoo Finance 接口,国际首选 |
|
多源(Yahoo、FRED、World Bank) | 免费 | 通用性佳,适用于宏观数据 |
|
加密货币(币安、OKX等) | 免费 | 支持100+交易所 |
|
A股、期货、期权 | 付费/机构 | 专业级,精确度高 |
|
/ | / | / |
|
多市场(需平台账号) | 混合 | 与实盘对接良好 |
推荐组合:
- 初学者:
+akshareyfinance - 进阶者:
+tushareccxt - 专业级:
rqdatac
或JoinQuant API
二、实战演示:6个常用库的使用方法
-
—— 中文世界最全面的免费金融数据接口akshare
# 安装:pip install akshare
import akshare as ak
# 获取A股日线数据
df = ak.stock_zh_a_daily(symbol="sh600519", adjust="qfq") # 贵州茅台
print(df.tail())
# 获取指数
index_df = ak.index_zh_ah_daily(symbol="sh000300") # 沪深300
# 获取期货
fut_df = ak.futures_hq_subscribe_exchange_symbol(exchange="SHFE")
# 获取基金
fund_df = ak.fund_etf_hist_em(fund="159949") # 消费ETF
优点:支持广泛,更新迅速,完全免费
缺点:部分接口稳定性欠佳,需处理异常
-
—— 高品质数据,但需要注册+积分tushare
# 安装:pip install tushare
import tushare as ts
# 设置token(需在官网注册获取)
ts.set_token('your_token_here')
pro = ts.pro_api()
# 获取日线行情
df = pro.daily(ts_code='600519.SH', start_date='20200101', end_date='20240101')
# 获取财务报表
income = pro.income(ts_code='600519.SH', period='20231231')
# 获取资金流向
moneyflow = pro.moneyflow_hsgt()
优点:数据权威、结构清晰、支持基本面
缺点:高频数据需付费或高积分门槛
注册地址:https://tushare.pro
-
—— 简便易用的国产替代baostock
# 安装:pip install baostock
import baostock as bs
import pandas as pd
#### 登录系统 ####
lg = bs.login()
print(f"登录状态: {lg.error_msg}")
#### 获取K线数据 ####
rs = bs.query_history_k_data_plus("sh.600519",
"date,code,open,high,low,close,preclose,volume,amount,adjustflag",
start_date='2020-01-01', end_date='2024-01-01', frequency="d", adjustflag="3")
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
#### 退出登录 ####
bs.logout()
优点:无需Token,完全免费,适合初学者
缺点:不支持实时数据,功能较为基础
-
—— 获取美股、ETF、全球资产的首选yfinance
安装:pip install yfinance
import yfinance as yf
# 获取苹果公司(AAPL)的信息
ticker = yf.Ticker("AAPL")
df = ticker.history(period="5y", interval="1d")
print(df[['Open', 'High', 'Low', 'Close', 'Volume']].tail())
# 获取SP500指数
sp500 = yf.download("^GSPC", start="2020-01-01", end="2024-01-01")
# 获取分红与拆分详情
dividends = ticker.dividends
splits = ticker.splits
? 特点:可靠、高效、支持全球资产
? 强烈建议用于美股研究、QDII、跨国配置
5.
pandas_datareader
—— 宏观经济数据工具
# 安装:pip install pandas-datareader
import pandas_datareader as pdr
from datetime import datetime
# 获取美联储利率信息(FRED)
interest_rate = pdr.get_data_fred('FEDFUNDS', start=datetime(2020, 1, 1))
# 获取CPI通胀信息
cpi = pdr.get_data_fred('CPIAUCSL')
# 获取中国GDP(世界银行)
gdp_cn = pdr.wb.download(indicator='NY.GDP.MKTP.CD', country=['CN'], start=2000, end=2023)
? 适用于宏观对冲、资产配置分析
6.
ccxt
—— 加密货币量化工具
?
# 安装:pip install ccxt
import ccxt
# 连接币安(Binance)
exchange = ccxt.binance({
'rateLimit': 1000,
'enableRateLimit': True,
})
# 获取BTC/USDT最新价
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'])
# 获取K线数据
ohlcvs = exchange.fetch_ohlcv('ETH/USDT', '1d', limit=100)
import pandas as pd
df = pd.DataFrame(ohlcvs, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['date'] = pd.to_datetime(df['timestamp'], unit='ms')
? 支持超过100个交易所,如币安、OKX、Gate.io
? 适于创建全自动加密交易系统
三、数据获取优秀实践建议
? 建议步骤:
1. 明确需求 → 股票?期货?还是跨市场?
2. 选择合适的数据源(见下表)
3. 写脚本定时拉取 → 存入本地CSV或数据库
4. 清洗处理 → 统一格式、去复权、补缺失值
5. 构建自己的“私有数据库”
???? 数据存储建议:
小规模:
CSV文件 +
Pandas中等规模:
SQLite(轻型数据库)
大规模:
MySQL/
PostgreSQL+
SQLAlchemy
# 示例:保存至SQLite
import sqlite3
conn = sqlite3.connect('stock_data.db')
df.to_sql('maotai', conn, if_exists='replace', index=False)
conn.close()
四、免费 vs 付费方案对比
方案
推荐群体
优势
劣势
akshare / baostock
新手、学生
完全免费,中文友好
更新缓慢、偶尔失效
tushare(基础版)
个人研究者
数据质量高
功能有限
yfinance / ccxt
海外投资爱好者
免费、国际资产多
不包含A股
聚宽 / 通达信API
实际操作用户
可连接回测与交易
需平台账号
Wind / 同花顺i问财(付费)
专业投资者
数据全面、精度高
费用高(万元起)
???? 个人起步建议:
先用
akshare和
yfinance建立基础,熟练后再考虑付费服务。
五、注意事项与避坑指南
问题
解决办法
数据未复权
使用
adjust="qfq"(前复权)确保可比性
数据丢失
检查节假日、停牌状况,手动补充或跳过
接口频繁访问被封
加入
time.sleep(1)防止爬虫限制
时间戳时区混乱
统一转换为北京时间
.tz_localize()实时数据延迟
免费接口通常是T+1,若需实时则需连接券商API
六、结语:掌握数据,就是掌握了量化世界的钥匙
“没有数据,就没有测试;
没有测试,就没有信心;
没有信心,就没有持久执行。”
作为个人量化投资者,能够用 Python 自动化地收集数据,已经迈出了至关重要的一步。
记住:
不必追求最完整的数据,而应追求...
可持续、可验证、可更新
的数据流;最可靠的系统,是你每日都能信赖并运用的那个。
???? 最后送你一句话:
“卓越的策略,起始于一行import pandas as pd
。”
现在就行动起来吧


雷达卡


京公网安备 11010802022788号







