我有一个由量化投资算法产生的买卖操作的DataFrame。然后我试着用投资的初始值做一个模拟,以便在每次操作之后计算出最终的资本。

为此,我创建了一个名为“money”的新列,尝试进行递归计算。其中,“money”列的当前值为以前的值乘以操作的损益百分比。
ops_df['money'] = list( repeat(TOTAL_INVESTED, len(ops_df)) )
ops_df['money'] = (1 + ops_df.profit_perc.shift(1)) * ops_df.money.shift(1)
ops_df.head(10)但是,没有出现预期的递归计算。我很怀疑,因为正确的归因是在归因之前计算出来的。

我设法用普通循环来解决这个计算问题,但我一直把它记在脑子里。必须有一种更好、更有表现力的方法来进行这种计算。我想知道,如果有,会是什么样子?
TOTAL_INVESTED = 1000
money = [TOTAL_INVESTED, ]
for i in range(1, len(ops_df)):
curr_money = round( money[i-1] * (1 + ops_df.profit_perc.iloc[i]), 2 )
money.append(curr_money)
ops_df['money'] = money

数据:
{'profit_perc': [-0.039548, 0.490518, 0.127511, -0.019439]}发布于 2022-02-19 17:37:29
你可以用cumprod。这样做的目的是找出每一行的收益,并将其乘以初始投资:
TOTAL_INVESTED = 1000
df = pd.DataFrame({'profit_perc': [-0.039548, 0.490518, 0.127511, -0.019439]})
df['money'] = df['profit_perc'].shift(-1).add(1).cumprod().mul(TOTAL_INVESTED).shift().fillna(TOTAL_INVESTED)输出:
profit_perc money
0 -0.039548 1000.000000
1 0.490518 1490.518000
2 0.127511 1680.575441
3 -0.019439 1647.906735https://stackoverflow.com/questions/71186939
复制相似问题