我有这个熊猫数据框,其中 long_entry 或 short_entry 中的 1 表示当时进入交易,对应的多头/空头头寸。long_exit 或 short_exit 中的 1 表示退出交易。我可以知道如何计算要显示在新列 df['pnl_per_trade'] 中的每笔交易的 PnL?
此回测在任何时间点最多只能有 1 笔交易/头寸。
下面是我的数据框。如我们所见,多头交易于 2019 年 2 月 26 日进入并于 2019 年 1 月 3 日结束,盈亏为 64.45 美元,而空头交易于 2019 年 4 月 3 日进入并于 2019 年 5 月 3 日结束盈亏为 -$119.11(亏损)。
date price long_entry long_exit short_entry short_exit
0 24/2/2019 4124.25 0 0 0 0
1 25/2/2019 4130.67 0 0 0 0
2 26/2/2019 4145.67 1 0 0 0
3 27/2/2019 4180.10 0 0 0 0
4 28/2/2019 4200.05 0 0 0 0
5 1/3/2019 4210.12 0 1 0 0
6 2/3/2019 4198.10 0 0 0 0
7 3/3/2019 4210.34 0 0 0 0
8 4/3/2019 4100.12 0 0 1 0
9 5/3/2019 4219.23 0 0 0 1
我希望有这样的输出:
date price long_entry long_exit short_entry short_exit pnl
0 24/2/2019 4124.25 0 0 0 0 NaN
1 25/2/2019 4130.67 0 0 0 0 NaN
2 26/2/2019 4145.67 1 0 0 0 64.45
3 27/2/2019 4180.10 0 0 0 0 NaN
4 28/2/2019 4200.05 0 0 0 0 NaN
5 1/3/2019 4210.12 0 1 0 0 NaN
6 2/3/2019 4198.10 0 0 0 0 NaN
7 3/3/2019 4210.34 0 0 0 0 NaN
8 4/3/2019 4100.12 0 0 1 0 -119.11
9 5/3/2019 4219.23 0 0 0 1 NaN
由于我有大量数据,因此我希望代码尽可能避免出现任何循环。谢谢!