更有效的方法来检查pandas数据帧中相邻行的值以进行库存回测

时间:2014-03-03 03:08:22

标签: python pandas stocks

我有一个庞大的财务数据数据框。当股票价格高于上滚动平均值至少X天并且低于滚动平均值至少X天时,我想创建一个“买入”信号。我做了一个天真的实施,检查股票是否在至少2天之前和之后2天。我想知道是否: (1)有一种方法可以使它更通用,这样我就可以实现X天而无需放入一堆if语句 (2)编写下面的代码是一种更有效/更有效的方法。

data2只是数据帧 data2.AboveUpper是股票高于上滚动均值时的一列Trues,当股票低于上滚动均值时为False。

upperlist = data2[data2.AboveUpper == True].AboveUpper.index

for i, val in enumerate(upperlist):
    if data2.iloc[val+1]['AboveUpper'] == True:
        continue
    if data2.iloc[val+1]['AboveUpper'] == False:
        if data2.iloc[val+2]['AboveUpper'] == False:
            data2.ix[val+2, 'buy'] = True
        if data2.iloc[val+2]['AboveUpper'] == False:
            continue 

1 个答案:

答案 0 :(得分:1)

data2.AboveUpperTrue时,如果股票高于上滚动平均值,那么

pd.rolling_sum( data2.AboveUpper, window=X ) >= X

True,只要库存高于上滚动平均值至少连续X天;所以你需要的只是:

data2['buy'] = pd.rolling_sum( data2.AboveUpper, window=X ) >= X

作为一个例子:

>>> ts = pd.Series( [True, True, False, False, True, True, True, False, True ] )
>>> pd.rolling_sum( ts, window=2 ) >= 2
0    False
1     True
2    False
3    False
4    False
5     True
6     True
7    False
8    False
dtype: bool