0

我制作了这个函数,它应该采用一组价格数据并计算一组月度回报。这个想法是应该能够应对不规则的时间间隔。例如,我有标准普尔 500 指数的每日数据,但许多对冲基金只每月发布价格数据。

这是我想出的:

//Turns a price series into an array of monthly returns. 
function monthlyReturns($dates, $prices, $startDate = "", $endDate = ""){
if ($endDate == "") $endDate = time();

if (count($dates) != count($prices)){
die("The dates array must be the same length as the prices array");
}  
$i = 0; $firstPass = false;
foreach ($dates as $date){
  $d = strtotime($date);
  if ($startDate == "" || ($d >= $startDate && $d <= $endDate )) :
    $p = $prices[$i];
    $month = date('M',$d);
    $year = date('Y',$d);

    if ($i == 0 || $firstPass == false){
      $startPrice = $p;
      $lastMonth = $month;
    }

    if ($month != $lastMonth && $i != 0){
      $returnTable['date'][] = $dates[$i-1];
      $returnTable['return'][] = $p / $startPrice - 1;
      $startPrice = $p;
    }
    $lastMonth = $month;
    $firstPass = true;
  endif;
  $i++;
  } 
  return $returnTable;
}

我注意到,对于只有月度数据的基金,回报率下降了一个月。任何人都可以看到此功能的任何重大缺陷,可以解释这一点或解决它的解决方案。

有关信息,对冲基金的月度回报通常在月底附近。例如

date       | Price
-----------------
2013-01-29 | 25.69
2013-02-28 | 27.62
2013-03-30 | 26.53
2013-04-29 | 28.45
4

0 回答 0