2291 字
11 分钟
《量化交易入门》第 3 章:Python 基础(交易版)——变量、列表与循环

《量化交易入门》第 3 章:Python 基础(交易版)——变量、列表与循环#

前两章你见过代码了:第 1 章用 10 行判断均线信号,第 2 章用标准库读 CSV。现在我们把缺的一块补上——Python 基础。但这不是普通教程,而是”交易版”:只讲你后面 10 章真正用得上的那几样东西(变量、列表、循环、函数),配的例子全是价格、均线、涨跌幅,不讲一句废话。

3.1 为什么是 Python#

先说句实话:量化不是非得用 Python。C++ 更快,Excel 也能凑合。但 Python 在量化圈几乎是默认语言,原因有三:

  1. 上手快:语法接近大白话,读起来像英文句子,零基础一两天就能写小脚本。
  2. 生态全:拉数据的 akshare、算数据的 pandas、做模型的机器学习库,全都围绕 Python 长出来的。换个语言,这些轮子全要自己造。
  3. 免费:Python 本身开源免费,装好就能用,跟学生党零资金起步完美匹配。

这一章的目标不是让你成为程序员,而是让你能读懂、能改、能跑通本书里所有代码。做到这一步,后面的回测、因子、风险章节你都能跟得上。

3.2 变量:给数据起个名字#

程序里天天要跟数据打交道:一个价格、一个日期、一个收益率。老是用”那个数”称呼太累,所以我们给数据起名字,这个名字就叫变量。

close_price = 10.5 # 一个收盘价
name = "贵州茅台" # 一段文字
is_above_ma = True # 一个判断结果(真/假)

规则就一条:名字 = 值,等号左边是名字,右边是值。之后用到这个名字,Python 就知道你指的是那个值。

有个细节新手常蒙:这里的 = 不是数学里的”等于”,而是**“把右边的值装进左边的名字里”**。所以下面这行完全合法:

price = price + 0.1 # 把 price 原来的值加 0.1,再装回 price

翻译过来就是”价格涨了 1 毛钱”。数学里没人这么写(两边减 price 变成 0=0.1),但程序里这是每天在干的事。

变量名怎么取? 用能看懂意思的英文,比如 close_price 比 cp 好,volume 比 v 好。过两周你自己回来看代码,会觉得当时取了个好名字简直是救命恩人。

3.3 列表:把一串价格放一起#

一只股票有几千天的收盘价,总不能一个价格一个变量吧?Python 用列表解决:用方括号把一堆数据按顺序装起来。

closes = [10.2, 10.5, 10.3, 10.8, 11.0] # 最近 5 天收盘价

取数据靠下标(位置)。注意一个反直觉的规则:编号从 0 开始,不是 1。

closes[0] # 第 1 个 → 10.2
closes[1] # 第 2 个 → 10.5
closes[-1] # 倒数第 1 个 → 11.0(最后一天)
closes[-2] # 倒数第 2 个 → 10.8

第 1 章我们用过 prices[-6:-1] 这种写法,叫切片:[-6:-1] 表示”从倒数第 6 个取到倒数第 1 个(不含最后一个)“,刚好是”最近 5 天、不含今天”。记住一个心法:-1 永远是最后一个,这在算”今天 vs 昨天”时极常用。

3.4 循环:让程序替你重复干活#

人的耐心有限:手动算 10 天的涨跌幅还行,算 3000 天就直接崩溃。循环就是**“让一段代码反复执行”**——这是程序最值钱的地方之一。

for day in ["周一", "周二", "周三"]:
print("今天是", day)

输出:

今天是 周一
今天是 周二
今天是 周三

拆开看:for 变量 in 列表 会把列表里的元素一个个拿出来,装进变量 day,然后执行缩进的那行代码。缩进(开头那 4 个空格)在 Python 里不是装饰,是语法——它表示”这几行属于这个循环”。漏了缩进,程序直接报错。

如果要”按位置”循环(比如要知道今天是第几天),用 range:

for i in range(5):
print("第", i + 1, "天")

range(5) 生成 0,1,2,3,4 这 5 个数,配合”下标从 0 开始”的规则,正好对应列表的 5 个位置。

3.5 判断:if 让程序做决定#

循环让程序”重复干活”,判断让程序”分情况干活”。交易里到处是判断:“价格在均线上方吗?""成交量放大没有?""该止损了吗?“——这些在 Python 里都长一个样:

price = 12.1
ma5 = 11.5
if price > ma5:
print("价格在 5 日均线上方,趋势偏强")
elif price < ma5:
print("价格在 5 日均线下方,趋势偏弱")
else:
print("价格正好等于均线")

if 后面跟一个条件,条件成立(结果为真)就执行缩进的代码;不成立就看 elif(否则如果)再判断一次;全都不成立就执行 else(否则)的代码。注意条件里 >(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(等于,两个等号)、!=(不等于)这些符号,跟数学很像,但”等于”一定要写两个等号——一个等号是给变量赋值的,别搞混。

判断能跟循环配合出花来:第 3.7 节综合示例里,if i == 0 就是在循环里拦截”第一天”,continue 的意思是”这一轮到此为止,直接进入下一轮”。这套组合拳,后面写策略信号时几乎每一章都会用到。

3.6 函数:把逻辑装进盒子#

循环解决”重复执行”,函数解决”重复使用”。一段逻辑(比如算均线)你会在很多地方用,把它包成一个函数,起个名字,以后一行调用:

def moving_average(data, window):
"""计算 data 最近 window 天的平均值"""
return sum(data[-window:]) / window

def 是定义函数的关键字,括号里是参数(要喂给它的数据),return 是返回值(它算完还给你什么)。定义好之后,用就一行:

ma5 = moving_average(closes, 5)

好处立刻体现:函数内部逻辑改一处,所有用到它的地方都跟着变。比如以后你想把均线改成”加权平均”,只改函数那一行,不用翻遍整个程序。第 1 章那个 avg,其实就是函数。

3.7 综合示例:一天的交易小工具#

把变量、列表、循环、函数凑一起,写一个”收盘后复盘小工具”:算 5 日、10 日均线,再把每一天的涨跌幅打印出来。

# 模拟某股票最近 10 天收盘价
prices = [10.2, 10.5, 10.3, 10.8, 11.0, 11.2, 10.9, 11.5, 11.8, 12.1]
def moving_average(data, window):
"""最近 window 天的平均价"""
return sum(data[-window:]) / window
def pct_change(start, end):
"""从 start 涨到 end 的涨跌幅(百分比)"""
return (end / start - 1) * 100
ma5 = moving_average(prices, 5)
ma10 = moving_average(prices, 10)
print(f"最近5日均价: {ma5:.2f}")
print(f"最近10日均价: {ma10:.2f}")
for i in range(len(prices)):
if i == 0:
print(f"第 1 天: {prices[i]} (没有昨日数据)")
continue # 跳过本次循环,直接进入下一天
chg = pct_change(prices[i-1], prices[i])
print(f"第 {i+1} 天: {prices[i]} (较昨日 {chg:+.2f}%)")

跑出来的输出(你可以复制到本地验证):

最近5日均价: 11.50
最近10日均价: 11.03
第 1 天: 10.2 (没有昨日数据)
第 2 天: 10.5 (较昨日 +2.94%)
第 3 天: 10.3 (较昨日 -1.90%)
第 4 天: 10.8 (较昨日 +4.85%)
第 5 天: 11.0 (较昨日 +1.85%)
第 6 天: 11.2 (较昨日 +1.82%)
第 7 天: 10.9 (较昨日 -2.68%)
第 8 天: 11.5 (较昨日 +5.50%)
第 9 天: 11.8 (较昨日 +2.61%)
第 10 天: 12.1 (较昨日 +2.54%)

这几十行代码里,你能看到前面讲的全部内容在配合工作:prices 是列表,moving_average 和 pct_change 是函数,for 是循环,if/continue 处理”第一天没有昨日”的特殊情况,f"..." 是把变量插进字符串的小语法(叫 f-string,第 1、2 章都见过)。你已经有能力读懂并修改一个完整的交易工具了。

3.8 这一章你该记住的#

  1. 变量:名字 = 值,= 是”装入”不是”等于”
  2. 列表 + 下标:从 0 开始数,-1 永远是最后一个,切片 [-6:-1] 取”最近 5 天”
  3. 循环:for x in 列表 逐个取,缩进决定属于谁的代码
  4. 判断:if / elif / else 分情况干活,条件里的”等于”是两个等号 ==
  5. 函数:def 定义、return 返回,逻辑写一次、到处用

到这里,写策略需要的最小 Python 弹药你已经有了:能存数据(变量+列表)、能遍历(循环)、能分支(if)、能封装逻辑(函数)。第 4 章我们就用这些工具,把第 1 章那条均线规则,做成一个真正完整、能算买卖信号的策略,并说清楚它为什么有效、又为什么经常失效。


📚 《量化交易入门》系列:零基础小白向量化交易,每章一个主题 + 可运行 Python 示例。第 3 章已读,下一章《第一个策略:均线交叉为什么有效又失效》明天见。

《量化交易入门》第 3 章:Python 基础(交易版)——变量、列表与循环
https://021028.xyz/posts/default/133/
作者
021028
发布于
2026-10-07
许可协议
CC BY-NC-SA 4.0