基础入门
本讲在收益率结果上加入 if 条件判断,筛出上涨交易日并解释日期与收益率为何需要错位对应,帮助读者从“把结果算出来”进一步走向“按规则筛选样本”。
前几讲里,你已经会把价格装进容器、会用循环批量算收益率、也会把这段逻辑封装成函数。到这里,一个非常自然的问题就出现了:结果已经算出来了,接下来要怎么从里面挑出自己关心的部分?这正是条件判断真正发挥作用的地方。它让你的脚本不再只是机械生成一串结果,而开始根据规则去筛选样本。
对量化入门来说,这一步特别关键。因为真实分析几乎很少停留在“我把所有值都算出来了”,而往往会继续问:哪些天上涨、哪些天下跌、哪些天涨幅特别大、哪些记录值得单独再看。条件判断就是这种“按规则挑样本”的最基础工具。你先把最简单的上涨交易日筛选写稳,后面很多更复杂的筛选逻辑都会自然建立在同样的骨架之上。
所以第 5 讲真正开始的,不只是 if 语法,而是一种新动作:把已经算出来的结果,继续拿来做有目的的筛选。这个动作是从“计算”走向“分析”的第一步。
条件判断本身很通用,理论上你可以马上写各种复合条件,比如涨幅超过 2%、成交量也放大、并且前一日还下跌之类的规则。但对入门阶段来说,这种上来就加复杂条件的做法并不稳。因为当前真正需要先吃透的,是“结果和条件如何对应”“筛出来的样本如何和原日期重新对齐”。上涨交易日刚好非常适合作为第一道门槛练习。
它的好处在于判断规则极其直观:收益率大于 0,就表示上涨。这个规则几乎不需要额外业务解释,肉眼也容易核对。你不会被条件本身分散注意力,而能把更多精力放在筛选流程上。只要这条最基础的规则先走通,后面再扩成更细的条件会自然很多。
换句话说,第 5 讲当前最重要的不是“会写很多种条件”,而是先把最简单、最可验证的一种筛选形式写稳。这个起点看似朴素,但非常有教学价值。
很多初学者写代码时,容易一边算收益率,一边立刻判断上涨下跌,把所有事情揉在同一个循环里。短期看似省事,但从理解路径上讲,并不利于建立清晰结构。因为收益率计算和上涨日筛选,其实是两个不同层次的动作。前者负责把价格变成结果,后者负责在结果之上再做选择。
把这两步分开理解非常重要。这样一来,你会更清楚哪些逻辑属于“原始计算层”,哪些逻辑属于“规则筛选层”。以后你想改筛选口径时,不用动收益率函数;你想改收益率算法时,也不必重新写筛选逻辑。对代码结构和思考路径来说,这种分层都很有帮助。
因此,第 5 讲虽然是在讲条件判断,但其实也在帮你进一步强化一个编程意识:先得到稳定结果,再基于结果做判断。只要这个顺序建立起来,后面脚本会清楚很多,不容易一开始就搅成一团。
筛上涨交易日时,一个最容易让人写乱的地方就是日期对应关系。收益率列表本来就比价格少一条,而它的第一个值对应的不是第一天,而是第二天相对第一天的变化。也就是说,当你在看 returns[0] 时,真正对应的日期应该是 dates[1],而不是 dates[0]。这个错位关系,是第 5 讲里最需要尽早想清楚的细节。
如果这一层没想明白,条件判断语法哪怕写对了,筛出来的日期也仍然可能整体错位。更麻烦的是,这种错误有时不会直接报错,而是悄悄产生一份“看起来合理、其实全错一位”的结果。对入门者来说,这种错比语法报错更危险,因为你不一定立刻意识到问题出在哪里。
所以第 5 讲真正难的地方,不是 if current_return > 0 这一句,而是如何让“结果序列”和“日期序列”重新对齐。只要这个逻辑先建立起来,后面很多类似的筛选都会稳很多。
很多人第一次写条件判断时,会在条件成立时直接 print(),看到输出出现就觉得已经完成任务了。这个阶段当然有助于理解筛选逻辑,但如果一直停留在命中就打印,后面就很难继续做统计和复用。更像真正分析流程的做法,是把命中的结果先保存下来,形成一个可以继续处理的新列表。
这就是为什么第 5 讲里专门保留了 up_days 这样的容器。它的意义不只是“把日期装起来”,而是在帮你形成一种结果分层意识。原始价格是第一层,收益率列表是第二层,上涨交易日列表则是第三层筛选结果。只要这类结构一层层长出来,后面不管你要统计上涨天数,还是把上涨日和收益率一起输出,都会轻松很多。
因此,第 5 讲里“筛中后先保存”这个动作非常值得养成。它会让你的代码更像一个可继续延展的流程,而不是一次性把结果打印给自己看完就结束。
表面上看,第 5 讲是在筛上涨交易日;更深一层,它其实是在训练你如何从一组结果里挑出满足某个规则的子集。这种能力在量化练习里非常核心。因为以后你不只是筛上涨日,还可能筛波动过大的日子、筛连续上涨的片段、筛某个信号触发的样本。它们的表面规则不同,但底层动作非常相似:给一组结果加一个条件,把满足条件的部分提出来。
因此,学会筛上涨日的意义,不在于这个规则本身有多高级,而在于你已经掌握了一种可以不断复用的子集抽取思路。只要这层思路开始稳下来,后面很多看起来不同的筛选题,其实都只是把条件换一换而已。对入门者来说,能够意识到这一点非常重要,因为它会显著降低你面对新需求时的紧张感。
你会开始明白,不是每次都要重学一遍,而是很多任务本来就在共享同一种筛选骨架。第 5 讲正是在帮你搭这根骨架。
条件判断一旦写出来,你手上就不再只是一串冷冰冰的收益率,而开始出现一组带意义的样本子集。比如某一天被归入上涨日,其含义就比单独看一个正收益数字更清楚。这种从数值到解释的转变,其实非常值得在入门阶段就注意到。因为它意味着你开始不只是“有结果”,而是在给结果加标签、加解释。
这件事对量化分析尤其重要。很多工作并不要求你把所有数字背下来,而要求你能说清楚哪些记录为什么值得关注。上涨交易日就是最简单的一种标签化方式。只要你开始习惯给结果加这种语义标签,后面做更复杂的规则判断时也会自然很多。
所以第 5 讲并不是只在练程序控制流。它也在帮你从“程序输出一串数”迈向“程序帮我把一类有意义的样本挑出来”。这一步很小,但方向非常对。
当你已经会从收益率里筛出上涨交易日,后面的 CSV 读写和异常处理就不再是孤立的新知识。CSV 读写会让你开始把这些样本放进文件,异常处理则会让你思考:如果价格列表里有坏值,这套筛选还能不能稳住。也就是说,第 5 讲实际上是在把前面的计算逻辑推进到一个更接近真实分析的阶段,而后面两讲则是在给这个阶段补输入输出和稳健性。
这就是为什么这一讲在 Python 入门系列里位置很合理。前几讲搭容器、搭循环、搭函数,到这里第一次真正做筛选;而一旦筛选开始出现,保存结果和保护结果的需求也自然跟着出现了。整条链路是顺着往下长的,不是硬拼的。
所以第 5 讲虽然看起来还很基础,却已经明显让这套小脚本更像一个真正能拿来处理样本的工具了。
很多初学者第一次写条件判断时,容易把它理解成一次临时的小测试:判断一下、打印一下、看起来能跑就算过关。但第 5 讲更值得建立的认识是,规则筛选并不是临时打印,而是在为后续分析正式抽取一类样本。只要你把这个定位看清楚,就会自然更重视结果应该如何保存、如何命名、如何和原始日期对应,而不会把这一步当成随手试出来的分支练习。
这种认识很关键,因为后面无论筛选的是上涨日、下跌日还是满足别的条件的样本,本质上都还是同一种动作。第 5 讲先把这层定位立住,后面的扩展就会顺很多。
筛选样本时,一个很稳的顺序是先把全量结果算出来,再在结果层上做规则判断,而不是一边算一边临时夹带很多判断逻辑。第 5 讲其实就在训练这种顺序感。因为一旦先有了完整收益率列表,再去筛出上涨交易日,代码会更清楚,结果也更容易核对。只要这种顺序开始稳定,后面你面对更复杂的规则时,代码就不会很快缠在一起。
这比单纯记住一个 if 条件更有长期价值。因为真正决定你以后代码是否清晰的,往往不是会不会写条件,而是会不会把条件放在合适的层上。
如果这一讲已经真正做稳,你通常会有一种比较明确的完成感:你已经不是只会得到一串收益率,而是开始能根据规则把其中某一类样本单独挑出来。你知道筛出来的是哪一天、对应的收益率是什么,也知道为什么这些结果值得单独存放。只要这种“我在抽取一类样本”的感觉已经建立,说明条件判断已经不再只是语法练习,而开始变成真正的数据处理动作。
这种完成感会直接影响你后面看待脚本的方式。因为你会更愿意把程序当成一个可以帮你提取目标样本的小工具,而不是只会做演示输出的练习代码。
筛选逻辑一旦开始出现,还有一条很值得尽早建立的基本纪律,就是规则和结果必须一一对应。也就是说,你不仅要知道自己筛出了哪些样本,还要能回头说明这些样本为什么会被命中。第 5 讲正适合练这种纪律,因为当前规则还很简单,只有“收益率是否大于零”这一条。只要你在这里就开始养成“结果必须能解释回规则”的习惯,后面条件一旦变复杂,也不容易失控。
这条纪律对真实分析很重要。因为很多筛选代码表面上能跑,但一问“为什么这些样本会进来”,作者自己也说不清。第 5 讲如果先把这层解释关系立住,后面保存 CSV 和做异常处理时,整条链路都会稳很多。
这一讲的重点,不只是写出一个 if returns[i] > 0,而是第一次真正让脚本根据规则去挑选样本。你需要理解为什么“先计算再筛选”更清楚,为什么日期和收益率天然错开一位,为什么命中的样本最好先存进新列表,以及为什么这类筛选本质上是在训练你抽取结果子集的能力。只要这些层已经理顺,这一讲就真正完成了。
本讲是《Python量化入门短课》的第 5 讲,当前主题是《条件判断:筛出上涨交易日》。上一讲已经把收益率计算封装成了可复用函数,这一讲则在结果层上第一次加入了规则筛选。下一讲会把前面一直活在内存里的样本真正写入 CSV,再读回来确认结构没有丢失。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。