基础入门
本讲用列表装下一组收盘价、用字典保存单日行情快照,再把多日记录组织成可继续遍历的小样本,帮助初学者在真正开始循环和收益率计算前,先把价格与日期放进清楚、稳定的数据结构里。
第 2 讲开始把第 1 讲里那组单独打印的收盘价,整理成更像“数据”的样子。目标很直接:学会用列表装下一组价格,再用字典把日期和价格配起来。只要这一步走通,后面写循环、算收益率、做筛选时,你就不再是在几行零散数字上硬算,而是在一份有结构的小样本上继续推进。
学完这一讲后,你可以直接完成下面几件事:
这就是 Python 入门里非常关键的一步:先把数据装稳,再谈后面的计算。
很多初学者一上来就想直接算收益率、做条件判断,结果很快会碰到一个更基础的问题:这些价格和日期到底放在哪里。如果你总是把数字散在几行变量里,后面每加一个步骤,代码都会更乱。相反,只要先把数据放进合适的容器里,后面很多动作都会自然很多。
第 2 讲之所以先练列表和字典,就是因为它们几乎覆盖了入门阶段最常见的两类需求:
量化练习里,收盘价序列、交易日列表、单日行情快照,基本都可以先落在这两类结构上。把这一步做扎实,后面才谈得上“批量处理”。
本讲不需要任何第三方库,继续使用第 1 讲已经确认可运行的标准 Python 即可。你只需要新建一个文件,比如 lesson2_containers.py,然后把下面的示例代码敲进去。
为了让输出更容易验证,本讲继续沿用一组很小的样本:
dates = ['2024-01-01', '2024-01-02', '2024-01-03']
prices = [12.34, 12.80, 12.65]
这组数据故意保持很短,因为当前重点不是数据量,而是先把结构关系看清楚。
下面四步分别解决“先放值”“再放键”“最后检查结构”的问题。顺着这个顺序做,最不容易混乱。
prices = [12.34, 12.80, 12.65]
print(prices)
print(type(prices))
列表最适合装这种有顺序的一串值。你会发现,价格放进列表以后,后面不管是遍历、取第一个值,还是计算相邻两天变化,都会容易很多。
dates = ['2024-01-01', '2024-01-02', '2024-01-03']
print(dates)
这里先不要急着把日期和价格揉成一个复杂结构。先分别放好,目的是让你明确看到:一边是时间,一边是数值,二者长度应该一致。
day_record = {
'date': '2024-01-01',
'close': 12.34,
'code': '000001.SZ'
}
print(day_record)
print(day_record['date'])
print(day_record['close'])
字典和列表最大的区别,是它更适合保存“有字段名”的信息。对于单日记录、单次信号结果、一个小配置项,字典往往比列表更清楚,因为你能直接按键去取值。
records = [
{'date': '2024-01-01', 'close': 12.34},
{'date': '2024-01-02', 'close': 12.80},
{'date': '2024-01-03', 'close': 12.65},
]
print(records)
print(records[0])
print(records[0]['close'])
到了这一步,你已经从“单个值”走到了“一组有结构的样本”。后面如果要批量算收益率、筛上涨日、生成摘要,这类“列表里装字典”的形式会非常常见。
这一步不需要复杂测试,只要把最关键的结构关系检查清楚即可。
assert len(prices) == 3
assert len(dates) == len(prices)
assert day_record['date'] == '2024-01-01'
assert day_record['close'] == 12.34
assert records[0]['close'] == 12.34
assert records[1]['date'] == '2024-01-02'
只要这四条都成立,就说明你已经能把最小行情样本装进后面可继续使用的结构里了。
这是第 2 讲最容易混淆的地方,先分清楚会省很多时间。
因为单独的一串收盘价最重要的信息其实是顺序。列表天然适合保存顺序,后面取前后两天价格也最直接。
因为单天记录里通常不止一个值。除了价格,后面你还可能放日期、代码、成交量。字典可以让这些字段名一眼看清。
入门阶段完全够用。后面等你开始用 csv、函数封装或 pandas,你会在这些结构上自然升级,而不是从零重来。
那就先不要往下做。长度不一致说明数据本身已经错位,后面不管怎么循环或计算,结果都会不可靠。
open、high、low 都可以,但核心是先理解键值关系。def make_price_record(date, close, code):
return {
'date': date,
'close': close,
'code': code,
}
record = make_price_record('2024-01-01', 12.34, '000001.SZ')
print(record)
这类小函数很适合帮助你把“字典长什么样”固定下来。后面数据变多时,结构也不容易写乱。
很多人学 Python 时,会把列表和字典当成语法点去背。对量化入门来说,更重要的是把它们当作“容器选择”。也就是说,你每次拿到一段小数据,都要先想:
只要这三个问题越来越清楚,你写出来的 Python 代码就会比“只会拼语法”稳很多。
如果你现在已经能用列表装下一组价格、用字典保存单日记录、并且知道为什么“多条字典放进列表里”是一种很常见的组织方式,那第 2 讲就算完成。
本讲是《Python量化入门短课》的第 2/8 讲,当前主题是《列表和字典:装下价格与日期》。
上一讲:第 1 讲《Python环境检查:先打印一组收盘价》。
下一讲:第 3 讲《for循环:批量计算日收益率》。
后续安排:第 4 讲《函数封装:写一个收益率计算器》;第 5 讲《条件判断:筛出上涨交易日》。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。