问题描述
我有一个带有索引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
。
这将耗尽您的所有选择。
因此,您需要定义可以实际实现的逻辑。