改变NumPy的FFT的起始点。

问题描述 投票:0回答:1

我在使用NumPy的FFT时遇到了问题。我不希望曲线在最后像图中所示的那样上升。这几乎就像它被钉在股票价格的平均价格上。

close_fft = np.fft.fft(np.asarray(data_FT['Adj Close'].tolist()))
fft_df = pd.DataFrame({'fft':close_fft})
fft_df['absolute'] = fft_df['fft'].apply(lambda x: np.abs(x))
fft_df['angle'] = fft_df['fft'].apply(lambda x: np.angle(x))

plt.figure(figsize=(14, 7), dpi=100)
fft_list = np.asarray(fft_df['fft'].tolist())
for num_ in [3, 6, 9, 100]:
    fft_list_m10= np.copy(fft_list); fft_list_m10[num_:-num_]=0
    plt.plot(np.fft.ifft(fft_list_m10), label='Fourier transform with {} components'.format(num_))
plt.plot(data_FT['GS'],  label='Real')
plt.xlabel('Days')
plt.ylabel('USD')
plt.title('Figure 3: Goldman Sachs (close) stock prices & Fourier transforms')
plt.legend()
plt.show()

这样就有了下面的图。

enter image description here

如你所见 曲线会直接跳到开始的地方 不管原来的价格是多少都一样 我所遵循的原始教程在这里。https:/pythonawesome.comusing thelatest -advancements in -ai to -predict -stock -market -movements.

python numpy fft finance
1个回答
2
投票

FFT的基向量都是圆形的,因此减少了基向量的数量,就不容易表示出数组末端和开始之间的急剧不连续。 你可以尝试通过镜像两端的数据来消除一些跳动,或者通过FFT前的数据去趋势化来减少一些不连续性。

补充一下。

DCT的方法是简单地将数据与其镜像复制(例如按相反的顺序)并使用双倍长度的FFT。 处理完后把多余的样本扔掉。

去趋势法可以用线性趋势,也可能用一个很低阶的多项式的线性回归拟合。 减去拟合的趋势线,然后进行FFT,再进行处理。然后处理完后如果需要的话再把拟合的趋势线加回来。

© www.soinside.com 2019 - 2024. All rights reserved.