阶段二 · 金融通识(一):金融数据获取与清洗实战
阶段二 · 金融通识一金融数据获取与清洗实战用 yfinance 构建你的第一个量化数据集配套代码code/stage2/fetch_clean.py 图表assets/images/stage2/0. 为什么数据是量化的第一性原理量化投资的流程是获取数据 → 清洗质量 → 因子/信号 → 回测 → 实盘。绝大多数初学者折在第一步——拿到的数据有缺失、有复权错误、有异常跳变直接喂给模型会得到看起来很美、实盘很惨的结论。本篇教你两件事真实数据从哪来免费 API vs 数据平台对比并给出 yfinance 联网代码离线也能练手用numpy固定种子生成确定性合成数据完整演练构造时间序列 → 做面板 → 缺失值/异常值清洗 → 可视化全流程所有数值与图表均由代码真实跑出。1. 金融数据来源对比免费 API vs 数据平台来源典型代表免费额度是否需要联网数据粒度适合场景坑点行情 APIyfinance(Yahoo)、akshare(爱基)、tushare(需token)免费/基础限频是日/分钟个人研究、教学停牌/拆合股复权需手动处理券商/交易所聚宽、掘金、Wind、Choice部分免费是tick/分钟/日机构、回测平台授权收费、跨市场不一致另类数据FRED(宏观)、Quandl/Nasdaq、CoinGecko(加密)免费额度是宏观/日因子增强频率低、清洗重合成数据本篇numpy随机过程无限否自定教学、算法验证不反映真实分布仅验证逻辑结论教学与原型阶段合成数据最稳可复现、不依赖网络做真实策略时再用yfinance/akshare拉真实数据替换数据源即可——下游清洗代码几乎不用改。2. 扩展用 yfinance 获取真实数据需联网下面代码默认不执行本仓库所有运行结果均来自离线合成数据。联网环境下pip install yfinance后取消注释即可# 扩展代码需联网 pip install yfinanceimportyfinanceasyf tickers[AAPL,MSFT,GOOG,AMZN,JPM,XOM]rawyf.download(tickers,start2021-01-01,end2024-01-01,auto_adjustTrue)closeraw[Close]returnsclose.pct_change().dropna()# 日收益print(returns.head())code/stage2/fetch_clean.py末尾也封装了fetch_real_with_yfinance()与本篇合成流程接口一致方便你一键切换真实数据源。3. 用合成数据构造多资产时间序列 财务报表面板我们不依赖网络用相关正态 几何布朗运动(GBM)生成 6 只股票AAPL/MSFT/GOOG/AMZN/JPM/XOM的 756 个交易日日收益与价格importnumpyasnp,pandasaspd SEED20240814rngnp.random.default_rng(SEED)N_DAYS756ASSETS[AAPL,MSFT,GOOG,AMZN,JPM,XOM]ANN_MUnp.array([0.18,0.16,0.15,0.20,0.10,0.08])# 年化收益ANN_SIGMAnp.array([0.28,0.25,0.24,0.32,0.20,0.22])# 年化波动# 两因子(市场 科技行业)构造正定相关矩阵mnp.array([0.70,0.70,0.70,0.70,0.50,0.40])snp.array([0.40,0.40,0.35,0.45,0.00,0.00])nlen(m);corrnp.eye(n)foriinrange(n):forjinrange(n):ifi!j:corr[i,j]m[i]*m[j]s[i]*s[j]Lnp.linalg.cholesky(corr)# 正定 → 可分解zrng.standard_normal((N_DAYS,n))corr_retz L.T daily_muANN_MU/252.0daily_sigmaANN_SIGMA/np.sqrt(252.0)returnsdaily_mucorr_ret*daily_sigma prices100*np.exp(np.cumsum(np.log1p(returns),axis0))# GBM为模拟脏数据我们额外注入56 个缺失值和18 个异常冲击±3%~4% 的额外跳变用于演示清洗。同时构造一份财务报表式面板多股票 × 多年 × 多指标MultiIndexRevenue NetIncome TotalAssets ROE DebtRatio Ticker Year AAPL 2021 240.292 56.605 709.028 0.244 0.540 2022 234.595 69.035 635.094 0.206 0.546 2023 254.193 64.651 840.418 0.172 0.456 MSFT 2021 342.277 77.353 790.526 0.169 0.277 2022 358.048 104.439 1293.090 0.265 0.295 2023 346.343 37.060 709.280 0.154 0.387这类面板数据(panel data)是基本面量化的标准形态——行是 (标的, 年份)列是财务指标后续可做横截面因子如按ROE排序选股。4. 数据质量缺失值处理 异常值检测(3σ / Z-score)4.1 缺失值处理n_missingint(returns.isna().sum().sum())# 统计缺失filledreturns.ffill().bfill()# 前向 后向填充filledfilled.fillna(filled.mean())# 极端残留用列均值兜底4.2 异常值检测3σ / Z-score对每个资产列做标准化落在外侧|z| 3的视为异常mufilled.mean();sigmafilled.std(ddof0)z(filled-mu)/sigma outliers(z.abs()3)countoutliers.sum()# 每列异常数为什么用 3σ正态下|z|3的概率仅约 0.27%误报率低但金融收益有厚尾实际异常往往比 3σ 更频繁——这正是量化人要警惕的分布假设陷阱。5. 真实运行结果代码跑出非编造运行python code/stage2/fetch_clean.py关键输出期末价格起点均归一到 100资产AAPLMSFTGOOGAMZNJPMXOM期末价149.63155.82246.92242.89158.25112.30数据质量结果注入缺失值56个 → 清洗后残留缺失0ffillbfill 完全补齐注入异常冲击18个 → 用 3σ 检测到异常点23个多出的 5 个来自收益厚尾的自然极端日正好印证金融收益非正态各资产日收益标准差σAAPL0.0198、MSFT0.0169、GOOG0.0181、AMZN0.0209、JPM0.0181、XOM0.0158。每只资产的 3σ 异常点数量资产AAPLMSFTGOOGAMZNJPMXOM合计异常点数326453235.1 图表图 16 只股票的合成 GBM 价格序列。起点归一为 100科技股(GOOG/AMZN)波动更大、终点更高能源股(XOM)相对平稳。图 2日收益箱线图。箱体为 IQR 区间散点为超出 1.5×IQR 的离群点与 3σ 检测相互印证。图 3收益相关性热力图。科技股之间相关性高达 0.63~0.67同受市场因子科技行业因子驱动跨板块如 JPM-XOM仅约 0.20。相关性是资产配置的地基——第 2 篇会用到。6. 作业讲解投资组合异常值检测题目给定一组资产日收益如何在不删除数据的前提下标记并温和修正异常值避免极端日扭曲后续协方差估计讲解与结论标记而非删除用 3σ/Z-score 给异常日打标签outliers布尔矩阵保留原始数据可追溯修正用缩尾(winsorize)把|z|3的收益裁剪到 ±3σ而非置零或删除——既保留时序连续性又抑制极端值对协方差矩阵的主导本篇实证注入 18 个异常后3σ 共抓到 23 个含 5 个厚尾自然异常。这说明3σ 在金融场景偏宽松实战中可改用MAD(中位数绝对偏差)或滚动窗口 z-score 以适应非平稳波动下游影响异常值会显著高估协方差与尾部风险清洗后得到的相关系数图 3才可用于第 2 篇的资产配置优化。一句话结论异常检测不是找茬而是给你的风险模型打疫苗——宁可多标记、不可漏标记修正时务必保留可追溯性。7. 小结 交付物代码code/stage2/fetch_clean.py离线可复现含 yfinance 扩展函数图表assets/images/stage2/price_series.png、outlier_boxplot.png、correlation_heatmap.png数值摘要code/stage2/fetch_clean_summary.json你已掌握数据来源选型、合成数据生成、缺失值/异常值清洗、相关性可视化以及异常检测在组合风控中的意义。下一篇《资产配置与全天候策略》将基于这里的多资产收益与相关矩阵构建真正的配置框架并做回测对比。

相关新闻

正确学习编程

正确学习编程

第一步.准备 喜欢编程的正确原因 首先,一定不要因为游戏而喜欢编程,这样可能会束缚学习者的思维,要让学习者不要只认为“编程是用来做游戏的”,编程融入了我们生活的方方面面,绝不止于游戏。然而,在教学过…

2026/10/24 15:53:30 阅读更多 →
10个Admin Work常用组件实战:让你的中后台开发事半功倍

10个Admin Work常用组件实战:让你的中后台开发事半功倍

10个Admin Work常用组件实战:让你的中后台开发事半功倍 【免费下载链接】admin-work Vue3 和 NaiveUI 的完美结合—Admin Work,拥有漂亮、强大、完善的功能。采用 Vue3 Vite2 Typescript NaiveUI Pinia编写的中后台框架。全面的系统配置,优质…

2026/11/3 7:03:23 阅读更多 →
零代码搭建数据看板:Redash 快速上手,5 步做出你的第一块可视化仪表盘

零代码搭建数据看板:Redash 快速上手,5 步做出你的第一块可视化仪表盘

零代码搭建数据看板:Redash 快速上手,5 步做出你的第一块可视化仪表盘 【免费下载链接】redash Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data. 项目地址: https://gitcode.com/GitHu…

2026/11/2 17:44:43 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻