4、Python基础速通(上):变量与数据类型、列表与字典、条件判断与循环

各位同学好,我是你们的量化讲师。今天咱们开始真正动手写代码了。

Python 这东西,说白了就是量化交易圈的“普通话”。不管你是用聚宽、米筐,还是自己搭回测框架,底层全是 Python。我见过太多人一上来就研究机器学习、高频策略,结果连个列表切片都写错,回测数据一跑就崩——嗯,这种坑我自己也踩过不少。

所以这一章,咱们把地基打牢。只讲量化里最常用的几个知识点:变量、数据类型、列表、字典、条件判断和循环。别的花里胡哨的语法,暂时用不上,先放一边。

核心目标:学完这一章,你能用 Python 写出一个简单的交易信号判断逻辑。

4.1 变量与数据类型:存数据的基本功

变量是什么?你可以把它想象成一个贴了标签的盒子。你把数据放进去,然后通过标签来取用。

在 Python 里,变量不需要提前声明类型。直接赋值就行。我个人习惯用有意义的英文命名,比如 close_price 而不是 cp,不然代码过两周自己都看不懂。

# 定义一个价格变量
close_price = 4850.5
volume = 12000
symbol = "RB2401"

print(close_price)
print(type(close_price))  # <class 'float'>

常用的数据类型就这几种:

类型 例子 说明
int 12000 整数,比如成交量
float 4850.5 浮点数,比如价格
str "RB2401" 字符串,比如合约代码
bool True / False 布尔值,比如是否开仓
小技巧:在量化里,价格和成交量经常混在一起计算。记得用 float()int() 做类型转换,避免字符串拼接导致的 bug。

4.2 列表与字典:量化数据的“容器”

做量化,你不可能只处理一个价格。你手里是一串价格、一堆合约、一组信号。这时候就需要容器来装它们。

4.2.1 列表:有序的数据序列

列表用方括号 [] 表示,里面的元素用逗号隔开。你可以存价格序列、合约列表,甚至混合类型——但我建议你别混着用,容易出问题。

# 存储最近5根K线的收盘价
close_prices = [4820.0, 4835.5, 4850.0, 4845.0, 4860.5]

# 取最后一个价格(最新价)
latest_price = close_prices[-1]
print(latest_price)  # 4860.5

# 取前3个价格
recent_3 = close_prices[:3]
print(recent_3)  # [4820.0, 4835.5, 4850.0]

我在项目中经常用列表来存历史行情数据,然后通过切片来获取不同周期的数据。比如计算5日均线,就是取列表最后5个元素的平均值。

4.2.2 字典:键值对的“名片夹”

字典用花括号 {} 表示,每个元素由“键:值”组成。它特别适合存合约信息,因为你可以用合约代码当键,快速查到对应的数据。

# 存储多个合约的当前价格
contracts = {
    "RB2401": 4850.0,
    "RB2405": 4780.0,
    "HC2401": 4920.0
}

# 查询螺纹钢2401的价格
print(contracts["RB2401"])  # 4850.0

# 添加新合约
contracts["RB2410"] = 4700.0
注意:字典的键必须是不可变类型(字符串、数字、元组)。列表不能当键。我曾经犯过这个错,调试了半天才发现是键类型不对。

4.3 条件判断:让代码“做决策”

交易的本质就是做决策:价格突破就买入,跌破就卖出。在代码里,我们用 if 语句来实现。

current_price = 4860.0
ma5 = 4840.0

if current_price > ma5:
    print("价格在均线上方,考虑做多")
elif current_price < ma5:
    print("价格在均线下方,考虑做空")
else:
    print("价格等于均线,观望")

这里要注意缩进。Python 用缩进来表示代码块,不像其他语言用花括号。我刚开始写的时候经常忘记缩进,一运行就报错——嗯,习惯就好。

量化里常用的条件判断场景:

  • 价格突破某条均线
  • 成交量异常放大
  • 持仓时间超过设定值
  • 止损/止盈触发

4.4 循环:批量处理数据

手动处理1000根K线?不可能。循环就是用来干这个的。

4.4.1 for 循环:遍历数据

for 循环最常用,用来遍历列表、字典等可迭代对象。

# 遍历价格列表,计算每日涨跌幅
prices = [4820.0, 4835.5, 4850.0, 4845.0, 4860.5]

for i in range(1, len(prices)):
    change = (prices[i] - prices[i-1]) / prices[i-1] * 100
    print(f"第{i}天涨跌幅: {change:.2f}%")

你想想看,如果不用循环,你得写多少行重复代码?

4.4.2 while 循环:条件控制

while 循环用得少一些,但在某些场景下很管用,比如等待某个条件满足才退出。

# 模拟等待价格触发
target_price = 4900.0
current_price = 4820.0

while current_price < target_price:
    # 模拟价格每次上涨5个点
    current_price += 5.0
    print(f"当前价格: {current_price}")

print("目标价格已触发!")
避坑指南:while 循环时一定要确保条件最终会变为 False,否则就是死循环。我曾经在实盘模拟中忘记更新条件,结果程序一直跑,CPU 直接拉满。

4.5 本章知识体系

下面这张图帮你梳理了本章的核心内容,建议保存下来随时回顾。

Python基础速通(上) 变量与数据类型 int / float / str / bool 价格、成交量、合约代码 类型转换:float() / int() 列表与字典 列表 []:有序序列 字典 {}:键值对查询 切片、增删改查 条件判断 if / elif / else 价格突破、止损止盈判断 循环 for 循环:遍历数据 while 循环:条件控制

这一章的内容就到这里。变量是基础,列表和字典是工具,条件判断和循环是逻辑。把这几个东西练熟了,你就能写出一个简单的交易信号判断程序了。

别急着往下翻,先打开你的 Python 环境,把上面的代码敲一遍。光看是学不会编程的——我当年也是敲了无数遍才形成肌肉记忆。

专注资料整理