《量化投资:以Python为工具》课后习题完整答案与代码资料包
简介《量化投资以Python为工具》课后习题配套资料包面向金融量化学习者与Python开发人员汇集了章节习题答案、可运行代码及配套CSV数据用于对照检验风险回报度量、资产组合优化、时间序列分析和机器学习建模等核心知识点。压缩包共78个文件包括34个Python脚本覆盖各章策略实现与数据预处理37个CSV文件提供历史行情、交易量等样本数据另有PDF答案总览、路径说明和Access数据库整体约91.84MB目录按章节和Part模块组织方便按需查阅。已有1649人学习浏览。通过阅读和运行这些代码读者可快速掌握pandas数据处理、numpy统计分析与matplotlib可视化的完整流程并结合习题答案理解模型构建、参数调优与回测验证的实用技巧是系统入门量化投资不可多得的高密度参考资料。1. 项目来龙去脉这本教材的课后题值得认真做一遍《量化投资以Python为工具》这本书在量化入门圈子里一直口碑不错尤其是蔡立耑那版把Python编程和金融数据分析结合得比较扎实。市面上讲Python的书很多讲量化的书也不少但能把“Python语法→数据处理→可视化→策略回测”这条链路完整串起来、还配了成体系课后习题的教材并不算多。我最初学这本书的时候最头疼的一件事就是课后题没有官方标准答案。书里每章末尾都有一堆练习题有的题目光看题干就能猜到意图有的题目拿到手根本不知道从哪个函数下手。当时我在网上翻了很多地方能找到的答案零零散散要么只有文字没有代码要么代码跑不通甚至还有把别的书答案贴过来凑数的。更麻烦的是书中不少题目明确要求“读取CSV文件”或“根据某数据文件完成分析”但配套数据文件的下载链接早就失效了找起来非常费劲。所以这个项目其实挺朴素的我自己认认真真把每一章课后题做了一遍把答案整理成了PDF文档每道题都配了完整可运行的Python代码顺手把所有用到的CSV数据文件也一并打包了。做完之后发现这些东西确实能帮到后面学这本书的人就整理成了一套完整的资料包分享出来。这套资料适合谁用如果你正在自学这本书、刷课后题卡住了或者已经刷完想对照一下自己的思路再或者你是个老师要布置作业、批改作业这套资料都能省你大量时间。不过我得先说一句实话答案只是参考答案量化这个东西本来就没有唯一解我提供的代码能跑通、能得出合理结果但不代表这是最优写法。你要是能写出比我更漂亮的实现那才是真正把这本书吃透了。2. 资料包结构与核心内容拆解2.1 答案PDF、代码、CSV三件套是怎么组织的整个资料包的目录结构大致是下面这样的quant_homework/ ├── 答案PDF/ │ ├── 第2章课后习题答案.pdf │ ├── 第3章课后习题答案.pdf │ ├── ... ... │ └── 第12章课后习题答案.pdf ├── 代码/ │ ├── chapter02/ │ │ ├── exercise_2_1.py │ │ ├── exercise_2_2.py │ │ └── ... │ └── chapter03/ │ └── ... └── 数据/ ├── stock_data.csv ├── ... ... └── README.mdPDF文件里是每道题的详细解题思路和最终输出结果截图代码文件夹里是按章节拆分的.py脚本数据文件夹里是习题中需要用到的原始CSV文件。三者之间用章节号和题号一一对应找起来很方便。这样设计的好处是分得很清楚你可以在IDE里直接打开代码跑一遍跑通了再去看PDF里的思路讲解比单纯看答案文字要直观得多。尤其是当你想改参数、换策略试效果的时候直接在.py文件里动代码就行不需要在PDF和代码之间来回切换。2.2 这本书的章节脉络哪些题值得重点刷回顾一下整本书的章节安排基本是沿着“Python基础→NumPy数值计算→Pandas数据分析→数据可视化→金融数据获取→策略回测”这条主线推进的。每个章节的课后题侧重点不太一样我梳理了一下自己在做题时的感受章节核心知识点习题特点刷题价值第2章 Python基础语法、数据类型、函数、文件读写偏语法练习难度低快速过第3章 NumPy数组创建、索引、切片、广播、随机数需要动手算跟数学结合紧高第4章 PandasDataFrame操作、缺失值处理、分组聚合题目量最大实用性最强极高第5章 数据可视化Matplotlib绘图、K线图、样式定制图形题目多验证直观高第6章 金融数据股票数据读取、日收益率计算、对数收益率开始接触金融概念极高策略相关章节均线策略、动量策略、回测框架综合性最强开放性大极高我花时间最多的是Pandas和策略回测这两个部分。原因很简单Pandas是量化数据处理的核心工具DataFrame操作熟练度直接决定后续效率而策略回测部分是前面所有知识的综合运用写起来最费劲但提升也最大。这两个章节的习题答案我在PDF里写得最详细代码注释也最多。3. 关键习题的解题思路与代码实现细节3.1 NumPy习题先把数组思维建立起来第3章好多题目都在变着花样让你创建数组、做索引切片、算统计量。有一道题印象很深给定一个二维数组要求用三种不同方式取出某个子区域的元素并计算平均值。大部分人第一次做都会用循环但这道题考察的其实是NumPy的切片和reshape特性。我当时给的解法是这样的import numpy as np # 构造一个6行4列的随机数组 arr np.random.randn(6, 4) # 方法一直接切片取第2~4行、第1~2列 sub1 arr[1:4, 0:2] mean1 sub1.mean() # 方法二先用布尔索引筛选行再取列 bool_idx arr[:, 0] 0 sub2 arr[bool_idx][:, 0:2] mean2 sub2.mean() # 方法三用take 轴参数 row_idx [1, 2, 3] col_idx [0, 1] sub3 np.take(np.take(arr, row_idx, axis0), col_idx, axis1) mean3 sub3.mean()这道题的解题思路其实核心就一句话NumPy的切片不会复制数据它产生的只是原数组的视图view所以无论用哪种方式取子数组本质上都在操作同一块内存。这个特性在写真实量化代码时特别重要——你切出来一个子数组后原地修改原数组也会跟着变不熟悉的话很容易出隐蔽的bug。PDF答案里我还会把每种方法的运行时间对比贴出来让大家直观感受一下向量化操作和循环之间的性能差异。NumPy这种“向量化计算”的思想越早建立越好后面写策略回测的时候能省下大量时间。3.2 Pandas和CSV操作数据处理的硬骨头第4、5、6章几乎每道题都会涉及CSV文件的读取和清洗。书里给的示例数据都是CSV格式这就逼着你必须掌握pd.read_csv()的各种参数。我在做习题时发现很多同学卡住的根本不是题目本身而是CSV文件读取这一步就报错了。最常见的几个坑文件路径里有中文导致读不出来、CSV编码不是UTF-8而是GBK、数据里带着千分位逗号没法直接转数值。我在这套答案里把所有CSV读取的代码都做了标准化处理统一加上了encoding参数和enginepython兜底避免跑题的时候在环境上浪费太多时间。例如书中某题要求读取“交易明细.csv”并计算每只股票的总成交量我的解法是import pandas as pd # 读取CSV兼容中文列名和特殊编码 df pd.read_csv(交易明细.csv, encodingutf-8, enginepython) # 查看基本结构和缺失值 print(df.head()) print(df.info()) # 按股票代码分组计算成交量之和 result df.groupby(股票代码)[成交量].sum().sort_values(ascendingFalse) print(result.head(10))Pandas这块题目我强烈建议你每道题都亲手敲一遍。原因很简单groupby、merge、pivot_table这些操作看答案觉得自己会了真到用的时候经常卡壳只有亲手处理过几份脏数据、踩过几个坑才能真正内化成自己的能力。我提供的CSV数据文件里有的故意包含缺失值、重复行和异常值就是为了配合书中习题练习数据清洗的场景。3.3 策略回测类习题框架完整、可自由扩展策略章节的课后题是最有意思的因为它们往往没有唯一标准答案。比如经典的“双均线交叉策略”题目要求你读取股价数据计算5日均线和20日均线生成买入卖出信号最后画出净值曲线。我给出的回测框架大致长这样简化版import pandas as pd import numpy as np # 读取数据 df pd.read_csv(600519.csv, parse_dates[日期], index_col日期) # 计算均线 df[MA5] df[收盘价].rolling(5).mean() df[MA20] df[收盘价].rolling(20).mean() # 生成信号5日均线上穿20日均线时买入下穿时卖出 df[signal] 0 df.loc[df[MA5] df[MA20], signal] 1 df[position] df[signal].diff().fillna(0) # 计算策略每日收益率 df[strategy_ret] df[position] * df[收盘价].pct_change().shift(-1) df[strategy_nav] (1 df[strategy_ret].fillna(0)).cumprod() # 输出最终净值 print(策略最终净值, round(df[strategy_nav].iloc[-1], 4))这个框架算是个极简种子版真实的回测远没有这么简单还要处理手续费、滑点、涨跌停、停牌等一堆细节。但作为书中习题来说够用且清晰。我在PDF里特意标注了这个框架的局限性告诉读者如果你想要更接近实盘的回测效果建议在position信号生成后面加上“第二天开盘价成交”“扣除双边手续费”这些逻辑。这部分的代码我给了一个比较完整的扩展版本文件名叫strategy_backtest_full.py里面额外加了手续费模拟、最大回撤计算和年化收益率统计。学过这本书之后你可以拿这个框架作为起点去验证自己的交易想法实用性比纯做习题高很多。4. 实操体验实录资料包是怎么跑通的4.1 环境准备与运行方式我在整理这套资料时用的Python版本是3.9.x依赖库版本大致是pandas 1.4.x、numpy 1.22.x、matplotlib 3.5.x。如果你用的是更新版本的Python或库大概率也兼容但个别API如果有变动理论上改改就能跑。为了保险起见我在代码文件夹里放了一个requirements.txt你可以直接用以下命令创建虚拟环境安装依赖# 创建并激活虚拟环境 python -m venv quant_env source quant_env/bin/activate # Windows下是 quant_env\Scripts\activate # 安装依赖 pip install -r requirements.txt安装完成后进入对应的章节文件夹直接运行Python脚本即可cd 代码/chapter04 python exercise_4_1.py所有代码都按照“文件路径相对于脚本所在目录”来写的不是相对于你当前终端的工作目录。换句话说你直接在脚本所在文件夹下运行就肯定能找到CSV数据文件不用额外改路径。4.2 我实测踩过的一些小坑整理这套答案的过程中我自己在运行书里习题代码时踩过不少坑挑几个有代表性的说一说。第一个坑是pd.read_csv()读不出来带BOM头的UTF-8文件。有些CSV文件用Excel编辑过再保存文件头会多一个\ufeff字符导致第一列列名变成\ufeff股票代码这种鬼样子按列名索引的时候死活报KeyError。解决方式很简单df pd.read_csv(data.csv, encodingutf-8-sig)用utf-8-sig而不是utf-8Python会自动把BOM去掉。我所有代码里读CSV的部分都统一用的utf-8-sig就是为了规避这个坑。第二个坑是CSV文件里的日期格式不一致。有的行是2023/01/05有的行是2023-01-05直接用pd.to_datetime()解析会报错或者解析成NaT。我给出的做法是先用errorscoerce强制转换再把NaT的行单独打印出来检查确认是数据格式问题还是数据缺失问题。第三个坑跟代码本身无关是策略回测时容易出现的“未来函数”问题。比如用当日收盘价计算均线信号然后假设当日就以收盘价成交——这在真实交易里是做不到的因为信号是收盘后才生成的。我在答案PDF里专门强调过这个点建议把信号执行挪到第二天开盘这是新手最容易忽略的细节。4.3 常见问题速查表根据我自己的经历以及平时帮别人调试代码时遇到的反馈整理了一份高频问题对照表直接放进PDF附录里了问题现象根本原因解决方式CSV中文乱码文件编码不是UTF-8而是GBK读取时指定encodinggbk列名多出\ufeff文件带BOM头用encodingutf-8-sig读取rolling(5).mean()全为NaN前几行本身就为NaN属于正常现象检查数据长度必要时用min_periods1策略净值曲线太平滑信号加在收盘价上忽略了次日的跳空用次日开盘价重算策略收益画出K线图没有显示Jupyter中未执行%matplotlib inline脚本模式用plt.show()Notebook加魔法命令读取后股票代码变成小数CSV中代码被Excel转成科学计数法读取时指定dtype{股票代码: str}分组聚合结果和预期不一致没有处理重复行先drop_duplicates()再聚合这些问题看起来很琐碎但在习题和真实数据分析中特别常见我全部在PDF里做了详细说明同时也在代码里做了针对性处理。你拿到资料后如果遇到类似报错直接查这个表能省不少事。最后再补充一个使用技巧这套代码和CSV文件不只是用来对答案的。你可以把CSV数据替换成自己下载的股票行情数据把习题里的代码改巴改巴变成自己的分析工具。比如第6章算日收益率的代码换个数据源就是一份能直接用的收益率计算脚本策略回测框架换个股票、调几个参数就能验证你自己的交易想法。这也是我整理这套资料最希望看到的用法——答案本身只是中点把这个过程中练出来的数据处理能力和策略思维用到自己的项目里才是终点。本文还有配套的精品资源点击获取

相关新闻

Linux桌面配置完全指南:从输入法到开发环境的高效搭建

Linux桌面配置完全指南:从输入法到开发环境的高效搭建

1. 这篇文章真正要解决的问题很多初学 Linux 的朋友都有过这样的经历:系统装好了,桌面也进来了,但真正用起来处处别扭。输入法切不出来,字体发虚,终端难看,装个软件不知道用哪个命令,笔记本合盖…

2026/9/3 19:14:49 阅读更多 →
Linux运维实操图谱:从基础命令到容器编排进阶

Linux运维实操图谱:从基础命令到容器编排进阶

Linux 运维这件事,看着东西很多,真正常用的其实就一条主线:装系统、配网络、管用户、启服务、看日志、排故障。无论是刚入职的桌面运维岗,还是准备往服务器运维、云计算运维方向转,掌握的技能树基本一致。差别只在于你…

2026/9/3 19:13:49 阅读更多 →
GD32+FreeRTOS+lwIP:嵌入式以太网数据采集网关底层架构解析

GD32+FreeRTOS+lwIP:嵌入式以太网数据采集网关底层架构解析

简介:面向嵌入式网络开发者的实战资源,基于GD32F450微控制器、FreeRTOS实时系统和lwIP协议栈,聚焦DP83848以太网PHY芯片的适配。压缩包完整呈现驱动开发、lwIP参数配置、FreeRTOS任务划分、中断服务例程及错误处理等关键环节,适合…

2026/9/3 19:13:49 阅读更多 →

最新新闻

SHT30温湿度传感器与STM32F4的I2C驱动开发:从原理到工程实践

SHT30温湿度传感器与STM32F4的I2C驱动开发:从原理到工程实践

简介:基于STM32F407与SHT30温湿度传感器的工程代码,面向物联网设备、环境监控、智能家居等场景的开发者,尤其适合刚接触模拟IIC通信的单片机爱好者。包内共3个文件,保留SHT30驱动C源文件、头文件,以及配套PDF说明文档&…

2026/9/3 19:56:17 阅读更多 →
用 Python + PySide6 构建桌面 AI 助手:从界面到打包实战

用 Python + PySide6 构建桌面 AI 助手:从界面到打包实战

做桌面 AI 助手这件事,听起来像是给 AI 套了个壳。真正用 Python PySide6 动手做完一个能用的 DSCode Assistant 之后,我才意识到,这套项目真正值得学的不是“套壳”,而是把一个网络请求放进桌面应用里需要解决的一连串工程问题&…

2026/9/3 19:56:17 阅读更多 →
PySide6桌面AI助手开发:界面、线程与大模型API实战解析

PySide6桌面AI助手开发:界面、线程与大模型API实战解析

前几天在做一个内部工具时,需要给团队搭一个能对话的桌面端 AI 助手。Web 页面虽然方便,但每次要开浏览器、维护前端路由,在局域网和离线场景下反而显得笨重。后来改用 PySide6 直接写桌面客户端,体验和 QQ、微信聊天窗口一样自然…

2026/9/3 19:56:17 阅读更多 →
2026 AI 智能体开始自己动手:Computer Use 实战,MonkeyCode 云端给 Agent 一台真实浏览器

2026 AI 智能体开始自己动手:Computer Use 实战,MonkeyCode 云端给 Agent 一台真实浏览器

一、先讲一个"手点废了"的故事 老李带一个 12 人的电商运营团队。每天早上,组员要在四个后台系统里来回切换:先去 ERP 导昨天的订单,再去投放后台把数据抄进日报,最后去财务系统核一遍账。一套流程点下来,人…

2026/9/3 19:56:17 阅读更多 →
塔防地图编辑器入门:从零制作可玩塔防地图全流程

塔防地图编辑器入门:从零制作可玩塔防地图全流程

很多玩家第一次打开塔防战争重制版的编辑器时,都会经历同一个心理过程:看到精美地图,先觉得很兴奋;打开编辑器之后,满屏的工具栏、单位列表和属性面板扑面而来,只剩下一脸茫然。如果只当玩家在别人做好的地…

2026/9/3 19:56:17 阅读更多 →
作业批改系统开发实战:从OCR识别到人机协同的完整架构

作业批改系统开发实战:从OCR识别到人机协同的完整架构

简介:这是一份基于网页的作业批改系统源码,围绕学生、教师、管理员三类角色,实现在线作文上传、教师批改、点卡充值、个人信息管理及后台统一管理等核心功能,适合作为网络编程方向的课程设计或毕业设计参考项目。压缩包为rar格式&…

2026/9/3 19:55:16 阅读更多 →

日新闻

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

先别急着点开,这不是劝退文,而是想讲清楚一件事:用 AI 做逆向值不值得学?如果要用,怎么搭一套“V8 环境 AI 智能体”来提升效率。最近逆向圈、爬虫圈都在聊 AI Agent、AST 工程逆向、JS 逆向这些词,很多新手…

2026/9/3 0:00:29 阅读更多 →
安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →
ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/3 4:22:22 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/3 4:22:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/3 4:21:44 阅读更多 →