问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HMA算法:金融数据分析的新利器

创作时间:
作者:
@小白创作中心

HMA算法:金融数据分析的新利器

引用
CSDN
11
来源
1.
https://blog.csdn.net/2201_75495538/article/details/144566681
2.
https://m.sohu.com/a/782987074_121977046/?pvid=000115_3w_a
3.
https://finance.sina.com.cn/wm/2024-09-11/doc-incnuhfp1795051.shtml
4.
https://blog.csdn.net/2401_85576118/article/details/144122178
5.
https://agents.baidu.com/content/question/4ce75e06a24c19257b197d8d
6.
https://www.cnblogs.com/apachecn/p/18135536
7.
https://www.55188.com/thread-27700858-1-2.html
8.
https://www.marklines.com/cn/top500/united-automotive-electronic-systems
9.
https://juejin.cn/post/7357698668889391140
10.
https://liaoxuefeng.com/books/java/security/hmac/index.html
11.
https://m.bilibili.com/opus/1003920546434383881

赫尔移动平均线(Hull Moving Average,简称HMA)是一种在金融分析领域广受欢迎的高级移动平均算法,由Alan Hull发明并因此得名。与传统的移动平均线相比,HMA算法在保持数据平滑性的同时,显著减少了滞后性,实现了两者之间的最佳平衡。

HMA算法的原理

以一个简单的例子来解释HMA的工作原理。假设我们有最近的10个观测数据点,从0到9。 如果我们使用简单移动平均线计算,当前时点的平均值将是4.5,这与当前实际值9相差甚远,显示出较大的滞后性。 换句话说,4.5并不能准确反映最近的价格变化。Hull的方法是将这10个数据点分为两部分,考虑最近的一半,即5、6、7、8、9。这些数据的简单平均值为7,它反映了最近5个数据点的(滞后)趋势。

接下来的计算步骤是HMA的核心: Hull用最近5个数据点的平均值7减去整个10个数据点的平均值4.5,得到差值2.5。然后,将这个差值2.5加回到最近5个数据点的平均值7上,得到最终的HMA值9.5 。根据分析,整个10个数据点计算出的平均值4.5大致反映了5个数据点时点附近的低频趋势;同样,最近5个数据点计算出的平均值7反映了2.5个数据点时点附近的低频趋势。因此,这两个平均值之间的差值(本例中为2.5)反映了从5个数据点时点到2.5个数据点时点之间低频趋势的变化。 最后,假设这一趋势变化会继续,将其值(2.5)与最近5个数据点的平均值(7)相加,就得到了当前时点的低频趋势估计值9.5。

简而言之, Hull通过将数据分为近期和远期两部分,并给予近期数据更高的权重,从而捕捉到近期趋势的变化,减少了移动平均线算法的滞后性。 在实际应用中,为了更有效地捕捉趋势变化,HMA在计算不同周期的均值时,使用了加权移动平均(Weighted Moving Average)代替简单移动平均。 这样的改变显著降低了滞后性,但同时也牺牲了一定的平滑性。 为了解决这个问题,HMA的算法在最后一步对得到的均值进行了一次加权移动平均,以确保在没有剧烈变化的情况下,低频趋势仍然足够平滑。 考虑到最后的平滑过程不应该破坏低滞后性,Hull选择了T的平方根(sqrt(T))作为平滑窗口。

HMA算法的实现

以下是HMA算法在Python中的实现代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def _moving_average(df, period):
    wma_1 = df['Adj Close'].rolling(window=period//2).apply(
        lambda x: np.sum(x * np.arange(1, period//2 + 1)) / np.sum(np.arange(1, period//2 + 1)), raw=True
    )
    wma_2 = df['Adj Close'].rolling(window=period).apply(
        lambda x: np.sum(x * np.arange(1, period + 1)) / np.sum(np.arange(1, period + 1)), raw=True
    )
    diff = 2 * wma_1 - wma_2
    hma = diff.rolling(window=int(np.sqrt(period))).mean()
    return hma

period = 20 
df['hma'] = hull_moving_average(df, period)
df['sma_20days'] = df['Adj Close'].rolling(window=period).mean() 
figsize = (10, 6)
df[['Adj Close', 'hma', 'sma_20days']].plot(figsize=figsize)
plt.title(f'Hull Moving Average {period} days')
plt.show()

HMA算法的优势

HMA算法的主要优势在于:

  1. 减少滞后性:通过给予近期数据更高权重,HMA能够更快地反映价格变化,减少传统移动平均线的滞后问题。
  2. 保持平滑性:虽然提高了灵敏度,但HMA通过最后的加权移动平均步骤,仍然保持了数据的平滑性,避免了过度波动。
  3. 灵活性:HMA算法可以根据不同的需求调整参数,适用于各种市场条件和交易策略。

HMA算法的应用

HMA算法在金融领域有着广泛的应用,主要包括:

  1. 趋势分析:HMA能够更准确地捕捉市场趋势,帮助交易者及时做出决策。
  2. 信号生成:通过与其他指标结合,HMA可以生成买卖信号,优化交易策略。
  3. 风险管理:HMA可以帮助识别市场转折点,协助交易者控制风险。

总结

赫尔移动平均线(HMA)算法通过创新的计算方法,成功解决了传统移动平均线滞后性的问题,同时保持了数据的平滑性。其在金融领域的广泛应用证明了其有效性和实用性。对于需要快速准确分析数据的场景,HMA算法提供了一个优秀的解决方案。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号