回報

如何從每日價格計算年度回報?

  • December 1, 2016

假設我每天調整了 SPY 的收盤價,例如來自 yahoo Finance。如何由此計算年回報率?

注意:這與 1.2 表示 20% 或 0.2 表示 20% 之類的問題無關。

最簡單的解決方案是:

(adj. closing price at 31.12)/(adj. closing price at 1.1)

但:

  1. 結果與網路上出現的數據不同。
  2. 出現在網路上的數據是不充分的。例如,從這裡2014 年的回報率為 11.39%,但從這裡開始為 13.46%(這是 Google 上的第一個結果,所以我認為這是合理的資源)。同樣的人可以找到點擊其他網站…

謝謝,

我的公式範例不包括現金股息、管理費(即 SPY)、持有稅。

每日%=(px

[Math Processing Error]$$ i $$-px$$ i-1 $$)/像素$$ i-1 $$, 其中px[Math Processing Error]$$ i $$今天和px$$ i-1 $$是昨天。 每年%=(每天

$$ Jan 1st $$+1)*(每天$$ Jan 2nd $$+1)….大約 252 天期限)-1。 在 Java 中,您可以使用此函式。傳入每日時間序列的回報。

   public static List<Tuple2<LocalDate,Double>> calcAnnualReturns(List<LocalDate> date, List<Double> values) {
   List<Tuple2<LocalDate,Double>> list = new ArrayList<>();
   int lastYear=-1; 
   BigDecimal tally=BigDecimal.ZERO;
   if( values.size()>0 ) {
       for (int i = 0; i < values.size(); i++) {
           LocalDate ldt=date.get(i);
           double value=values.get(i);
           if( i==0 ) {
               tally=BigDecimal.valueOf(value+1);
           }else{
               if( ldt.getYear()>lastYear ) {
                   // calculate
                   tally=tally.subtract(BigDecimal.ONE);                                                   
                   // add result
                   list.add(new Tuple2(LocalDate.of(lastYear, 12, 31), tally.doubleValue()));
                   // reset to new year
                   tally=BigDecimal.valueOf(value+1);
               }else{
                   tally=tally.multiply(BigDecimal.valueOf(value+1));
               }
           }
           //
           lastYear=ldt.getYear();
       }               
       // finish last value
       tally=tally.subtract(BigDecimal.ONE);                                   
       list.add(new Tuple2(LocalDate.of(lastYear, 12, 31), tally.doubleValue()));          
   }

   return list;
}

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