可变移动平均线

时间:2017-04-21 16:47:50

标签: python python-3.x pandas finance quantitative-finance

我有一个看起来像这样的DataFrame:

    a    b             
1   0.9  0.796522123    
2   0.8  0.701075019    
3   0.6  0.777130253    
4   0.5  0.209912906    
5   0.75 0.920537662    
6   1    0.955212665    
7   3.5  0.227221963    
8   2    0.336632891    
9   1.25 0.563511758    
10  1    0.832624112    

我想创建一个最大周期为3的移动平均线,其中每个观测值为df['a']*df['b]。

如果df['a'].rolling(window=3).sum() <= 3,那么MA将是:

df['MA'] = (df['a']*df['b']).rolling(window=3).mean()

但是,例如,如果是df['a'].rolling(window=3).sum() > 3,就像df[8:10]一样,那么我希望移动平均值为:

((1*0.83)+(1.25*0.832624112)+(0.75*0.336632891))/3

我一直在玩弄创建一个函数然后应用它,比如:

def MA(a, b, period):
    total = 0
    sum_a = 0
    for i in (b):
        if sum_a < period:
            sum_a += a
            total += (a*b)
        else:
            sum_a = sum_a - a
            diff = period - sum_a
            total = total + (diff*b)
     return total

df['MA'] = df.apply(lambda x: MA(a, b, period), axis=1)

我无法解决此问题,我认为使用pandasnumpy可以更轻松地执行此操作。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

Run Keyword And Return Status