我有一個 DataFrame,其中包含由量化投資演算法產生的買賣操作。然后,我嘗試使用初始投資價值進行模擬,以便計算每次操作后的所得資本。

為此,我創建了一個名為“金錢”的新列,我嘗試在其中進行遞回計算。其中“金錢”列的當前值是先前值乘以操作的損益百分比。
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]}
uj5u.com熱心網友回復:
你可以使用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.906735
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428710.html
