深圳融克迪特科技有限公司 Logo,金融科技,量化交易,软件开发

深圳融克迪特科技有限公司

RONG CREDIT TECHNOLOGY CO., LTD.

基础入门

【Python 系列 第8讲】生成一份行情摘要

本讲把前面几讲得到的价格、收益率和上涨日结果汇总成一份最小行情摘要,完成从环境检查、数据组织、批量计算到结果输出的 starter 闭环。

2026-04-26 智铨研究 阅读时长 7 分钟

目录

  1. 本节目标
  2. 为什么最后一讲要做“摘要”
  3. 准备前几讲已经得到的核心结果
  4. 四步生成一份最小行情摘要
  5. 先得到收益率和上涨日结果
  6. 整理摘要里最值得展示的几项信息
  7. 把摘要格式化打印出来
  8. 把上涨日列表也补进摘要尾部
  9. 怎样判断这份摘要真的有用
  10. 摘要字典里关键字段齐全
  11. 起始和结束日期正确
  12. 起始和结束价格正确
  13. 上涨日数量和明细一致
  14. 摘要是不是只是“打印好看一点”
  15. 为什么最后不直接讲更复杂的指标
  16. 为什么摘要里只放几个简单字段
  17. 摘要一定要用字典吗
  18. 能不能把摘要写回 CSV
  19. 哪些情况仍然算本讲完成
  20. 写一个最小摘要函数
  21. 第 8 讲完成的是“最小分析闭环”
  22. 完成标准
  23. 系列衔接
  24. 风险揭示与免责声明

Python · 入门短课

  1. 第 1 讲【Python 系列 第1讲】Python环境检查:先打印一组收盘价
  2. 第 2 讲【Python 系列 第2讲】列表和字典:装下价格与日期
  3. 第 3 讲【Python 系列 第3讲】for循环:批量计算日收益率
  4. 第 4 讲【Python 系列 第4讲】函数封装:写一个收益率计算器
  5. 第 5 讲【Python 系列 第5讲】条件判断:筛出上涨交易日
  6. 第 6 讲【Python 系列 第6讲】CSV读写:保存再读回价格表
  7. 第 7 讲【Python 系列 第7讲】异常处理:避开空值和除零
  8. 第 8 讲【Python 系列 第8讲】生成一份行情摘要

【Python 系列 第8讲】生成一份行情摘要

1. 本节目标

第 8 讲给这套 starter 课程收尾。目标很明确:把前面几讲已经得到的价格列表、收益率结果和上涨日信息,整理成一份终端里可直接阅读的行情摘要。这一步看似只是“打印几行字”,但它很适合作为入门短课的结尾,因为它把前面分散的动作真正串到了一起。

学完这一讲后,你可以直接完成下面几件事:

  1. 汇总价格样本的起点、终点和条数。
  2. 汇总收益率样本和上涨交易日数量。
  3. 用清楚的文本输出一份最小行情摘要。

对 starter 系列来说,这一讲的重点不是追求漂亮报表,而是把前面学到的基础动作收成一个完整结果。

2. 为什么最后一讲要做“摘要”

前 7 讲分别练了环境检查、数据容器、循环、函数、条件判断、文件读写和异常处理。如果最后没有一个把这些能力收拢起来的小任务,很多知识点会像单独的小碎片。第 8 讲选择做摘要,正是因为它能把前面的步骤自然串起来:

  1. 需要一组价格列表。
  2. 需要收益率计算结果。
  3. 需要上涨日筛选结果。
  4. 需要把结果组织成可读文本。

这比单独再讲一条新语法更有价值,因为它让你看到一条最小分析链路已经闭环。

3. 准备前几讲已经得到的核心结果

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

4. 四步生成一份最小行情摘要

这一节会把前面几讲分散得到的结果重新收拢:先拿到收益率和上涨日,再整理字段,最后输出成一份别人也能快速读懂的摘要。

5. 先得到收益率和上涨日结果

returns = calc_simple_returns(prices)
up_days = get_up_days(dates, returns)

这一步没有新公式,重点是把前面已经做好的工具先接起来。

6. 整理摘要里最值得展示的几项信息

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 系列的核心是先把摘要结构建出来,而不是堆很多指标。

7. 把摘要格式化打印出来

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']}")

这一步会让你明显感觉到:前面分散的列表、函数和筛选结果,已经可以被整理成一份面向人阅读的输出了。

8. 把上涨日列表也补进摘要尾部

print('上涨交易日列表:')
for day in up_days:
    print(day)

这样摘要就不只是“几个总数”,还附带了最关键的筛选结果明细。

9. 怎样判断这份摘要真的有用

摘要不是把几行字符串拼起来就结束了,关键是里面的每个字段都要能回到前面的价格、收益率和上涨日结果上去核对。

10. 摘要字典里关键字段齐全

assert summary['price_count'] == len(prices)
assert summary['return_count'] == len(returns)
assert summary['up_day_count'] == len(up_days)

11. 起始和结束日期正确

assert summary['start_date'] == '2024-01-01'
assert summary['end_date'] == '2024-01-04'

12. 起始和结束价格正确

assert summary['start_price'] == 12.34
assert summary['end_price'] == 13.10

13. 上涨日数量和明细一致

assert len(up_days) == summary['up_day_count']

只要这些检查都成立,就说明这份摘要不是随便拼出来的,而是和前面计算链路一致的结果。

14. 摘要是不是只是“打印好看一点”

如果前面几讲没有真正接起来,摘要看起来再整齐也没有意义。所以这里的问题核心是“它有没有承接前面的链路”,而不只是“它排版得好不好看”。

15. 为什么最后不直接讲更复杂的指标

因为 starter 系列最重要的是闭环,而不是堆新概念。把一份最小摘要做好,能更真实地体现前面 7 讲有没有接起来。

16. 为什么摘要里只放几个简单字段

因为字段少,才更容易验证。等你后面做更复杂练习时,再加入均线、波动率或最大回撤会更自然。

17. 摘要一定要用字典吗

不一定。但字典很适合把这些摘要字段按名字组织起来,后面想打印或写文件都方便。

18. 能不能把摘要写回 CSV

可以,但这节课的重点是“整理输出”,不是再扩文件格式。当前先把终端摘要做清楚就足够。

19. 哪些情况仍然算本讲完成

  1. 你可以只打印摘要,不一定非要把它封装成函数。
  2. 当前不要求加入平均收益率、最大收益率等更复杂统计。
  3. 若上涨交易日只有 1 天或 2 天,也完全正常。
  4. 当前输出只要清楚可读即可,不要求对齐成漂亮表格。

20. 写一个最小摘要函数

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 系列很典型的一种收尾方式:把前面单独练过的动作,收成一个别人看得懂、自己也能复用的小结果。

21. 第 8 讲完成的是“最小分析闭环”

如果只看单节内容,第 8 讲好像只是打印摘要。但把整套系列连起来看,它真正完成的是一个最小分析闭环:

  1. 先确认 Python 环境能稳定运行。
  2. 再把价格和日期装进合适的数据结构。
  3. 批量计算收益率。
  4. 用函数整理逻辑。
  5. 用条件判断筛出上涨日。
  6. 学会和文件打交道。
  7. 先防守再计算。
  8. 最后把结果组织成一份摘要。

这条链路虽然很小,但已经足够支撑你进入下一阶段的更完整练习。

22. 完成标准

如果你现在已经能把价格、收益率和上涨日结果整理成一份结构清楚、输出可读的行情摘要,那第 8 讲就算完成,也代表这套《Python量化入门短课》已经闭环。

23. 系列衔接

本讲是《Python量化入门短课》的第 8/8 讲,当前主题是《生成一份行情摘要》。

上一讲:第 7 讲《异常处理:避开空值和除零》。

本系列到此完成:你已经从“验证 Python 能运行”一路走到了“生成一份最小行情摘要”。

后续建议:可以转入 pandas 入门短课,把这里的列表、字典和函数练习升级到表格数据处理场景。

24. 风险揭示与免责声明

风险揭示与免责声明

本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。

本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。

市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。

读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。