基础入门
本讲把前面几讲得到的价格、收益率和上涨日结果汇总成一份最小行情摘要,完成从环境检查、数据组织、批量计算到结果输出的 starter 闭环。
第 8 讲给这套 starter 课程收尾。目标很明确:把前面几讲已经得到的价格列表、收益率结果和上涨日信息,整理成一份终端里可直接阅读的行情摘要。这一步看似只是“打印几行字”,但它很适合作为入门短课的结尾,因为它把前面分散的动作真正串到了一起。
学完这一讲后,你可以直接完成下面几件事:
对 starter 系列来说,这一讲的重点不是追求漂亮报表,而是把前面学到的基础动作收成一个完整结果。
前 7 讲分别练了环境检查、数据容器、循环、函数、条件判断、文件读写和异常处理。如果最后没有一个把这些能力收拢起来的小任务,很多知识点会像单独的小碎片。第 8 讲选择做摘要,正是因为它能把前面的步骤自然串起来:
这比单独再讲一条新语法更有价值,因为它让你看到一条最小分析链路已经闭环。
dates = ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04']
prices = [12.34, 12.80, 12.65, 13.10]
先继续沿用前面已经写过的两个小函数:
def calc_simple_returns(prices):
returns = []
for i in range(1, len(prices)):
prev_price = prices[i - 1]
curr_price = prices[i]
returns.append((curr_price - prev_price) / prev_price)
return returns
def get_up_days(dates, returns):
up_days = []
for i in range(len(returns)):
if returns[i] > 0:
up_days.append(dates[i + 1])
return up_days
这一节会把前面几讲分散得到的结果重新收拢:先拿到收益率和上涨日,再整理字段,最后输出成一份别人也能快速读懂的摘要。
returns = calc_simple_returns(prices)
up_days = get_up_days(dates, returns)
这一步没有新公式,重点是把前面已经做好的工具先接起来。
summary = {
'start_date': dates[0],
'end_date': dates[-1],
'start_price': prices[0],
'end_price': prices[-1],
'price_count': len(prices),
'return_count': len(returns),
'up_day_count': len(up_days),
}
print(summary)
这里故意只选很少的字段,因为 starter 系列的核心是先把摘要结构建出来,而不是堆很多指标。
print('行情摘要')
print(f"起始日期: {summary['start_date']}")
print(f"结束日期: {summary['end_date']}")
print(f"起始收盘价: {summary['start_price']:.2f}")
print(f"结束收盘价: {summary['end_price']:.2f}")
print(f"价格条数: {summary['price_count']}")
print(f"收益率条数: {summary['return_count']}")
print(f"上涨交易日数: {summary['up_day_count']}")
这一步会让你明显感觉到:前面分散的列表、函数和筛选结果,已经可以被整理成一份面向人阅读的输出了。
print('上涨交易日列表:')
for day in up_days:
print(day)
这样摘要就不只是“几个总数”,还附带了最关键的筛选结果明细。
摘要不是把几行字符串拼起来就结束了,关键是里面的每个字段都要能回到前面的价格、收益率和上涨日结果上去核对。
assert summary['price_count'] == len(prices)
assert summary['return_count'] == len(returns)
assert summary['up_day_count'] == len(up_days)
assert summary['start_date'] == '2024-01-01'
assert summary['end_date'] == '2024-01-04'
assert summary['start_price'] == 12.34
assert summary['end_price'] == 13.10
assert len(up_days) == summary['up_day_count']
只要这些检查都成立,就说明这份摘要不是随便拼出来的,而是和前面计算链路一致的结果。
如果前面几讲没有真正接起来,摘要看起来再整齐也没有意义。所以这里的问题核心是“它有没有承接前面的链路”,而不只是“它排版得好不好看”。
因为 starter 系列最重要的是闭环,而不是堆新概念。把一份最小摘要做好,能更真实地体现前面 7 讲有没有接起来。
因为字段少,才更容易验证。等你后面做更复杂练习时,再加入均线、波动率或最大回撤会更自然。
不一定。但字典很适合把这些摘要字段按名字组织起来,后面想打印或写文件都方便。
可以,但这节课的重点是“整理输出”,不是再扩文件格式。当前先把终端摘要做清楚就足够。
def make_market_summary(dates, prices):
returns = calc_simple_returns(prices)
up_days = get_up_days(dates, returns)
return {
'start_date': dates[0],
'end_date': dates[-1],
'start_price': prices[0],
'end_price': prices[-1],
'price_count': len(prices),
'return_count': len(returns),
'up_day_count': len(up_days),
'up_days': up_days,
}
summary = make_market_summary(dates, prices)
print(summary)
这就是 starter 系列很典型的一种收尾方式:把前面单独练过的动作,收成一个别人看得懂、自己也能复用的小结果。
如果只看单节内容,第 8 讲好像只是打印摘要。但把整套系列连起来看,它真正完成的是一个最小分析闭环:
这条链路虽然很小,但已经足够支撑你进入下一阶段的更完整练习。
如果你现在已经能把价格、收益率和上涨日结果整理成一份结构清楚、输出可读的行情摘要,那第 8 讲就算完成,也代表这套《Python量化入门短课》已经闭环。
本讲是《Python量化入门短课》的第 8/8 讲,当前主题是《生成一份行情摘要》。
上一讲:第 7 讲《异常处理:避开空值和除零》。
本系列到此完成:你已经从“验证 Python 能运行”一路走到了“生成一份最小行情摘要”。
后续建议:可以转入 pandas 入门短课,把这里的列表、字典和函数练习升级到表格数据处理场景。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。