1

我试图使波浪更平滑(从股票价格),但我不知道如何将它应用到我的波浪中。

import numpy as np
wave = [1575.7918235085228, 1574.2183726917613, 1571.9212868430398, 1569.5071067116478, 1568.4249178799716, 1567.4649192116478, 1566.7141801313921, 1565.9849054509943, 1565.4699951171874, 1566.766004527699, 1567.222733931108, 1567.4478271484375, 1566.3074729225852, 1563.4207475142045, 1559.6012806285512, 1555.0241965553978, 1552.6043723366477, 1550.9003773082386, 1549.0460116299716, 1548.2069202769887, 1549.2643687855114, 1551.792538174716, 1554.6467240767045, 1557.9874578302556, 1560.9547341086648, 1563.2614679509943, 1565.0818204012785, 1565.241825727983, 1565.4223677201705, 1566.1059992009943, 1566.3267223011364, 1566.7634410511364, 1566.691796875, 1567.2850763494318, 1567.2025368430398, 1566.6512761896306, 1567.7338201349432, 1569.591093306108, 1570.538554243608, 1571.8510919744317, 1573.8294588955966]
hamm = np.hamming(len(wave))

这是来自 aspen 程序的汉明移动平均线的示例图像 参考例子

我的波变量是绘图后的绿线。该程序具有对其应用汉明然后绘制红线的功能

所以我只想知道这个程序是怎么做的。

谢谢你。

4

3 回答 3

1

通常使用滑动窗口技术“平滑”股票价格。窗口持续时间通常为 10-100 天左右。从第 1 天开始,抓取接下来 N 天的数据并计算平均值(这里的时间窗口是第 1 天到第 1 + N 天)。这是第 1 天的新“平滑”值。然后移动到第 2 天并做同样的事情,但现在您的窗口是第 2 天到第 2+N 天,并且您有第 2 天的平滑值。重复直到用完数据。

不知不觉中,您每次执行此操作时都应用了一个矩形窗口函数。矩形窗口函数在窗口中始终为 1,在其他任何地方都为 0。当您将原始数据乘以窗口时,您实际上只对落入窗口的数据点进行了采样。数据点的值没有改变,因为使用矩形窗口乘以 1。

矩形窗口函数虽然有一些不受欢迎的属性。如果你对其进行傅里叶变换,你会发现它具有非常高的旁瓣。这会导致原始数据中的频率峰值变宽或“拖尾”。因此人们使用其他窗口函数,例如汉明、汉宁等。这些窗口函数对于窗口函数中的每个点都没有恒定值 1。

因此,您需要在代码中做的是获取原始波形数组并设置一个循环,提取 N 个样本,将它们乘以长度为 N 的汉明窗口数组,然后计算平均值并将其存储在一个新数组中。

于 2017-06-22T02:24:56.420 回答
0

如果有人正在寻找这个,它现在存在于 win_type 下 pandas 的滚动功能中。

pandas.DataFrame.rolling

于 2021-05-13T05:38:08.050 回答
0

来自@Tom Johnson 的建议。

df['wma'] = WMA(df['close'].values,N)
h_win = np.hamming(N)
close = df['close'].values

hma = [ np.nan for i in range(N-1) ]
sum_h = sum(h_win)

for i in range(N-1, len(close)) :
    summation = 0

    for j in range(N) :
        summation += h_win[j]*close[i-j]
    average = summation / sum_h

    hma.append(average)

df['hma'] = pd.Series(hma, index=df.index)
于 2017-07-29T02:51:41.177 回答