01学完这一课,你能做到什么
假设你已经有一组按日期排列的 OHLC 数据。你可以用它计算、MACD、RSI、ATR 或 K 线形态,但“算出一个数组”还不等于已经完成:你仍然要处理时间推进、信号、订单、资金和成交。
学完这一课,你应该能:
- 说清 TA-Lib 与 Backtrader 的职责边界;
- 用最小数组核对 SMA、、RSI 和 的输入、输出与空值;
- 理解指标计算为什么适合批量独立完成;
- 把 形态作为候选条件,再设计趋势过滤和确认规则;
- 输出一张带参数、单位、有效起点和时间戳的特征表。
先记住:工具能把计算做得更方便,但不会替你证明交易信号有效。
一句话记住算出指标,不等于完成回测。
02两个工具分别负责什么
可以把两个工具想成流水线上的不同工位。
Backtrader 负责回测:按时间推进 K 线,处理策略、订单、持仓、资金和分析器。TA-Lib 负责把输入数组转换成技术指标或 K 线形态结果。更换指标计算库,不等于更换成交规则和账户管理。
TA-Lib 的价值主要有三点:底层计算效率、指标和形态覆盖较广、输入与输出相对解耦。官方 Python 封装提供大量指标和形态函数,输出数组通常会在前期保留一段空值,因为指标需要预热数据。
以某个版本为例,共有 158 个函数,其中 61 个是形态函数。实际数量会随版本和安装内容变化,可以用 talib.get_functions() 与 talib.get_function_groups() 查看。函数更多,只表示可用工具更多,不代表信号更可靠。,
把数组变成指标
输入价格或 OHLC 数组,输出指标和形态结果。
把时间变成交易过程
推进 K 线,处理订单、持仓、资金和报告。
一句话记住指标库算指标,回测引擎管交易过程。
03为什么把批量计算单独做
假设你要研究数千只股票、二十多个指标和多套参数。如果每次筛选、建模或回测都重新计算同一批指标,时间和排错成本都会增加。把指标计算提前独立完成,同一份结果就可以供选股、机器学习、报告和回测复用。
示例使用 600519 在 2024–2025 年的两年数据,重复 1,000 次计算 20 日 SMA。在不同的机器和环境里,这样做可能快 40 倍,也可能快 70 多倍。没有完整的测试代码和硬件条件,这些数字都不能当成统一的加速比,更不能说成“整个系统快了 40 倍”——指标计算只是系统里的一环。对比中还可能只是 Pandas 均线计算,不应未经确认就说成完整 Backtrader 引擎性能比较。
公平测试要统一数据、输出精度、预热、重复次数和计时范围,并把数据库读取、数组转换和图表开销分开。先确认结果一致,再讨论速度。少量数据时,初始化成本可能比计算本身更显著。
- 1统一输入同一标的、日期和数组
- 2统一输出核对空值和数值精度
- 3重复计时记录次数与环境
- 4拆分开销区分读取、计算和绘图
- 5先验算再比较速度不能替代正确性
一句话记住基准测试的数字不能自动代表全系统速度。
04从最小数据开始准备环境
数据规模越大,越应该先用小样本跑通。项目曾扩充 数据,并按当时口径记录约七千个标的、约 1,900 万条记录;学习一个指标时,不需要立刻下载全市场。先取短区间验证,再增量补齐,更容易定位问题。
MySQL 是数据依赖,不是计算 TA-Lib 的必要条件。你可以先用小数组或已验证的本地文件,确认指标正确后再接数据库。如果要计算 60 日指标,数据还要覆盖足够的预热期,不能只给一个月就期待完整输出。
安装步骤取决于操作系统、Python 版本、包版本和可用安装包。底层依赖可能让安装失败,不能只凭一个包名就保证所有环境都能安装。安装后的验收很简单:成功导入、查询版本、对小样本完成一次计算。
一个曾经能运行的框架,即使停止维护,也不代表现在或以后一定安全可用。还要评估依赖兼容、缺陷修复和安全维护。
- 1小数组先核对公式和空值
- 2本地文件验证日期和字段对齐
- 3数据库再接 MySQL 或 data loader
- 4增量补齐最后扩大标的和日期范围
一句话记住先跑通最小样本,再扩大数据规模。
05数组进,指标数组出
不同指标需要不同输入。收盘价可以计算某些均线、MACD 和 RSI;ATR 需要 high、low、close;K 线形态通常需要 open、high、low、close。所有数组都要同长度、按时间排序。
以收盘数组 [10, 11, 12, 13, 14, 15] 计算 5 日 SMA。前四个位置没有足够数据,应保留空值;第五个位置是:
(10 + 11 + 12 + 13 + 14) ÷ 5 = 60 ÷ 5 = 12第六个位置是:
(11 + 12 + 13 + 14 + 15) ÷ 5 = 65 ÷ 5 = 13不要为了画出完整曲线,把前期空值填成未来均值。还要核对:返回数组是否与日期一一对齐;多输出函数的每个数组含义是否正确;价格是否使用同一口径;空值是否被错误填成零;浮点精度和不同库的初始化、平滑约定是否一致。
MACD 要明确 DIF、信号线和柱值倍率; 要核对周期、平滑和初始值;ATR 是原始价格单位的平均真实波幅,不直接表示百分比,也不直接表示涨跌方向。
[10,11,12,13,14]÷5=12;[11,12,13,14,15]÷5=13
前四个位置没有足够数据,保留空值。
一句话记住空值是预热信息,不是需要抹掉的错误。
06指标类别怎样服务研究
技术指标可以按观察对象分成几类:均线和重叠研究描述平滑价格与趋势位置;描述一段时间的涨跌强度及变化;波动描述价格变化幅度或真实波幅;成交量描述活跃度与关系;K 线形态描述单根或多根 OHLC 组合;统计指标描述相关、标准差和回归等关系。
例如 MA5 > MA10 > MA20 > MA60 可以作为多头排列特征,但不能只凭这个顺序断言所有投资者都盈利。波动大不自动等于看跌,波动小也不等于安全;放量不等于知道买方的真实身份;形态命中不等于未来。
这些特征可以交给 XGBoost 等预测模型。特征表应做到“一行对应一个证券、一个时点”,标签则定义为随后区间的结果。未来收益不能倒灌进特征,否则模型看似准确,实际是时间泄漏。计算库与模型解耦,也更容易逐字段复查。
均线/趋势
平滑价格,描述位置。
动量/波动
看涨跌强度和价格幅度。
量价/形态/统计
描述活跃度、OHLC 关系或统计关系。
一句话记住特征只能描述过去,不能偷看未来标签。
07认识 K 线形态接口
十字星、锤子线、早晨之星等形态,常见 TA-Lib 函数名以 CDL 开头。例如 CDLHAMMER、CDLDOJI、CDLENGULFING 和 CDLMORNINGSTAR。具体输入和判定条件要按函数文档核对。
锤子线通常用小实体、较长下影线等关系描述,但并非所有长下影线都满足某个库的定义。形态结果是价格形状的分类,不是“主力在底部承接”的证据。收盘前 K 线还没完成,形态结果可能改变。
可以把锤子线与 60 日均线之上、MACD 金叉等条件组合,作为增加确认的研究方案。但新增条件可能减少交易和样本,必须和只使用形态的基线做对照。不要从事后完整 K 线倒推当时一定能在最低点买入;真实执行还要考虑涨跌停、和卖出约束。
出现形态候选
某根已完成 K 线满足一组价格关系。
下一步一定上涨
还要检查环境、样本、成交和退出规则。
一句话记住K 线形态是候选条件,不是收益保证。
形态候选过滤实验
切换趋势、震荡和下跌样本,比较只认锤子线、叠加 60 日均线过滤,以及再等次日确认后的候选、成交和回撤。
收盘仍在 60 日均线之上,才把锤子线升级为可研究信号。
08动手任务与验收
按下面步骤验收你的指标流程:
- 用六个收盘价核对 5 日 SMA,保留前四个空值;
- 对同一小样本用两套实现计算 SMA,记录差异;如果 EMA 或 RSI 不一致,先查平滑和预热;
- 选一段可信 OHLC 数据,识别锤子、十字星和吞没,回看命中日及前后价格,但不要把后续走势当成当时可用信号;
- 设计 1,000 次 SMA20 计时实验,报告输入长度、环境、计时范围和输出一致性;没有真正运行时,只写实验设计;
- 输出一张特征表,注明指标参数、单位、有效起点和时间戳,再说明如何交给回测或模型。
验收标准是:结果可核对,字段可追溯,空值有理由。TA-Lib 是计算工具,Backtrader 是回测流程;把职责分开,你的量化工具更容易替换组件和定位错误。
一句话记住验收看可核对、可追溯和空值理由。
4 道小题
全部答对,这一课就算真正读懂了。答错了会告诉你为什么。
这一课,浓缩成一张卡
学完可以保存或分享给朋友。保存成图片的功能会在下一版加上。
计算和交易各自独立,便于复用指标、核对输入,也便于替换组件。
- 指标数组不等于成交
- 预热空值要保留
- 形态需要对照验证
记住这 5 句话
- 01TA-Lib 负责指标和形态计算,Backtrader 负责事件驱动回测、订单、持仓和资金。
- 02批量计算可供选股、模型、报告和回测复用,但局部基准测试不能代表全系统加速。
- 03指标输入必须对齐日期和价格口径,预热期空值要保留并解释。
- 04均线、动量、波动、量价、形态和统计特征各自描述不同对象,不能直接当成收益保证。
- 05K 线形态要在收盘后确认,并通过趋势过滤、成交假设和对照实验检查。
完成这一课
读完讲义、动手做一次实验、答对小题,这一课就算学完了。
- 读完讲义
- 完成一次形态候选过滤实验
- 通过随堂自测
实验数据AI+金融投资训练营教学样本。固定合成趋势、震荡与下跌路径,并植入可识别的锤子线。按收盘确认、次日执行、100 股整手和简化交易成本模拟。
固定教学样本只用于解释量化研究方法,不代表任何真实标的未来表现,也不构成投资建议。