十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

《量化投资:以Python为工具》课后习题完整答案与代码资料包

《量化投资:以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章算日收益率的代码换个数据源就是一份能直接用的收益率计算脚本策略回测框架换个股票、调几个参数就能验证你自己的交易想法。这也是我整理这套资料最希望看到的用法——答案本身只是中点把这个过程中练出来的数据处理能力和策略思维用到自己的项目里才是终点。本文还有配套的精品资源点击获取
返回列表