回報
如何從每日價格計算年度回報?
假設我每天調整了 SPY 的收盤價,例如來自 yahoo Finance。如何由此計算年回報率?
注意:這與 1.2 表示 20% 或 0.2 表示 20% 之類的問題無關。
最簡單的解決方案是:
(adj. closing price at 31.12)/(adj. closing price at 1.1)
但:
- 結果與網路上出現的數據不同。
- 出現在網路上的數據是不充分的。例如,從這裡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; }