能用自己的话说清量化交易和手工交易的差别,以及它适合解决什么问题;能独立安装 uv,并用它为本合集创建一个独立的虚拟环境
阅读全文 →Python 量化入门 50 篇
零基础到初级的 Python 量化入门课程,50 篇按六个阶段编排:环境与语法、NumPy/Pandas/可视化、技术指标、回测与 Backtrader、策略与组合、工程化与实盘切换。系列内统一口径:手续费双边 0.1%、无风险利率年化 2%、示例回测区间 2020-01-01 至 2024-12-31。
能用 list、dict、tuple、set 分别保存行情数据,并说清四者各自适合什么场合;能用切片取出「前 N 只」「每隔一只」「倒序」等子序列,并解释「切片是视图」的含义
阅读全文 →能用 np.array、np.zeros、np.arange、np.linspace、np.full 五种方式创建 ndarray,并说出彼此的适用场合;能读写 ndarray 的 dtype(元素类型)与 shape(形状),并解释「二维数组 = 行是股票、列是交易日」的约定
阅读全文 →你多半用过 Excel:数据一行行排、字段一列列摆,想看某天的收盘价就顺着列名找,想算一列的平均就框住那一列拉个函数。这套「行 + 列名」的组织方式之所以流行,是因为它和人类整理信息的直觉天然合拍。量化里的数据——每天的开盘价、最高价、最低价、收盘价、成交量——恰恰就是一张典型的表格。上一篇我们认识了 NumPy 的 ndarray 和「向量化」思维:一整列数字同时开方、同时求和,一行代码搞定。但 ndarray 有个不方便的地方:它只认位置、不认名字。第 0 列是什么字段?第 100 行是哪一天?全得靠你自己记在心里。真实行情是「带名字」的:这一列叫收盘价、那一行是 2024 年 6 …
阅读全文 →行情数据有一种别的数据没有的「方向感」:它沿着时间一去不回头。你问「这只股票最近 20 天平均多少钱」,其实是在时间轴上开一扇 20 天宽的窗;你问「从 4 月到 6 月涨了多少」,是在轴上切一段。上一篇我们用 DataFrame 装下了 OHLCV,但当时的日期还只是一列普通标签,没发挥出时间的威力。pandas 真正的看家本领恰恰在时间序列上:把日期变成真正的「时间索引」之后,按周按月聚合、滚动窗口计算、拿昨天比今天,全都变成一行代码。
阅读全文 →前五篇我们一直在跟数字打交道:NumPy 算数组,Pandas 读表格。你可能已经发现了,`df.head()` 打出来一大屏数字,看半天也看不出这支股票到底是在涨还是在跌。人眼对数字不敏感,但对图形极其敏感——一条曲线往上翘还是往下弯,一眼就看出来了。这就是为什么所有量化平台的第一屏都是图,而不是表格。
阅读全文 →上一篇画 K 线图时,我们代码里「偷偷」用过一次 akshare:拉了平安银行的日线数据。当时为了不喧宾夺主,只说了一句「失败就用本地模拟数据」。数据是量化的原料——没有数据,后面所有的指标计算、策略回测都是空中楼阁。所以本篇专门把 akshare 讲透:它是什么、怎么装、怎么拉数据、拉下来的字段都是什么意思,以及最重要的——怎么写才能让代码在接口变动或断网时也不至于直接崩溃。
阅读全文 →上一篇我们用 akshare 拉到了行情数据,但你有没有想过一个问题:每次跑代码都重新去网上拉一遍,又慢又不稳,万一哪天接口抽风,你的策略研究就全停摆了。成熟的做法是:**数据拉一次,洗干净,存到本地,以后随取随用**。这一步听起来不像「量化」那么酷,却是所有靠谱量化工作的地基——数据错一步,后面全错。
阅读全文 →上一篇我们把数据洗干净,分别存进了 CSV、SQLite 和 Parquet。但存起来只是「备战」,数据本身不会告诉你任何结论——「平安银行五年从 16 块涨到 17 块」这句话信息量几乎为零。量化研究真正的基本语言是两个词:**收益率**和**波动率**。收益率回答「赚了多少」,波动率回答「路上颠不颠」。这俩概念是后面所有策略、回测、风控的地基,所以本篇值得你学得慢一点。
阅读全文 →上一篇我们学会了收益率和波动率,把「每天涨跌」抽象成了可比的数字。但你很快会发现一个问题:收益率是一天一变的「毛刺信号」,天天都在上蹿下跳,盯着它做判断,人会被晃晕。实战里我们需要一种能滤掉日内噪声、看清方向的东西——这就是**均线**。打开任何一个行情软件,叠加的第一条指标几乎都是它,堪称量化世界的「第一条指标」。
阅读全文 →打开任何一个行情软件,切到日 K,副图里那个「两根线 + 一排红绿柱」的指标,十有八九就是 MACD。它被很多老股民叫作「指标之王」:不吹不黑,它未必最准,但一定最常见——你迟早会在新闻、研报和股评里遇到「MACD 金叉」「顶背离」这些词,与其到时一头雾水,不如今天就把它的底细看穿。
阅读全文 →能说清 RSI 的计算原理:平均涨幅、平均跌幅与相对强度 RS 的关系;能用 Python 手写 Wilder 平滑版 RSI,并知道它为什么和看盘软件数值一致
阅读全文 →能用 Pandas 一步算出布林带的中轨、上轨、下轨,并解释滚动标准差在其中的作用;能计算带宽(Bandwidth)与 %b(Percent B)两个衍生指标,并说清它们分别回答什么问题
阅读全文 →能写出真实波幅 TR 的三种情形定义,并用 Pandas 向量化计算 ATR;能手写 KDJ:RSV 的计算、K 与 D 的递推、J 的放大作用,并画出三线
阅读全文 →能分别说出成交量与换手率各自回答的是什么问题,以及为什么跨公司比较必须用换手率;能用「成交量 ÷ 流通股本」计算换手率,并用「成交额 ÷ 流通市值」做等价校验,说出这个教学近似的两处简化
阅读全文 →能说出 TA-Lib 与 pandas-ta 的定位差异,并根据自己的系统选对安装方案(含 Windows 装不上时的三条退路);能用指标库一次性算出 SMA、EMA、MACD、RSI、ATR 五个常用指标
阅读全文 →能说清回测的四个步骤,并指出回测能证明什么、不能证明什么;能识别未来函数(Look-ahead Bias),用 shift(1) 修正「当天信号当天交易」的错误写法
阅读全文 →能用 rolling 与比较运算写出 MA5/MA20 金叉死叉信号,并说出两个信号的准确含义;能按「信号 shift(1) 变持仓」的纪律,写出不含未来函数的策略日收益公式
阅读全文 →能用 (1 + 总收益)^(252/n) − 1 把任意区间的总收益折算成年化收益,并说出 252 与 n 各是什么;能用「日收益标准差 × √252」计算年化波动率,并按系列统一的年化 2% 无风险利率计算夏普比率
阅读全文 →能说出向量化回测的三个局限,以及什么样的策略需求必须换事件驱动;能说出事件驱动引擎的四个核心状态:逐 bar 推进、订单、持仓、现金,并在代码里指出它们各自的载体
阅读全文 →第 18 篇里,我们用 Pandas 手写了一个向量化回测;第 20 篇更是亲手搭了一个最小的事件驱动框架,一根 K 线一根 K 线地喂给策略。自己造轮子能帮你真正理解回测的运转原理,但你也一定发现了:撮合怎么写、手续费怎么扣、订单没成交怎么办……这些工程细节又琐碎又容易出错,每写一个新策略都要重新操心一遍。
阅读全文 →上一篇我们把双均线策略在 Backtrader 里跑通了,但你有没有留意到一个细节:`notify_trade` 打印的毛盈亏和净盈亏完全相等——因为那篇回测里,买卖是不花钱的。真实交易里每一次成交都要付费:券商佣金、印花税,还有更隐蔽的一项——你想按 10.00 元买,真正成交时往往已经变成了 10.01 元,这叫滑点(Slippage)。回测里不装上这两项成本,策略收益就像不加运费的商品标价,看着便宜,结账时才知道另一回事。
阅读全文 →能用十几行代码算出「换手频率 × 费率」对长期收益的复利侵蚀表;;能说出凯利公式 f* = p − (1 − p) / b 中每个符号的含义,并手算一个简单例子;
阅读全文 →能计算多资产日收益的相关性矩阵(Correlation Matrix),并说清「相关性低于 1 才有分散效果」的原因;;能用 to_period("M") 把交易日按月分组,实现「每月最后一个交易日收盘定目标权重、次日起生效」的月末再平衡,全程无未来函数;
阅读全文 →能用网格搜索穷举双均线参数组合,并画出「参数热力图」;能说清样本内(In-Sample)与样本外(Out-of-Sample)的区别,以及为什么样本外成绩才算数
阅读全文 →能安装 quantstats,并用 qs.reports.html() 把一条策略收益率序列一键变成 HTML 报告文件;能把第 18 篇双均线策略的回测结果喂给 quantstats,生成报告并导出核心指标表
阅读全文 →能说出动量效应(Momentum Effect)的直觉解释,以及它在什么环境下容易失效;能用 Pandas 实现过去 N 日收益率排序选股 / 选 ETF 的最小动量策略,并用 shift(1) 杜绝未来函数
阅读全文 →能说清均值回归的直觉,以及它成立的前提条件(震荡市 / 宽基指数 vs 趋势市);能用 z-score 度量价格偏离程度,写出「z 低于 −1.5 入场、回到 0 出场、跌破 −3 止损」的完整规则
阅读全文 →能说清网格交易的三个要素:价格区间、格距、每格金额;能用 Python 实现等差网格,并在模拟行情上跑出完整的成交记录
阅读全文 →能说清二八轮动的完整规则:比较池、动量口径、调仓频率、平手规则;能用 Python 实现月度调仓的轮动回测(严格无未来函数)
阅读全文 →能解释什么是因子(Factor)、因子暴露与因子收益;能用 Python 计算 Rank IC 序列,并解读其均值、标准差与 ICIR
阅读全文 →能写出打分法的完整流水线:去极值 → 标准化 → 加权合成 → 排序取 TopN;能实现 zscore 标准化与缩尾去极值,并说清为什么每一步都不能省
阅读全文 →能用「均线结构 + 波动率状态」搭建一个三态分类器:趋势上 / 震荡 / 趋势下;能用 Python 实现状态识别,并把状态序列画在价格图上做可视化着色
阅读全文 →能计算个股/行业相对基准的相对强弱曲线(比值线)与 RPS 排名;能实现行业动量轮动:每月选相对强度排名前 N 的行业持有
阅读全文 →能写出四类退出规则:固定百分比止损、ATR 自适应止损、移动止盈(trailing stop)、时间止损;能把风控逻辑插入事件驱动回测,验证「带刹车」与「不带刹车」的差别
阅读全文 →能用相关系数判断两个策略是「真分散」还是「假分散」;能把多个策略的日收益按权重合并成一条组合净值曲线,并算出组合的年化收益、夏普与最大回撤
阅读全文 →能用白话向别人解释平稳性,并从走势图上分辨「平稳」与「不平稳」的长相;能用 statsmodels 的 adfuller 做 ADF 检验,并正确解读 p 值(知道原假设是什么)
阅读全文 →能用白话向别人区分「相关」与「协整」,并说出为什么挑配对不能只看相关;能用 statsmodels 的 coint 检验两只资产是否存在协整关系,并能手工复现 Engle-Granger 两步法
阅读全文 →能说出金融 ML 与图像/文本任务的三点本质区别(信噪比、样本量、非平稳);能用 Pandas 批量构造滞后收益、滚动波动率、量价比值、乖离率等基础特征,并理解「特征是策略思路的量化表述」
阅读全文 →能说清普通 K-Fold 在时间序列上为什么造成数据泄漏(Data Leakage);能正确使用 sklearn 的 TimeSeriesSplit 做滚动前推验证
阅读全文 →能把单脚本项目重构成「数据 / 配置 / 策略 / 回测 / 日志」分层的模块化结构;能用 YAML 配置文件管理策略参数,实现「改参数不改代码」
阅读全文 →能实现增量更新:只拉本地缺失日期之后的数据,不重复下载;能做到幂等写库:脚本重跑一次、两次、十次,结果一致
阅读全文 →能用 logging 模块替代 print:分级、格式化、同时输出到屏幕和文件;能对策略运行中的异常分类处理:数据缺失、接口报错、下单失败各有对策
阅读全文 →能完成 Git 最小工作流:init → add → commit,并写出有信息量的提交信息;能看懂 git log / git diff,回答「这个改动是哪次提交引入的」
阅读全文 →能说清实盘与回测的五个本质差异:滑点、部分成交、断线、资金约束、行为偏差;能列出国内主流实盘通道及其特点:QMT、PTrade、掘金量化、vn.py、easytrader 类
阅读全文 →能说清纸面交易与回测的本质区别:验证目标不同(历史有效性 vs 当前系统可靠性);能实现一套最小的纸面交易系统:每日信号 → 记录委托 → 按真实行情撮合 → 记账复盘
阅读全文 →能逐条核对自己当前的量化流程,找出已经踩过或正在踩的坑;能把每条坑回指到合集里对应的篇章,知道去哪里找系统解法
阅读全文 →能用「单笔风险预算」反推仓位:账户的 1%~2% 是多少股;能实现按 ATR 定仓位的公式,并理解它为什么优于拍脑袋仓位
阅读全文 →能对照三阶段自检清单,定位自己当前的层级与短板;能获得一份按「为什么读」组织的书单与开源项目清单
阅读全文 →能独立走完策略全生命周期:目标 → 数据 → 信号 → 回测 → 评价 → 风控 → 敏感性 → 纸面计划;能把第 27(动量)、30(轮动)、35(ATR 止损)、48(风控)篇的模块组装成一个整体
阅读全文 →