问题描述
我有一个带有索引Date和Symbol的multiindex数据框。
该数据框大约有1000万行。
数据框具有一个带有True或False值的Entry_signal列,另一个带有数字值的Initial_stop列,以及另一个带有数字值的Low列。
基于这三列的内容,我想计算另外三列: Stop_level , Position , Exit_signal 。
这些应基于以下逻辑进行计算:
data['Entry_signal'] = # True or False
data['Initial_stop'] = # numbers
data['Low'] = # numbers
data['Stop_level'] = np.where(data['Position'] == True,
np.maximum(data['Stop_level'].shift(1),
data['Initial_stop']),
data['Initial_stop'])
data['Exit_signal'] = np.where(data['Low'] < data.groupby('Symbol')['Stop_level'].shift(1),
True,
False)
data['Position'] = np.where(data['Exit_signal'] == True,
False,
np.where(data['Entry_signal'] == True,
True,
data.groupby('Symbol')['Position'].shift(1)))
data['Position'] = data.groupby('Symbol')['Position'].ffill()
现在Stop_level引发错误,因为它需要一个Position 。
如果我将Position放在开头,则会引发错误,因为它需要Exit_signal 。
如果我将Exit_signal放在开头,则会引发错误,因为它需要Stop_level 。
等等。
如何使这种逻辑起作用?
1楼
将其写在纸片上:
-
Stop_level是一个功能:Position,Stop_level,Initial_stop。 -
Exit_signal是以下函数:Low,Symbol,Stop_level。 -
Position是以下函数的函数:Exit_signal,Entry_signal,Symbol,Position。
当前订单不起作用,因为Stop_level需要Position 。
将Position放在首位不起作用,因为它需要Exit_signal 。
首先将Exit_signal放置不起作用,因为它需要Stop_level 。
这将耗尽您的所有选择。
因此,您需要定义可以实际实现的逻辑。