我正在编写一个返回数据帧的函数,我想让此数据帧的列中的一个本质上取一列数据,将其传递给预定义的函数,然后将其设置为列新数据框。
因此,我将功能设置为接收一组数据,一个应用逻辑的功能以及该功能使用的一组数据。
如果我在带有箭头的代码的最后一行中使用.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)