2017-06-21 13 views
0

我必須盡力使平滑波(從股票價格) ,但我不知道如何將它應用到我的浪潮。如何通過應用海明窗來製作更平滑的波浪?

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)) 

這裏是示例圖像 example Reference of hamming moving average from aspen program

我的波變量是劇情後綠線。 這個程序有功能應用海明給它,然後繪製紅線

所以,我只是想知道這個程序怎麼做。

謝謝。

回答

1

典型的股票價格「平滑」使用滑動窗技術。窗口持續時間通常爲10-100天左右。從第1天開始,抓住接下來N天的數據並計算平均值(這裏的時間窗口是第1天到第1天+ N天)。這是您第1天的新「平滑」值。然後移至第2天並執行相同的操作,但現在您的窗口爲第2天至第2 + N天,並且您有第2天的平滑值。重複上述操作,直到用完爲止數據。

不知不覺中,你已經每一個你這樣做時施加的矩形窗函數。矩形窗口函數在窗口中始終具有值1,而在其他地方爲0。當您將原始數據乘以窗口時,您只能有效地採樣落入窗口的數據點。數據點的值不變,但因爲矩形窗口乘以1.

儘管矩形窗口函數具有一些不希望的屬性。如果你進行傅里葉變換,你會發現它有很高的旁瓣。這會擴大或「抹掉」原始數據中的頻率尖峯。因此,人們使用其他窗口函數,如hamming,hanning等。這些窗口函數對於窗口函數中的每個點不具有常數值1。

所以你需要做的是在你的代碼中取出你的原始波陣列並設置一個循環提取N個樣本,然後乘以一個長度爲N的漢明窗口數組,然後計算平均值並將其存儲在一個新的陣列。

+0

我用你的建議和它的作品。 –

0

從@湯姆·約翰遜建議。

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)