Python做股票数据分析常用哪些库 从入门到实战选对工具不踩坑

发布时间:2026-09-30 21:57阅读:4143评论:0

数据获取类库

做股票数据分析,第一步永远是拿到数据。数据来源无非两种,要么从免费公开接口抓,要么从付费终端导。Python在这块的选择很丰富,但坑也不少。

yfinance

这是目前散户圈子里用得最广的免费美股数据接口。雅虎财经的底层数据,一行代码就能拉历史K线和实时报价。


import yfinance as yf

df = yf.download('AAPL', start='2024-01-01', end='2024-12-31')

拿到手就是标准的DataFrame,包含开盘价、最高价、最低价、收盘价、成交量。日线、周线、分钟线都支持。A股也能拉,代码后面加.SS或.SZ,例如600519.SS。港股加.HK。缺点是偶尔会抽风,接口限流或者数据缺失,做严肃回测前最好把数据存到本地数据库。

Python做股票数据分析常用哪些库 从入门到实战选对工具不踩坑

tushare

国内做A股分析绕不开的库。免费版有积分门槛,但基础行情数据足够用。财务数据、龙虎榜、资金流向这些衍生数据也全。


import tushare as ts

pro = ts.pro_api('你的token')

df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20241231')

数据质量比爬虫稳定得多,适合需要A股全市场数据的场景。缺点是免费额度有限,高频调用要充值。

akshare

开源免费的A股数据接口合集,覆盖股票、期货、基金、债券、外汇。数据源来自各大财经网站,更新及时。


import akshare as ak

df = ak.stock_zh_a_hist(symbol='000001', period='daily', start_date='20240101', end_date='20241231')

期货数据也能拿,比如螺纹钢主力连续合约。接口命名比较乱,文档需要花时间翻。稳定性不如tushare,但胜在免费且品种全。

数据处理与计算类库

拿到原始数据只是起点,清洗、对齐、计算指标才是重头戏。

pandas

这是Python数据分析的绝对核心。股票数据本质就是带时间索引的二维表格,pandas的DataFrame就是为此而生。

处理复权、填充停牌日、计算滚动收益率、重采样成周线月线,全是一两行代码的事。


# 计算20日滚动波动率

df['returns'] = df['Close'].pct_change()

df['volatility'] = df['returns'].rolling(20).std() * (252**0.5)

时间序列的对齐和切片更是pandas的强项。多只股票对齐日期做相关性分析,用df.pivot和df.corr几步搞定。

numpy

pandas底层依赖numpy,做数值计算时直接调numpy更快。计算移动平均、指数加权、矩阵运算,numpy的向量化操作比循环快几十倍。


import numpy as np

prices = df['Close'].values

ma20 = np.convolve(prices, np.ones(20)/20, mode='valid')

做期权定价或者风险价值计算时,numpy的随机数生成和线性代数模块必不可少。

scipy

统计检验、优化算法、插值。做配对交易时算协整关系,做参数优化时求极值,scipy比手写算法靠谱得多。

技术指标与策略回测类库

指标计算和策略验证是股票分析的核心环节。

TA-Lib

技术分析库的鼻祖,200多个指标函数,MACD、RSI、布林带、KDJ全都有。C语言底层,速度快。


import talib

macd, signal, hist = talib.MACD(df['Close'], fastperiod=12, slowperiod=26, signalperiod=9)

安装有点麻烦,Windows下需要编译好的whl文件。但装好之后就是生产力工具。

pandas-ta

纯Python实现的技术指标库,安装零门槛。接口设计比TA-Lib更符合pandas习惯,直接给DataFrame加列。


import pandas_ta as ta

df.ta.rsi(length=14, append=True)

df.ta.bbands(length=20, append=True)

指标数量比TA-Lib还多,社区更新活跃。缺点是纯Python实现,大数据量下比TA-Lib慢。

backtrader

老牌回测框架,功能全面,支持多品种、多周期、事件驱动。期货的保证金交易、做空、杠杆都能模拟。


import backtrader as bt

class MyStrategy(bt.Strategy):

    def __init__(self):

        self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)



    def next(self):

        if self.data.close[0] > self.sma[0]:

            self.buy()

学习曲线陡峭,但一旦掌握,策略逻辑表达非常清晰。内置的 analyzers 能直接输出夏普比率、最大回撤、年化收益。

vectorbt

新一代回测库,基于numpy和numba,速度极快。核心思路是向量化计算,适合参数扫描和批量回测。


import vectorbt as vbt

fast_ma = vbt.MA.run(close, 10)

slow_ma = vbt.MA.run(close, 30)

entries = fast_ma.ma_crossed_above(slow_ma)

exits = fast_ma.ma_crossed_below(slow_ma)

portfolio = vbt.Portfolio.from_signals(close, entries, exits)

几千组参数几秒钟跑完,做策略优化时效率碾压backtrader。缺点是对复杂逻辑的支持不如backtrader灵活。

可视化与报告类库

matplotlib

绘图基础库,K线图、收益曲线、回撤图都能画。配合mplfinance(原mpl_finance)画专业K线。


import mplfinance as mpf

mpf.plot(df, type='candle', volume=True, mav=(5,10,20))

plotly

交互式图表,鼠标悬停看具体数值,缩放拖拽都支持。做多品种对比或者展示给非技术同事看,plotly比matplotlib直观得多。


import plotly.graph_objects as go

fig = go.Figure(data=[go.Candlestick(x=df.index, open=df['Open'], high=df['High'], low=df['Low'], close=df['Close'])])

fig.show()

pyfolio

量化组合分析专用,输入收益率序列,自动生成夏普比率、回撤分析、月度收益热力图。和backtrader配合使用,回测完直接出报告。

期货数据处理的特殊之处

期货和股票的数据结构差异很大,选库时要留意。

期货有主力合约换月的问题,价格序列不连续。处理主力连续合约时,需要做前复权或者后复权拼接。akshare和tushare都提供主力连续合约数据,但拼接规则要自己确认。

期货有保证金和杠杆,回测时不能只看价格收益率。backtrader的CommissionInfo和Margin设置要按交易所规则来,否则回测结果和实盘差得远。

期货有夜盘,交易时段和股票不同。做日内策略时,pandas的between_time方法能帮你筛选特定时段的数据。


# 筛选夜盘时段(21:00到23:00)

night_session = df.between_time('21:00', '23:00')

组合使用建议

入门阶段,yfinance + pandas + matplotlib 三件套足够。能拉数据、能算指标、能画图。

进阶阶段,tushare或akshare + pandas-ta + backtrader。A股期货数据全覆盖,指标现成,回测框架成熟。

高频或参数优化场景,vectorbt + numpy + numba。速度是王道。

生产环境,数据落地到本地数据库(SQLite或PostgreSQL),用pandas从数据库读,避免反复调接口。

工具不在多,在于用熟。把pandas玩透,比装十个库每个只懂皮毛强得多。股票和期货分析的本质是逻辑,库只是帮你实现逻辑的扳手。

上一篇湖南股票开户选哪个证券公司好 要免费开户的手续费低的大盘跌破3000点意味着什么?现在该割肉还是抄底?下一篇
联系管理员
联系管理员