收益

如何從單個價格數據及其權重計算“投資組合累積收益”?

  • October 4, 2018

我正在嘗試以矢量化方式執行回測,Python Pandas並且需要根據價格數據和資產數據權重計算投資組合累積回報

我有兩個Dataframes

  1. 每個資產的價格(https://www.dropbox.com/s/ve9ll3t1j5owfuc/test_price.csv?dl=0
  2. 每個資產的重量(https://www.dropbox.com/s/hto9kq2g2wwfpm8/test_weight.csv?dl=0
  • 兩個數據框具有相同的形狀

  • 每個資產的權重​​僅在月底發生變化

    • 其余天的權重是通過’ffill’方法填充的,所以每個月的權重都是一樣的

我發現了什麼:

  1. portfolio_cum_rtn_df = (price_df.pct_change().fillna(0) + 1).multiply(weight_df).sum(axis=1)
  2. portfolio_rtn_df = price_df.pct_change().fillna(0).multiply(weight_df).sum(axis=1) portfolio_cum_rtn_df = (portfolio_rtn_df + 1).cumprod()

兩者都不是計算投資組合累積回報的正確方法。

需要一些幫助

這些答案缺少路徑依賴的概念。您的體重僅每月更新一次。這意味著您在 t0 上的權重是 w0,在 t1 上的權重是 w0*(1 + r1),在 t2 上的權重是 w0*(1+r1)*(1+r2) 其中 r(i) 是拆分調整後的總回報第一天 我想你會保持簡單,但如果你假設你的體重是一天的開始或一天的結束,這也很重要。

如果您假設每天對工作表中的權重進行重新平衡,那麼您可以忘記路徑依賴性,因為在每個離散的時間步長都提供了權重。如果是這種情況,您的第二個公式是正確的(下面稍作編輯),但魔鬼又在細節中。如果您的體重是在一天的開始或結束時假設的,這很重要。如果一天結束,您需要向前移動一天以獲得預期的一天開始權重以進行模擬。如果您每個月只交易一次,那麼您的公式不正確 - 您需要合併路徑依賴性。

投資組合_rtn_df = weight_df.multiply(price_df.pct_change().fillna(0)).sum(axis=1)

投資組合_cum_rtn_df = (1 + 投資組合_rtn_df).cumprod() - 1

引用自:https://quant.stackexchange.com/questions/42015