将函数传递给另一个函数的语法

时间:2018-07-25 17:46:54

标签: python python-3.x pandas numpy dataframe

我正在编写一个返回数据帧的函数,我想让此数据帧的列中的一个本质上取一列数据,将其传递给预定义的函数,然后将其设置为列新数据框。

因此,我将功能设置为接收一组数据,一个应用逻辑的功能以及该功能使用的一组数据。

如果我在带有箭头的代码的最后一行中使用.apply,则能够使其正常工作。

bt_data['Position'] = signal_data.apply(trade_logic)

但是我被建议使用np.select而不是应用b / c进行向量化,我想知道由于我的函数正在使用向量化,是否有更好的语法可用来设置名为bt_data ['Positions']的列是应用于mlr_data ['Slope'}

的trade_logic函数
Slope
3.98
3.78
-6.67
-17.6
-18.05
-14.48
-12.25
-13.9
-16.89
-13.3
-13.19
-18.63
-26.36
-26.23
-22.94
-23.23
-15.7
-11.01
-12.65
0.33
14.85
14.79
6.8
2.57

代码:

def trade_logic(x):
    conditions = [x.between(0, 10, inclusive=False), x.between(-10, 0, inclusive=False)]
    values = ['Long', 'Short']
    np.select(conditions, values, 'Flat')

def slope_test(x):
    if x >0 and x<20:
        return 'Long'
    elif x<0 and x>-20:
        return 'Short'
    else:
        return 'Flat'

def backtest_data(data,trade_logic,signal_data):

    bt_data = pd.DataFrame()

    bt_data['TickChange'] = bt_data['C']-bt_data['C'].shift(1)
    bt_data['CumTickChange'] = bt_data['TickChange'].cumsum()
    bt_data['Position'] = trade_logic(signal_data)  < ------

    return bt_data

results = backtest_data(mlr_data,trade_logic,mlr_data['Slope'])
print(results)

0 个答案:

没有答案