深圳融克迪特科技有限公司 Logo,金融科技,量化交易,软件开发

深圳融克迪特科技有限公司

RONG CREDIT TECHNOLOGY CO., LTD.

基础入门

【vectorbt 系列 第3讲】计算5日均线

本讲在最小回测数据上生成第一列 5 日均线,围绕滚动窗口、前几行空值、手工核验和结果解读展开。目标是让入门者先把最基础的指标计算看懂,为后续买卖信号和向量化回测打下中间层。

2026-04-23 智铨研究 阅读时长 8 分钟

目录

vectorbt · 入门短课

  1. 第 1 讲【vectorbt 系列 第1讲】安装与首组价格序列构建:零依赖最小可验证回测起点
  2. 第 2 讲【vectorbt 系列 第2讲】准备最小回测数据
  3. 第 3 讲【vectorbt 系列 第3讲】计算5日均线
  4. 第 4 讲【vectorbt 系列 第4讲】构造买入信号
  5. 第 5 讲【vectorbt 系列 第5讲】构造卖出信号
  6. 第 6 讲【vectorbt 系列 第6讲】跑第一轮向量化回测
  7. 第 7 讲【vectorbt 系列 第7讲】查看收益回撤和交易次数
  8. 第 8 讲【vectorbt 系列 第8讲】比较5日和10日窗口

一、为什么 vectorbt 里的第一列指标也值得单独讲一讲

很多人学回测框架时,最容易忽略的一件事就是中间层。也就是从原始价格到买卖信号之间,实际上还隔着一层很关键的指标层。你当然可以直接跟着教程一路往下写,看起来很快就能得到一条信号列,甚至很快就能跑出第一张收益曲线。但如果你没有先把第一列指标真正看明白,后面一旦结果不对,很容易就搞不清问题出在信号规则、回测配置,还是一开始的指标本身就没准备好。

这就是为什么第 3 讲即便只做一列 5 日均线,也完全值得单独拿出来。它的重点并不在于这个指标有多复杂,而在于你第一次开始真正从“准备好的回测表”走向“表上的第一列衍生结果”。这个过程看似简单,实际上意义非常大,因为它会帮你建立一种后面反复要用到的顺序:先确认输入,再生成指标,再解释指标,最后才进入信号和回测。

对 vectorbt 入门来说,这种层层推进非常重要。因为它本身就是一个很适合把问题展开成多个层次的框架。只要你在最开始就跳过这些层次,后面复杂度会一下子压上来,理解成本也会高很多。

二、为什么 5 日均线是 vectorbt 短课里非常合适的第一列指标

第 3 讲和 AkShare 收尾那一讲一样,都选择了 5 日均线。原因并不是图省事,而是因为它确实特别适合作为“第一列指标”。首先,它只依赖收盘价这一列输入,因此你不需要同时处理很多字段。其次,它的结果很容易看懂。价格快涨快跌时,均线会更平滑、反应更慢,这些现象用眼睛就能观察到。再次,它后面可以自然接到最常见的信号逻辑,比如价格是否站上均线、短均线是否上穿长均线等。

也就是说,5 日均线这个选择同时满足了三个条件:计算简单、结果可解释、后续可继续扩展。对入门者来说,这种指标非常重要。因为它让你第一次做指标时,不是只会把 API 拼起来,而是真的能把结果和原始价格的关系看清楚。只要这一步先立住,后面无论换成 10 日、20 日均线,还是更复杂的滚动指标,你心里都会更有底。

三、开始计算前,为什么还要再确认一次输入顺序和数值状态

很多人到这一讲时会觉得,前面都已经做成最小回测表了,应该可以直接算均线。实际上,真正稳的做法仍然是先回头确认一次输入。因为滚动计算最怕两件事:顺序不对,或者输入列看起来像数字、其实还没真正转成数值。只要这两层没先守住,均线结果就算生成了,也不一定可信。

特别是在 vectorbt 这种后面还要继续把指标接入信号和回测的框架里,这一步更不能省。因为如果均线从这里就已经出了偏差,后面所有基于它的布尔判断都会跟着歪掉。到了那时,你看到的只是“信号不对劲”,很难第一时间意识到问题其实发生在输入准备层。

所以第 3 讲看似只是再检查一次,其实是在建立很重要的工作纪律:每次从一层过渡到下一层,先确认前一层是否真的已经处于可继续使用的状态。这种习惯以后会非常值钱。

四、滚动均线最该先理解的,不是函数名,而是窗口语义

很多入门者一看到 rolling(window=5).mean(),会先去记函数长什么样。对短期来说当然有用,但真正更重要的,其实是理解窗口语义。所谓 5 日均线,不是说“程序帮我算了一列平均值”,而是说:从当前这一行开始往前看,总共要拿到连续的 5 个样本,凑成一个窗口后才给出结果。

这层理解特别重要,因为它决定了你怎么看待前几行的空值,也决定了你以后面对所有滚动指标时会不会误判结果。第 1 到第 4 行没有足够的 5 个样本,所以它们没有完整均线值。这不是程序偷懒,而是窗口定义本身如此。只要你先把这个语义接受了,后面做 10 日均线、滚动收益、滚动波动率时,很多现象都会立刻变得顺理成章。

对回测学习来说,这一点比会背一个函数名更重要。因为真正能帮你减少误解的,从来不是记住语法,而是记住结果背后的生成方式。

五、为什么一定要把close和ma_5并排看,而不是只盯着新列

计算出第一列均线后,很多人会自然地把注意力集中到 ma_5 上,觉得既然是新指标,当然看它就够了。其实这样很容易把指标再次变成黑箱。更稳的方式,是始终把原始价格列和均线列并排看。因为均线不是凭空出现的新序列,而是对原始价格的一种平滑表达。你只有在并排视图里,才能真正看到它的意义。

当你把日期、收盘价和均线放在一起观察时,会很直观地看到几个现象:均线通常比价格更平滑,价格突然变化时均线会滞后几步,前 4 行空值只是因为窗口还没凑满。对新手来说,这种并排观察非常值钱。因为它会把“程序结果”重新变回“你可以逐行解释的东西”。

这件事在 vectorbt 入门里尤为关键。因为后面你一旦开始构造买卖信号,信号其实就是在这两列之间做逻辑判断。若现在连这两列的关系都没看清,后面布尔信号就很容易沦为一串真假值,而不是你真正理解的交易条件。

六、为什么手工核第一个完整均线值,是这一讲最值的检查动作

这一讲最推荐的一个小动作,其实不是继续加别的指标,而是手工核一次第一个有效均线值。因为对 5 日均线来说,第 5 行是第一条完整结果。只要你把前 5 个收盘价拿出来手工平均,再和程序给出的 ma_5 对照一下,就能非常直接地确认:这一列不是神秘结果,而是你完全能复原和解释的计算。

这个动作的意义比看起来大很多。因为它会让你建立一种非常关键的信心:以后你面对的指标,不一定都要完全靠直觉相信,它们至少在基础层面上都是可以被抽样验证的。对入门者来说,这种“我能自己核一条”的感觉特别重要。它会让你后面继续往上走时,不再只是依赖框架,而是真的开始掌握结果的来源。

在量化学习里,能手工核清第一条结果,比多抄几个 API 通常更有价值。因为它建立的是理解,而不只是执行。

七、为什么第 3 讲还故意停在指标层,不急着进入回测

对很多人来说,既然是在学 vectorbt,当然最想尽快跑回测。这种心情完全能理解。但第 3 讲故意停在指标层,其实是很有必要的。因为回测本身已经是一个更高层次的动作,它默认你前面的价格列、指标列和后续信号逻辑至少已经有一层清晰关系。如果这个时候你还没把 closema_5 看明白,就直接往回测推进,后面只要有任何异常,排错会非常困难。

所以这一讲的克制,是在主动给后面省麻烦。先让输入和第一列指标彻底稳定,再进入买入信号,再进入卖出信号,最后才回到回测。vectorbt 这种向量化框架本来就适合分层推进,最怕的是自己为了快,把这些层次一口气糊成一团。

只要把这一点接受了,你会发现这个系列的节奏其实非常合理:每一讲都只新增一层可解释的东西,而不是把大量逻辑同时压上来。

八、这一讲真正建立的,是 vectorbt 系列里的第一个“中间变量”意识

如果说第 2 讲建立的是底表意识,那么第 3 讲建立的,就是中间变量意识。也就是你开始知道:回测不是从价格直接跳到收益曲线,中间往往还会有一些非常关键的衍生列。这些列本身就值得被单独看、单独理解、单独验证。5 日均线正是这个系列里的第一个中间变量。

这个意识非常重要。因为后面你不管是做多条均线、做布尔信号还是做更复杂条件,本质上都是在往表里继续添加新的中间层。只要你已经习惯了“新列生成后先看懂,再往下走”,后面的复杂度就会可控很多。反过来,如果一开始就把所有中间层都跳过,最后结果看起来再多,也很难真正说清楚每一步发生了什么。

向量化回测最大的好处之一,本来就是所有中间结果都可以被留在表里供你观察。第 3 讲正是在帮你把这个好处用起来。

九、为什么第一列指标一旦算出来,就值得顺手检查它和原价格的相对位置

5 日均线算出来以后,很多人会满足于“这列已经有数字了”,然后立刻往下进入信号判断。更稳的做法,是顺手看一眼均线相对价格的大致位置。也就是说,当前价格是在均线之上、之下,还是围绕它附近波动。这个观察看起来很朴素,却特别有帮助,因为后面买入和卖出信号本质上就是围绕这种相对关系来写的。

只要现在先看过一次这种相对位置,后面信号列出来时,你就不会觉得真假值是凭空产生的,而会知道它们只是把眼前这层关系翻译成了布尔判断。对入门者来说,这一步会大幅降低“信号像黑箱一样出现”的感觉,也能让指标层和信号层之间的连接更清楚。

所以,第 3 讲虽然只做第一列指标,但已经完全值得你开始把注意力从“列有没有算出来”推进到“这列和原价格是什么关系”。这是理解链路向前走的一大步。

十、为什么这一步也在帮你建立对滚动空值的正常预期

第一个 5 日均线值出现之前,前面几行会自然为空。这一点对学滚动计算的人来说非常关键,因为它会帮助你建立一种正常预期:只要窗口还没凑满,结果为空是定义的一部分,不是框架出错。这个预期越早建立,后面你面对 10 日均线、滚动波动率或者别的窗口统计时,就越不会因为前几行出现 NaN 而慌张。

这也是为什么第 3 讲特别值得停下来观察前 4 行。它们看似“没结果”,其实正好在告诉你窗口语义是怎么起作用的。很多初学者如果跳过这一层,后面一看到滚动列前面有空值,就会重新怀疑代码、怀疑数据,浪费很多时间。现在先把这件事讲透,后面会轻松很多。

十一、这一讲做到什么程度,才算真正看懂了第一列指标

第 3 讲真正完成的标志,不只是你会写出那行滚动均线代码,而是你已经能解释:为什么前几行为空、为什么第 5 行是第一个完整值、为什么均线通常比价格更平滑,以及为什么后面信号判断本质上是在比较 closema_5 的相对关系。只要这些问题你都已经能讲清楚,这一讲就不再只是 API 练习,而是真正把第一个中间变量变成了自己理解过的结果层。

更重要的是,你已经开始真正体验到 vectorbt 这类框架的一个核心优势:中间层不是被隐藏起来的,而是可以被你逐列留下、逐列验证、逐列解释。只要这种使用习惯先建立,后面不管是多条均线、更多参数还是更复杂信号,都会更容易被你拆解和看懂,而不是重新变回一团黑箱。

十二、总结

这一讲的核心,不在于会写 rolling(window=5).mean(),而在于你第一次真正把 vectorbt 的底表推进成了一张带有中间指标列的工作表。通过先确认输入、理解窗口语义、并排观察价格和均线、再手工核对第一条有效结果,你已经把“第一列指标”从一行代码,变成了一个自己能解释、也能继续往下使用的中间层。只要这一步走稳,后面的买卖信号和回测都会明显更好理解。

十三、系列衔接

本讲是《vectorbt回测入门短课》的第 3 讲,当前主题是《计算 5 日均线》。上一讲已经把最小回测表准备好,这一讲则把第一列真正可用的指标放到了表上。下一讲会顺势进入《构造买入信号》,第一次把价格和均线之间的关系转成布尔判断。

十四、风险揭示与免责声明

风险揭示与免责声明

本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。

本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。

市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。

读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。