
别再手工复制行情了用Python雪球API免费搭一套A股量化数据工作台【免费下载链接】pysnowball雪球股票数据接口 python edition项目地址: https://gitcode.com/gh_mirrors/py/pysnowball上周末一位做投资的朋友对着屏幕叹气——他花了一下午把雪球网页上的K线数据一条条复制进Excel结果粘贴时格式错位收盘价串到了成交量那一列整张表报废重来。这大概是每个想做点数据分析的A股投资者都经历过的窘境行情、财务、资金数据明明就在网上却怎么也拿不到自己手里最后只能靠肉眼和Excel硬扛。pysnowball雪球股票数据接口Python版就是来解决这个问题的它把雪球及中证指数、蛋卷基金、港交所等平台的数据能力封装成几十个开箱即用的Python函数。安装一个包、设置一次token行情报价、K线、三大财务报表、资金流向、北向持股、基金净值全部变成你程序里的普通变量。一个数据搬运工的自救故事在遇到pysnowball之前很多人的日常是这样的看行情打开雪球网页或App肉眼盯盘做回测把历史K线复制进Excel再手工调整格式看财报翻公告PDF自己敲数字建表格看资金流向对着红绿数字发呆算不出累计净流入。这些活儿重复、费时、还容易出错本质上就是一个人工数据搬运工。而pysnowball把搬运的环节自动化了——你只管写自己的分析逻辑剩下的取数交给它。第一步三分钟跑通第一个 Demo安装只需一行命令pip install pysnowball下面这段代码解决的是如何用最小成本验证环境和token是否可用的问题import pysnowball as ball # 用你的雪球token初始化来源见 how_to_get_token.md只需设置一次 ball.set_token(xq_a_token你的token;u你的uid) # 拉一只股票的完整行情快照最新价、市盈率、市净率全在里面 raw ball.quote_detail(SH600519) q raw[data][quote] print(q[name], 最新价, q[current], PE, q[pe_ttm], PB, q[pb])跑通这五行的功夫你就已经完成了从网页上手动看到程序里自动取的跨越。如果只想快速体验一把ball.quotec(SH000001)连token都不需要直接返回上证指数实时报价。第二步一张表看懂它能拿到哪些数据下面这段文字解决的是快速了解这个库的完整能力边界的问题。用表格代替翻文档数据类型对应函数典型字段实时报价quotec/quote_detail最新价、涨跌幅、市盈率、市净率、总市值分笔盘口pankou买卖十档、内外盘、委比K线kline开高低收、成交量支持日/周/月/60m/30m/1m财务三大表income/balance/cash_flow营收、净利润、总资产、负债率、现金流业绩指标indicator/main_indicatorROE、EPS、毛利率、净利率资金流向capital_flow/capital_history/capital_assort每分钟/每日净流入、大中小单分布两融与大宗margin/blocktrans融资融券余额、大宗交易明细股东结构top_holders/holders/org_holding_change前十大股东、股东户数变化、机构持仓指数数据index_basic_info/index_perf_7/30/90/index_weight_top10指数基本信息、区间收益、权重股北向资金northbound_shareholding_sh/_sz沪深港通每日持股明细基金数据fund_info/fund_nav_history/fund_asset/fund_manager净值历史、持仓、基金经理其他suggest_stock/watch_list/convertible_bond/report股票搜索、自选列表、可转债、机构研报注意一个小细节行情、财务、资金类接口走雪球通道需要token而基金接口走蛋卷通道、指数接口走中证指数官网quotec甚至不需要token。知道了这一点你就能在token失效时依然取到部分数据。第三步手把手搭一个自选股估值体检面板下面这个实战场景换成了自选股估值体检把你自己关心的几只股票拉出来算波动率、按估值排序、看资金异动最后生成一张报告。整条链路是 取数 → 清洗 → 分析 → 可视化 → 得出洞察。取数把行情、估值、资金一次拉齐from datetime import datetime def fetch_quotes(symbols): 批量拉取自选股的行情快照只保留需要的字段 rows [] for sym in symbols: try: q ball.quote_detail(sym)[data][quote] rows.append({ symbol: sym, name: q.get(name, sym), price: q[current], pe: q.get(pe_ttm), pb: q.get(pb), turnover: q.get(turnover_rate), }) except Exception as err: print(f{sym} 拉取失败: {err}) return rows def fetch_kline_series(symbol, days250): 拉取日K线返回 (日期列表, 收盘价列表) raw ball.kline(symbol, periodday, countdays) dates, closes [], [] for row in raw[data][item]: if row[2] is None: # 剔除停牌等无收盘价的记录 continue dates.append(datetime.fromtimestamp(row[0] / 1000)) closes.append(float(row[2])) return dates, closes清洗把脏数据收拾干净上面的fetch_kline_series已经顺手做了一件事雪球返回的时间戳是毫秒不除以1000会得到离谱的年份停牌日的收盘价是None不剔除会让后续计算全盘出错。这一步解决的是原始数据直接进模型必然翻车的问题。分析波动率、估值排序、资金异动import statistics def annual_volatility(closes, lookback60): 用最近 lookback 个交易日的对数收益估算年化波动率 if len(closes) lookback 1: return None window closes[-lookback:] returns [window[i] / window[i - 1] - 1 for i in range(1, len(window))] return statistics.pstdev(returns) * (250 ** 0.5) * 100顺便把大盘环境和北向资金拉来当宏观背景这一步解决只看个股不看环境的盲区# 沪深300的基本信息与近30日表现走中证指数官网稳定免费 idx ball.index_basic_info(000300) perf ball.index_perf_30(000300) print(沪深300近30日:, perf)可视化把体检结果画出来最后把上面几段串成一条流水线输出报告并画图这一步解决结论可视化的问题def build_report(symbols): 取数、清洗、分析串成一条流水线输出体检报告 report [] for row in fetch_quotes(symbols): _, closes fetch_kline_series(row[symbol]) row[vol] annual_volatility(closes) report.append(row) report.sort(keylambda r: r[pe] if r[pe] else 1e9) # 低估的排前面 print(f{代码:8}{名称:8}{PE:8}{PB:8}{年化波动%:10}) for r in report: pe f{r[pe]:.1f} if r[pe] else - pb f{r[pb]:.1f} if r[pb] else - vol f{r[vol]:.1f} if r[vol] else - print(f{r[symbol]:8}{r[name]:8}{pe:8}{pb:8}{vol:10}) def plot_ma(symbol, days120): 给单只股票画收盘价与20日均线观察趋势 dates, closes fetch_kline_series(symbol, days) ma20 [sum(closes[i-19:i1]) / 20 if i 19 else None for i in range(len(closes))] import matplotlib.pyplot as plt plt.figure(figsize(10, 4)) plt.plot(dates, closes, label收盘价) plt.plot(dates, ma20, labelMA20, linewidth2) plt.title(f{symbol} 近{days}日走势) plt.legend() plt.grid(alpha0.3) plt.show() build_report([SH600519, SZ000858, SH600036, SZ000002]) plot_ma(SH600036)跑完这一段你就得到了一张数据驱动的体检结论哪些票PE明显低于同行、哪些票波动大到不适合重仓、最近60日哪只票被资金持续关注——这些判断全部来自你自己的数据管道而不是别人的二手观点。高频问题排查清单FAQ这份清单解决出问题不知道去哪找答案的问题Q1token 从哪里拿按项目根目录how_to_get_token.md的步骤登录雪球网页版在浏览器开发者工具里找到 Cookie 中的xq_a_token和u字段拼接即可。Q2调用时报错NOTOKEN_ERROR_MSG说明set_token没生效。它是写入环境变量的同一个进程里设置后立即生效但新开的进程需要重新设置。Q3返回的error_code不是 0绝大多数情况是 token 过期了。雪球 token 有有效期重新抓一次 Cookie 换上就好。Q4哪些接口可以不用 token 先试手quotec实时报价和全部fund_*基金接口不需要 token适合用来快速验证网络与安装是否正常。Q5K线周期怎么指定ball.kline(symbol, period, count)period 支持day、week、month、60m、30m、1mcount 是返回的K线根数默认284。Q6时间戳换算为什么不对雪球的时间戳单位是毫秒先除以1000再datetime.fromtimestamp()。基金接口的nav_date同样如此。Q7批量取数会不会被限流循环里建议加time.sleep(0.5~1)把并发控制在合理范围。数据接口是免费开放的但也别高频轰炸。Q8想自己看返回字段每个接口的具体字段说明都写在APIs/目录下比如APIs/realtime_kline.md有K线返回示例tests/test_fund.py展示了基金接口的调用姿势。行动清单与延伸阅读按下面这个顺序你今晚就能跑通第一版git clone https://gitcode.com/gh_mirrors/py/pysnowball拿到完整源码pip install pysnowball或pip install -r requirements.txt按how_to_get_token.md取 token跑通本文第一步的 Demo把build_report里的股票代码换成你自己的自选股跑一次体检翻README.md和APIs/目录按需取用财务、基金、北向资金等能力。从手动复制行情到程序自动体检差的不是工具而是你愿不愿意把数据当成可编程的基础设施。pysnowball 把门槛降到了几行代码以内剩下的就看你想用这些数据解释什么、验证什么了。【免费下载链接】pysnowball雪球股票数据接口 python edition项目地址: https://gitcode.com/gh_mirrors/py/pysnowball创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考