简介:本资源是一份面向量化交易初学者与进阶学习者的系统性学习笔记,聚焦股票市场中的数学建模、策略开发与实操落地,解决理论难衔接代码、策略缺完整回测流程、风险控制缺乏量化工具等常见痛点。压缩包共39个文件,含16个Python脚本(覆盖数据采集、因子计算、主力资金分析、财务报表解析及自动化定时任务)、6个SQL文件(用于本地SQLite数据库建模与历史行情存储)、4个Markdown文档(含粤传媒、万山红等实战案例详解)、3个Shell脚本(支持Linux环境下的数据更新调度),辅以数据库文件、配置说明与工具脚本,整体仅822KB,轻量易部署。已有89人下载学习,笔记不仅梳理了时间序列预测、机器学习选股、VaR/ES风险度量等核心方法,更通过可运行代码+结构化目录+真实A股数据处理逻辑,提供从数据清洗、特征工程、策略回测到交易成本模拟的全链路实践框架,兼具教学性与工程参考价值。 盯盘这件事,我坚持了快两年,收获只有两个:越来越深的黑眼圈,和越来越瘪的账户。后来我给自己定了个规矩,每一次买入卖出之前,必须写清楚规则和理由,坚持三个月后我发现,自己根本写不出几条像样的规则,因为大多数决策都来自“感觉要涨了”。从那时候起,我开始认真系统地学习股票量化交易分析,边学边记,把能想到的、查到的、踩过坑的知识全部沉淀成一份学习笔记。到了年底整理资料时,我把散落在电脑、网盘和手机备忘录里的笔记、代码、回测报告统一打包,最后生成了这个“基于股票量化交易分析的学习笔记.zip”。
这份笔记不是什么躺赚策略库,而是一套从零到一的量化交易学习路径,覆盖数据获取、策略编写、回测验证、风险管理和实盘衔接。如果你有 Python 基础,想系统了解股票量化交易的完整流程,或者正打算把手头的学习资料打包归档,这篇文章里的内容安排和 zip 使用心得,都能帮你省下不少时间。
1. 为什么我会把量化学习笔记打包成 zip:被行情教育后的自救
1.1 从“凭感觉交易”到“用规则约束自己”
刚开始接触股票时,我是典型的盯盘型选手,每天打开行情软件,眼睛盯着分时图,手放在买入键上,股价一拉升就忍不住追进去,一跌又慌忙割肉。这种模式下,交易频率越高,亏损越稳定。后来我意识到问题出在决策流程上:没有规则,没有记录,没有复盘,赚了不知道为什么赚,亏了更不知道为什么亏。
量化交易的本质,恰恰是把“感觉”翻译成“规则”。我在笔记的第一章里就写了一个很简单的公式:交易系统 = 市场数据 + 明确规则 + 历史验证 + 资金管理。这四件事缺一不可。数据用来描述市场发生了什么,规则用来定义什么情况下做什么操作,历史验证用来衡量规则的有效性,资金管理则确保即使规则失效,你也不会一次性出局。
这份笔记的发心,就是这么朴素,把一次次被行情教育后的教训结构化。从最开始连“回测”是什么都不知道,到能独立跑通双均线策略、做参数敏感性分析、识别过拟合,中间花了大半年,踩的坑几乎都能单独写一篇文章。
1.2 zip 是学习资料分发和归档最靠谱的载体
有人会问,资料为什么非要打包成 zip,直接放网盘链接、开个仓库不是更省事?我在实际整理中发现,zip 在“学习笔记”这个场景里,优点非常明显。
第一,保持目录结构。量化学习资料天然地分成数据、代码、文档、回测报告好几类,用文件夹层级组织好后,zip 压缩包能原样保留这套结构。别人下载下来解压,看到的还是整齐的目录,而不是被邮件或聊天工具拆得七零八落的单文件。
第二,跨平台兼容性最好。无论对方用 Windows、macOS 还是 Linux,系统自带的工具都能解压 zip,不需要额外安装软件。相比之下,部分压缩格式在某些系统上需要专门工具,学习门槛和交流成本都高了。
第三,便于校验完整性。zip 内建了 CRC 校验,传输过程中文件损坏时,解压工具会明确报错,这能在资料分发和下载环节就发现文件是否完整。我在 5 章里会详细讲这个问题,因为“解压报错”几乎每个人都会遇到。
1.3 这份笔记适合谁,不适合谁
先说适合谁:有 Python 基础、知道 DataFrame 是什么,但对“量化策略如何从想法变成代码”这件事还没打通的人;已经有一两年盯盘经验、想用纪律约束自己的股民;以及想系统整理自己零散知识、形成一份可复现资料的学习者。
不适合谁:想找一个“跑起来就能赚钱的策略代码”的人。我见过太多人一上来就问“有没有稳赚的策略”,这是个典型的错误预期。量化能带来的是决策纪律和可验证性,不是无风险收益。笔记里所有策略都是学习用样例,重点是展示方法论,而不是承诺收益。
2. 笔记包里的完整内容清单:从基础概念到可运行代码
2.1 先看目录:这是我逼自己做的第一件事
整理笔记时,我给自己定了一个要求:所有资料必须能在 30 秒内找到。所以整个压缩包采用了非常规律的目录结构,下面是我最终定稿的版本:
quant_study_notes/ ├── 00_README.md ├── 01_基础概念/ │ ├── 股票市场术语.md │ ├── 量化交易框架.md │ └── 常见误区与预期管理.md ├── 02_数据获取/ │ ├── akshare_数据接口.py │ ├── 数据清洗与复权处理.md │ └── 本地数据存储方案.md ├── 03_策略与回测/ │ ├── 双均线策略示例.py │ ├── 动量策略示例.py │ ├── 网格交易策略.md │ └── 回测框架对比总结.md ├── 04_风险管理/ │ ├── 仓位管理方法.md │ ├── 最大回撤控制.md │ └── 交易成本模型.md ├── 05_回测报告/ │ ├── 双均线策略_沪深300.html │ ├── 动量策略_创业板.html │ └── 参数敏感性分析.csv ├── data/ │ └── 日线数据样例.csv └── requirements.txt这个结构看上去简单,但每一层都是踩过坑之后才想明白的。比如我把“风险管理”单独建目录,而不是塞在策略目录底下,因为在学习初期我完全不重视仓位和回撤,结果一个在回测里年化 40% 的策略,实际跑起来因为一次重仓回撤,就把账户打到了不能翻身的境地。
2.2 内容模块与对应的学习产出
| 目录 | 核心内容 | 学完能做什么 |
|---|---|---|
| 01_基础概念 | 术语、量化框架、常见误区 | 建立完整知识地图,不再碎片化理解 |
| 02_数据获取 | akshare/tushare 接口、清洗、复权 | 独立获取并准备干净的行情数据 |
| 03_策略与回测 | 双均线、动量、网格策略 | 把交易想法写成可运行的策略代码 |
| 04_风险管理 | 仓位、回撤、成本模型 | 给策略加上风控,面对回撤不慌张 |
| 05_回测报告 | HTML图表、参数分析 | 学会看回测指标,诊断策略问题 |
每个模块我都写了一篇核心笔记和至少一个示例代码。重要的不是代码本身,而是背后的思考过程。比如在数据获取这一章,我特意写了“复权处理”这个专题,因为很多人一开始用未复权数据计算均线,遇到除权除息,策略信号会发生虚假跳变。
2.3 环境依赖与 requirements.txt 使用经验
压缩包里最容易被人忽略的是最底下的requirements.txt,但这恰恰是“可复现”的关键。我在里面只列了核心依赖:
pandas>=2.0.0 numpy>=1.24.0 akshare>=1.12.0 matplotlib>=3.7.0 backtrader>=1.9.76.123建议创建独立的 conda 环境安装,避免污染系统 Python:
conda create -n quant python=3.10 -y conda activate quant pip install -r requirements.txt这里有个经验之谈:不要直接用pip freeze生成 requirements,那会把环境里所有无关包都导出来,造成版本地狱。手动维护一份“逻辑依赖”清单,别人拿到手安装更顺利,自己换环境也不容易出问题。
3. 股票量化策略入门:会写 Python 只是入场券
3.1 数据问题永远排在策略问题前面
很多新手拿到策略代码第一步就卡住,不是代码有问题,而是没数据。我在笔记的数据模块里,把这个问题拆成了三层:数据从哪来、数据怎么洗、数据怎么存。
数据来源,我推荐用 akshare 这类开源免费接口,因为不需要申请复杂权限,快速验证想法足够用。比如获取沪深 300 指数日线数据:
import akshare as ak df = ak.index_zh_a_hist(symbol="000300", period="daily", start_date="20180101", end_date="20241231") print(df.head())数据清洗是更重要的环节。我踩过的坑包括:接口偶尔返回空行、停牌日数据缺失、部分股票的前复权因子计算口径不一致。最基本也是最实用的清洗手段是:统一日期格式、按时间排序、剔除明显异常值、对复权方式保持一致。否则同样的策略,换一个数据源结果就能天差地别。
3.2 一个能跑通的双均线策略,它是怎么运作的
以笔记里最基础的双均线策略为例,它的逻辑极简:短期均线上穿长期均线就买入,下穿就卖出。把想法翻译成代码,核心只有几个函数:
import pandas as pd import numpy as np def load_data(filepath): df = pd.read_csv(filepath, parse_dates=["date"], index_col="date") df = df.sort_index() return df def generate_signals(df, short=5, long=20): df = df.copy() df["ma_short"] = df["close"].rolling(short).mean() df["ma_long"] = df["close"].rolling(long).mean() df["signal"] = 0 df.loc[df["ma_short"] > df["ma_long"], "signal"] = 1 df["position"] = df["signal"].diff() # 1 表示买入,-1 表示卖出 return df def backtest(df, initial_cash=100000): cash = initial_cash position = 0 for idx, row in df.iterrows(): if row["position"] == 1 and position == 0: position = cash / row["close"] cash = 0 elif row["position"] == -1 and position > 0: cash = position * row["close"] position = 0 final_value = cash + position * df["close"].iloc[-1] return final_value代码里有几个细节值得新手注意:position的生成用了diff(),这保证只有信号变化的那一天才会执行交易,而不是在整个持有期内反复成交;回测时先判断当前是否持仓,避免重复买入。这些都是实际运行时容易出错的点。
3.3 回测框架怎么选:backtrader、qbot 还是自研
笔记里我对比了三种主流路线:自研、backtrader、qbot。没有绝对的最好,只有最适合当前阶段的。
| 方案 | 优点 | 缺点 | 适合阶段 |
|---|---|---|---|
| 自研简单回测 | 完全可控,代码透明 | 交易成本和滑点都要自己实现 | 入门理解逻辑 |
| backtrader | 功能全面、社区成熟、支持多品种 | 学习曲线较陡,部分逻辑要按框架习惯写 | 系统性研究策略 |
| qbot | 集成度较高,回测实盘衔接方便 | 封装过多,出问题时排错成本高 | 有一定经验后提效 |
我个人建议入门阶段至少手写一次简单回测循环,也就是上面那个例子的升级版。这样你能真正理解每一笔交易是怎么撮合的,订单是怎么成交的。用框架时遇到诡异结果,也更容易判断是策略问题还是框架理解问题。
4. 回测曲线很好看,实盘一打就回撤:量化交易里的失真陷阱
4.1 过拟合:我的第一版策略做了四个参数,一上实盘就崩
我之前一度沉迷于“调参数大法”,把移动平均周期、止损比例、仓位阈值全部加进去,反复在历史数据上找最优组合。样本内收益被优化到非常好看,但换到最近一年的样本外数据上,策略曲线几乎一路向下。这是我第一次正面遭遇“过拟合”。
过拟合有三个典型症状:参数在很小范围内变动,收益就剧烈波动;策略逻辑复杂到无法用一两句话说清;样本外测试结果远差于样本内。笔记里给出的解决思路是“参数高原”,也就是寻找那些在一定范围内表现都比较稳定的参数区域,而不是找一个唯一的最优点。一个优秀的策略应该对参数有容忍度,而不是像一把钥匙只开一把锁。
4.2 幸存者偏差和未来函数:回测报告里最隐蔽的两个 Bug
这两个问题比过拟合更隐蔽,因为它们不报错,但会让回测结果严重虚高。幸存者偏差,简单说就是数据集里只保留了现在还活着的股票,那些已经退市或者暴跌到没人关注的数据被剔除了。用这样的数据回测,收益率天然偏高。
未来函数则更危险,指计算信号时用到了当时不可能知道的信息。比如某些技术指标用的是当天收盘价,而策略假设当天开盘价就能成交,这就是典型的未来函数。时间序列回测里尤其要小心“数据泄露”。我的经验是:代码里所有用到未来数据的逻辑,都要单独检查一遍,确保信号在 t 时刻只能依赖 t 时刻及之前的信息。
4.3 成本、滑点和涨跌停:为什么实际收益总比回测低
即使没有过拟合和数据泄露,回测与实盘之间仍有巨大鸿沟,主要来自交易成本和撮合假设。笔记里我专门建了一个成本模型:A股单边佣金约万2.5,卖出还要交印花税千分之0.5(这里以当时笔记记录的规则为准,市场政策可能调整),再加上滑点,一次完整买卖来回要吃掉约0.2%到0.5%。
如果一个策略年交易 100 次,光成本就能吃掉 20% 以上的收益。这就是为什么很多在回测里看起来很好的“短线策略”,实盘一跑就亏钱。正确做法是回测时把成本参数设置得比实际更高一些,给自己留出安全边际。宁可回测保守,不要回测激进。
5. 解压笔记 zip 时踩过的坑:这些报错几乎人人都遇到过
5.1 “file is not a zip file” 不是文件坏了,而是文件没有被识别成 zip
我分享资料时,经常收到朋友截图说“解压报错:file is not a zip file”。这个问题我在笔记里专门写了一个章节。最常见的原因是:下载过程中文件被拦截、被截断,或者压缩包实际不是 zip 而是其他格式,扩展名写成了 zip。
排查思路其实非常简单,在 Linux 和 macOS 下用file命令看文件真实类型:
file quantization_notes.zip输出会显示这个文件的真实格式。如果显示HTML document,说明下载指向了一个错误页面;如果显示Zip archive data,那文件本身没问题。下一步用测试命令校验完整性:
unzip -t quantization_notes.zipunzip -t会逐个检查文件并校验 CRC。如果输出里出现error或者bad CRC,说明文件在传输或存储时损坏,需要重新下载。
5.2 分卷 zip、EOCD 丢失和开发工具的“锟斤拷”
另一个高频问题是分卷压缩包。某些场景下大文件会被拆成.zip、.z01、.z02等多个分卷,如果只收到一个主文件,或者文件名被聊天工具乱改,解压就会失败。Linux 下可以先把分卷合并成单文件,再正常解压:
zip -s 0 split.zip --out merged.zip unzip merged.zip--out merged.zip指定合并后的文件名,-s 0表示把分卷合并成单卷。这里要注意,合并后生成的是新文件,原分卷还需要保留,直到确认解压成功。
还有一种报错是could not find EOCD。EOCD 是 zip 文件末尾的中央目录结束标记,相当于整个压缩包的索引表。如果下载中断、磁盘空间不足,导致文件最后一段没有写进去,就会报这个错。处理办法只有重新获取完整文件,或者用工具尝试修复,但成功率一般,远不如重新下载靠谱。
开发过程中还可能遇到文件名乱码,尤其是从 Windows 平台打出来的 zip,在 Linux 或 macOS 上解压,中文文件名经常显示成“锟斤拷”这类符号。这是因为文件名的编码方式不同,Windows 常用 GBK,Linux 默认 UTF-8。可以用unzip -O指定编码解压:
unzip -O gbk quantization_notes.zipmacOS 自带的ditto或图形工具对编码的处理有时也不一致,遇到乱码时多用命令行工具能省心很多。
5.3 加密 zip 忘了密码:只讨论你有权访问的文件
学习笔记里有部分回测结果和交易记录,我习惯打包时加密码。有一次换了电脑,打开压缩包发现密码怎么都想不起来,那段时间我研究过“zip 密码移除”和“zip 密码恢复”的可能性,这里做一个合法场景的说明:只针对你本人拥有合法使用权的文件。
恢复思路通常分三类:字典攻击(用常见密码组合逐一尝试)、掩码攻击(我记得部分密码片段,其他位用规则补齐)、暴力枚举(当密码较短时)。每种方法都需要软件支持,执行时间取决于密码长度和复杂度。我在实际处理中,往往 5 个字符以内的短密码还能短时间内恢复,一旦超过 8 位且混合大小写和符号,等待时间就不现实了,不如直接找到原始文件重新打一个包。
这是为了提醒大家,加密固然是保护隐私的好习惯,但密码一定要交给密码管理器托管。靠大脑记忆不靠谱,这个坑我一个人踩就够了。
6. 把这份笔记变成自己的策略:一条可以直接落地的验证路径
6.1 第一步不是优化参数,而是跑通全链路
很多人拿到学习资料后的第一反应是改参数、调逻辑,试图让回测曲线更好看。我的建议恰恰相反:先照着原样把整条链路跑通,从数据获取、信号生成到回测输出,中间不跳过任何一步。只有全链路顺畅,你才有底气去做后续改动。
跑通之后,把每次改动记录在笔记里。我个人的习惯是给每个策略单独建一个文件,记录改动时间、改动参数、回测结果和样本外表现。这会让你的学习轨迹变得可复查,而不是越改越糊涂。
6.2 小资金实盘验证检查清单
策略经过回测和样本外验证后,可以进入小资金验证阶段。我整理了一份检查清单,放在笔记的 04_风险管理 目录里:
| 验证项 | 建议关注点 | 原因 |
|---|---|---|
| 年化收益率 | 不要只看一个数字 | 要结合最大回撤看,收益回撤比更可靠 |
| 最大回撤 | 控制在可承受范围内 | 回撤超过心理承受线,人容易手动干预策略 |
| 夏普比率 | 数值越高不代表越稳 | 结合策略逻辑判断收益来源 |
| 真实交易日志 | 连续记录2-4周 | 情绪干扰是最隐蔽的风险 |
| 成本vs预期 | 实际滑点是否接近回测假设 | 偏差过大时要调整成本参数 |
我自己的经验是,模拟盘和极度轻仓至少跑一个月,期间只做一件事:验证“信号出来时我敢不敢按规则执行”。这个看起来简单,实际执行时会有各种心理干扰,而纪律恰恰是量化交易能否发挥作用的底层基础。
6.3 更远的方向:期货量化、多因子、机器学习都能顺藤摸瓜
这份笔记的终点不是一套固定的策略,而是一条可以不断延伸的学习路径。做完股票日线级别的策略后,可以考虑去接触期货量化、多因子模型,甚至用机器学习做特征工程和预测。每个方向都会把你带回“数据、规则、验证、风控”这四个基本框架里,只是复杂度递增。
从学习笔记的角度看,最有价值的不是你最终学会了哪些指标、哪些模型,而是你建立了一套属于自己的研究流程:想法产生、代码实现、数据验证、风险控制、实盘反馈。把这套流程内化之后,再遇到任何新技术或者新策略,都能快速上手,而不是停留在收藏一堆代码却无从下手的阶段。
最后分享一个我自己的习惯:每隔几个月,我会把这段时间新增的笔记和心得重新打包归档,文件名加上日期。一方面是为了备份,另一方面是一次回顾——看到自己几个月前的判断有哪些被市场验证、哪些被推翻,这种复盘带来的成长,比任何一两次交易赚到的钱都更有意义。
本文还有配套的精品资源,点击获取