我嘗試計算例如 3 天的累積回報,并將最終值分配給新的DataFrame cumulative_return. 為了說明我創建了這個例子:
returns:
01K 02K 03K 04K
Dates
2022-01-01 1.02 1.05 1.02 1.01
2022-01-02 0.97 0.99 1.02 1.06
2022-01-03 1.03 1.07 0.98 1.02
2022-01-04 0.96 1.02 1.03 0.98
2022-01-05 1.02 1.02 1.09 1.03
2022-01-06 1.06 0.95 0.96 0.99
start:
01K 02K 03K 04K
Dates
2022-01-01 1 0 0 0
2022-01-02 0 1 0 0
2022-01-03 0 0 0 0
2021-01-04 1 0 1 0
2021-01-05 0 0 1 0
2021-01-06 0 0 0 1
cumulative_returns:
01K 02K 03K. 04K
Dates
2022-01-01 1.019 0.00 0.000 0.0
2022-01-02 0.000 1.08 0.000 0.0
2022-01-03 0.000 0.00 0.000 0.0
2022-01-04 1.038 0.00 1.078 0.0
2022-01-05 0.000 0.00 NaN 0.0
2021-01-06 0.000 0.00 0.000 NaN
cumulative_return超過 3 天的計算示例:
- 2022-01-01/01K:1.019 = 1.02 * 0.97 * 1.03
- 2022-01-04/01K:1.038 = 0.96 * 1.02 * 1.06
到目前為止,我只能通過單獨移動收益來計算累積收益,這對于較長的時間間隔來說效率不高。
returns.shift(-2) * returns.shift(-1) * returns * start
為了重現性:
import pandas as pd
import numpy as np
returns = pd.DataFrame({
'Dates':['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06'],
'01K':[0.02, -0.03, 0.03, -0.04, 0.02, 0.06],
'02K':[0.05, -0.01, 0.07, 0.02, 0.02, -0.05],
'03K':[0.02, 0.02, -0.02, 0.03, 0.09, -0.04],
'04K':[0.01, 0.06, 0.02, -0.02, 0.03, -0.01]})
returns = returns.set_index('Dates')
returns = returns 1
start = pd.DataFrame({
'Dates':['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06'],
'01K':[1, 0, 0, 1, 0, 0],
'02K':[0, 1, 0, 0, 0, 0],
'03K':[0, 0, 0, 1, 1, 0],
'04K':[0, 0, 0, 0, 0, 1]})
start = start.set_index('Dates')
uj5u.com熱心網友回復:
您可以利用帶有 numpy 產品功能的 pandas 滾動功能來獲得以下資訊:
n=3
returns.rolling(n).apply(np.prod).shift(-n 1)
輸出:
01K 02K 03K 04K
Dates
2022-01-01 1.019082 1.112265 1.019592 1.092012
2022-01-02 0.959136 1.080486 1.029588 1.059576
2022-01-03 1.008576 1.113228 1.100246 1.029588
2022-01-04 1.037952 0.988380 1.077792 0.999306
2022-01-05 NaN NaN NaN NaN
2022-01-06 NaN NaN NaN NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408935.html
標籤:
