У меня есть фрейм данных, который выглядит так
price signal
time
2017-10-28 13:54:00 293.18 buy
2017-11-02 17:13:04 285.30 sell
2017-11-02 18:40:04 283.24 buy
2017-11-03 08:40:06 291.23 sell
2017-11-03 12:38:06 294.26 buy
2017-11-05 13:33:06 296.52 sell
Я хочу создать столбец прибыли, заполненный разницей предыдущей пары покупки/продажи.
price signal profit
time
2017-10-28 13:54:00 293.18 buy
2017-11-02 17:13:04 285.30 sell -7.88
2017-11-02 18:40:04 283.24 buy
2017-11-03 08:40:06 291.23 sell 7.99
2017-11-03 12:38:06 294.26 buy
2017-11-05 13:33:06 296.52 sell 2.29
Как мне лучше всего это сделать?
Также приветствуются альтернативные или более эффективные подходы к расчету прибыли.
@WeNYoBen отлично сработало, спасибо
Если действительно каждые 2 ряда можно просто df['profit'] = df.price.diff()[1::2]
. Но довольно небезопасно
@WeNYoBen Может быть, опубликовать это как ответ для дальнейшего использования?
@run-out хорошо :-)
Я бы, наверное, сделал:
df['profit'] = df.price - df.price.shift()
Всегда ли вы закрываете свою позицию, прежде чем открыть другую?
Я бы предложил столбец trade_id, чтобы использовать его для объединения сделок.
IIUC с помощью cumsum
создайте групповой ключ, затем diff
df.groupby(df.signal.eq('buy').cumsum())['price'].diff()
df.groupby(df.signal.eq('купить').cumsum())['цена'].diff()