我有一个包含索引Date
和Symbol
的多索引数据框。该数据框大约有1000万行。数据框具有带有Entry_signal
或True
值的列False
,带有数字值的另一列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
。等等。如何使这种逻辑起作用?
答案 0 :(得分:0)
将其写在纸片上
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
。这会耗尽您的所有选择。
因此,您需要定义可以实际实现的逻辑。