Frama 是如何计算的
直接答案:Frama 计算的含义
FRAMA(通常写作“Frama”)代表分形自适应移动平均线(FRactal Adaptive Moving Average)。其计算旨在生成一种移动平均线,其平滑强度会根据近期价格走势表现出的“复杂性”或“趋势性”进行自适应调整。这种自适应性来源于对多个回溯窗口内价格范围的分形维度估计,并将该估计值转换为有效的平滑因子。
关键点在于,Frama 的值并非仅通过单一参数的单一公式得出。它取决于:
- 所选的回溯长度,
- 价格数据定义(例如,使用从 OHLC 得出的最高价/最低价范围),
- 以及从分形维度到平滑因子的映射方式。
机制:输入与核心计算步骤
1) 定义所用数据和“范围”
大多数 Frama 实现使用价格在某一窗口内的范围,通常由最高价和最低价得出。一种标准的范围概念是:
- 窗口内的范围:该窗口内(最高价 − 最低价)的度量值。
如果您要自行验证计算,首要任务是确定您的数据源所使用的“范围”的确切定义,因为更改范围定义会改变最终的 Frama 序列。
2) 将主回溯窗口拆分为子窗口
典型的 Frama 设计使用一个主窗口长度(记为 N)。为了估计分形行为,算法会考虑:
- 最近 N 根K线的价格范围,以及
- 两个连续的、长度为 N/2 的子窗口的范围(当 N 为偶数时)。
这意味着在时间 t 的K线上,您需要概念性地计算:
- Range1:第一个子窗口的范围,
- Range2:第二个子窗口的范围,
- RangeTotal:完整窗口的范围。
3) 计算分形维度估计值
分形维度(在 Frama 意义上)是根据 RangeTotal 与 Range1 和 Range2 的比较来估算的。一种常见方法是将比率转换为维度值,当价格走势看起来更不规则时,该值增加;当走势更像平滑趋势时,该值减小。
由于实际中存在多个版本,验证时需要检查您所选参考源中从范围比率到分形维度的确切映射方式。
4) 将分形维度转换为自适应平滑因子
一旦获得分形维度估计值,Frama 就会将其转换为平滑因子。其思路是:
- 当估计的复杂性表明“更多噪声”时,平滑作用增强(响应更慢),
- 当表明“更像趋势结构”时,平滑作用减弱(响应更快)。
同样,确切的转换方式取决于具体实现。许多变体使用最小/最大平滑边界等参数,以使平滑因子保持在实用范围内。
5) 应用指数平滑更新
最后,Frama 以移动平均线的方式进行递归更新:
- 时间 t 的新 Frama 值是当前价格(或选定的代理值,如中间价)与前一个 Frama 值的加权混合,
- 其中混合权重是步骤 2–4 中计算出的自适应平滑因子。
因此,即使分形维度的数学计算正确,您仍需验证:
- 更新中使用的“当前价格”是什么(收盘价 vs. 中间价),
- 以及第一个 Frama 值是如何初始化的。
验证或示例:如何在不涉及交易假设的情况下验证 Frama 计算
由于确切公式在不同来源中可能不同,验证“如何计算”的最可靠方法是在固定假设下使用小数据集进行复现。
自检程序
- 选择一段简短的历史数据和固定的K线定义(例如,包含最高价/最低价和收盘价的 OHLC)。
- 选择 N 和子窗口拆分规则(例如,每侧 N/2,要求 N 为偶数)。
- 使用与目标来源相同的范围定义计算 Range1、Range2 和 RangeTotal。
- 严格按照该来源所述应用分形维度映射。
- 计算自适应平滑因子,然后进行递归 Frama 更新。
- 将您最终的序列值与相同输入下的目标输出进行比较。
需明确说明的假设
在您的笔记中说明您的假设:
- 是否使用(最高价 − 最低价)作为范围,
- 在最终更新中是否使用收盘价或中间价,
- 如何处理前 N 根K线(无输出、预热或初始化),
- 以及是否仅使用偶数 N 或对子窗口进行舍入。
如果您更改其中任何一项,即使保持了“分形自适应”的核心理念,Frama 值也会发生变化。
局限性与失效模式
1) 实现差异很常见
“Frama”是一种算法概念,但不同平台和文章可能在以下方面使用不同细节:
- 分形维度映射,
- 平滑边界,
- 更新中的价格代理,
- 以及初始化方式。
因此,除非计算细节匹配,否则不能安全地跨提供商比较 Frama 值。
2) 基于范围的输入对噪声敏感
使用最高价/最低价范围意味着该指标可能对K线内极端值反应强烈。在震荡行情中,随机波动可能改变范围比率,从而改变自适应平滑因子,即使潜在的“趋势”并不明确。
3) 参数选择可能主导行为
回溯长度和任何平滑边界会强烈影响 Frama 的适应速度。较短的窗口往往更灵敏,但也可能更不稳定。较长的窗口往往更平滑,但可能滞后。这是一种数学和统计上的权衡,而非正确性的保证。
4) 递归指标依赖初始条件
由于 Frama 通常是递归的,早期的初始化决策和预热处理可能影响后续值。在长期历史数据中,这种影响可能减弱,但在较短样本中可能很重要。
验证与后续问题
要准确向他人解释 Frama,需提供以下三项内容:
- 您所使用的精确公式细节,包括范围、分形维度、平滑因子和递归更新的定义方式。
- 所需输入列表(至少包括最高价/最低价和更新步骤所需的价格)以及所需参数(例如 N 和任何平滑边界)。
- 一条基于您假设的实现选择的局限性说明(例如,对最高价/最低价噪声的敏感性或对初始化的依赖)。
一个有用的后续问题是:您选择的设置如何改变响应速度与平滑性之间的平衡? 如果您分享所用来源中的具体参数名称以及价格/范围定义,Frama 的计算就可以针对您的数据集进行逐步验证。