TTMTTM 是 Trailing Twelve Months 的缩写,意思是过去连续 12 个月
1. 计算方法TTM 不是按自然年(1 月到 12 月),而是取最近连续的四个季度的数据相加。
数值最近最近最近最近
其中 Q表示季度数据,可以是净利润、营收、EPS 等。
2. 为什么用 TTM
最新性:比上一完整财年更及时,反映公司最近 12 个月的实际表现。
去季节性影响:比如零售业第四季度旺季,TTM 结合四个季度消除了单季波动影响。
可比性:投资分析中常用 TTM 数据来比较不同公司的盈利能力,因为它都是“滚动 12 个月”的概念。
3. 例子假设今天是 2025 年 8 月,某公司最近四个季度净利润分别是:
2025 Q2:280 亿美元
2025 Q1:270 亿美元
2024 Q4:300 亿美元
2024 Q3:260 亿美元
则:
TTM 净利润=280+270+300+260=1110 亿美元
每股收益(EPS, Earnings Per Share)
公式净利润流通在外普通股股数
其中净利润用过去 12 个月(TTM)或预计未来 12...
结论:, 这类杠杆 单边市下📈超过三倍,📉不到三倍,但震荡市相反。如果对行情把握比较好,且是单边上涨,可以长期持仓,效果会超级好,否则不建议长期持有
1. 单边上涨(📈 正股持续涨)
由于杠杆ETF是每日按「目标倍数」调仓,每天涨 1% → 杠杆ETF 涨 3%。
正股连续上涨 假设: SOXX 连续 20 天每天涨 +1% SOXL 则每天 +3% 初始净值:100 计算: SOXX 最终净值: 100 × (1.01)^{20} ≈ 122.0(涨幅 +22%) SOXL 最终净值: 100 × (1.03)^{20} ≈ 180.6(涨幅 +80.6%) SOXX 涨 22%,而 SOXL 实际涨了 80.6%。
复利叠加后,20天下来,实际涨幅会超过线性 3 倍。
原因:复利放大效应——每天在更高的净值基础上继续乘以 3% 的涨幅,结果会超出单纯的 3 倍计算。
结论:单边上涨时,杠杆ETF超额跑赢。
2. 单边下跌(📉 正股持续跌)
每天跌 1%,杠杆ETF 跌 3%。
正股连续下跌 假设: SOXX 连续 20 天每天跌 -...
这里采用 计算链表长度法:
第一次遍历链表,得到链表长度 length。
计算要删除节点的正序位置:length - n + 1。
用一个虚拟头节点 dummy 来统一处理删除头结点的情况。
第二次遍历,将要删除的节点跳过,即让前驱节点指向要删除节点的下一个节点。
解题过程
遍历一次链表,用 length 记录节点总数。
计算要删除的节点前一个节点的位置,也就是 length - n。
使用一个 dummy 节点 指向 head,用 tail 指针遍历到该位置。
直接跳过目标节点:tail.next = tail.next.next。
返回 dummy.next 作为新链表头。
12345678910111213141516171819202122232425262728293031323334353637383940414243# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self....
当损失函数(Loss)不再下降时
训练模型时最常遇到的问题:当损失函数(Loss)不再下降时,我们该怎么办?
通常,我们的第一反应是认为模型走到了一个“临界点”(Critical Point),比如局部最小值(Local Minima)或鞍点(Saddle Point),在这些点上梯度为零,模型无法再更新。
然而,老师指出,这其实是一种误解。在实际的高维复杂模型中,Loss不再下降,但梯度(Gradient)的模长(Norm)可能依然非常大。这意味着参数的更新步伐并没有停止,模型并非“卡”在一个点上。真正的原因更可能是在一个狭长的“山谷”地带,模型在谷底的两侧来回震荡,虽然每一步都在更新,但宏观上Loss值却无法有效下降
优化失败:不只是局部最小值当模型训练停滞,梯度下降算法无法继续更新参数时,我们通常会假设梯度(Gradient)已经接近于零。梯度为零的点被称为“关键点”(Critical Point),它主要分为两类:
局部最小值 (Local Minima):这是一个大家都很熟悉的概念。当模型走到一个点,其周围所有方向的损失都比当前点高时,这个点就是局部最小值。此时,模型...
分类问题当作回归问题分析
回归输出的是一个数值,而分类的目的是将输入进行归类。一种简单的方法是将类别视为数值标签进行回归,但如果类别之间没有内在的数值关系,这种方法可能会产生问题。
一个常见的误区是直接用回归的方法来处理分类问题。比如,给“猫”赋予标签1,“狗”赋予标签2,“猪”赋予标签3,然后用一个回归模型去预测这个数值。
这样做有什么问题呢?
隐含的顺序关系:这样做会给模型一个错误的暗示,即这些类别之间存在某种数学关系(例如,狗是猫和猪的平均值?猪比狗更“大”?)。这在大多数分类场景下是不成立的。
多分类的局限:如果类别之间没有明确的顺序,这种方法很难扩展到多分类问题。
正确地表示分类目标: One-Hot 编码
概念:One-Hot 编码是一种将类别变量转换为机器学习算法易于处理的形式的方法。它将每个类别表示为一个向量,向量的长度等于总类别数,其中只有一个元素是1(表示当前类别),其余所有元素都是0。
举例:
类别1: [1, 0, 0]
类别2: [0, 1, 0]
类别3: [0, 0, 1]
这样做的好处是,类别之间是相互独立的,模型不会错误地...
搞懂Docker核心概念第一站:初识Cursor与开发容器(Dev Container)一切的开端,是AI为我总结了视频内容:一个名为Cursor的AI代码编辑器,可以通过自然语言,自动为一个项目配置好包含Docker的开发容器(Dev Container)。
我的第一个疑问是:“这不就是把项目打个包吗?有什么用?”
学习笔记1:为什么需要开发容器?为了解决“环境一致性”
我了解到,这“简单的一步”解决了开发者最大的噩梦之一:“在我电脑上能跑,在你电脑上就不行”。
传统痛点:团队成员的电脑系统、软件版本、库版本各不相同,导致代码无法统一运行,大量时间浪费在搭建和调试环境上。
容器化解决方案:通过一个配置文件(devcontainer.json和docker-compose.yml),将项目的运行环境(操作系统、Python版本、所有依赖库、甚至数据库服务)代码化。
最终效果:任何拿到这个项目的人,只需一键(视频中是Cursor的AI指令,传统方法是docker-compose up),就能在几分钟内复刻出一个与我100%一致、完全隔离的开发环境。
第二站:深入Docke...