У меня есть мультииндексный фрейм данных с индексами Date
и Symbol
.Фрейм данных имеет около 10 миллионов строк.Кадр данных имеет столбец 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
.И так далее.Как я могу заставить эту логику работать?