2017-10-13 29 views
2

포트폴리오 또는 주식에 대한 베타 (베타 계수)를 계산하는 방법을 아는 사람은 누구나 S & P in C#와 같은 인덱스와 같은 벤치 마크와 비교할 수 있습니까?주식 및 지수 사이의 포트폴리오 베타 계산

이미 계산에 필요한 double 형 배열이 2 개 있지만이 작업을 수행 할 수있는 매끄러운 방법을 찾을 수 없습니다.

StatisticFormula.BetaFunction 메서드 (Double, Double)가 있지만 각 매개 변수에 하나의 값만 허용되며 배열이 아니라 통계적으로 의미가 없습니다. 사전에

덕분에

+0

각 배열의 값이 무엇을 나타내는 지 명확하게 설명 할 수 있습니까? 예 : 당신은 주식의 마감 가격 배열과 특정 시장의 마감 가격 배열을 가지고 있습니까? –

+0

예, 미안하지만, 나는 매일 두 개의 배열을 가지고 있습니다. 거기에 도달하기 위해 나는 종가 및 이전 종가의 배열을 가지고 있는데, 하나는 포트폴리오 용이고 다른 하나는 시장 용이다. 그러나 베타 계산은 반환을 요구할 가능성이 높다. – MX313

답변

2

나는 어떤 좋은 C#을 금융/통계 패키지를 인식하지, 그래서 내가 직접 방법을 쓴이 빌려 패키지 통계 : https://www.codeproject.com/Articles/42492/Using-LINQ-to-Calculate-Basic-Statistics

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace ConsoleApplication1 
{ 
    static class Program 
    { 
     static void Main(string[] args) 
     { 
      double[] closingPriceStock = { 39.32, 39.45, 39.27, 38.73, 37.99, 38.38, 39.53, 40.55, 40.78, 41.3, 41.35, 41.25, 41.1, 41.26, 41.48, 41.68, 41.77, 41.92, 42.12, 41.85, 41.54 }; 
      double[] closingPriceMarket = { 1972.18, 1988.87, 1987.66, 1940.51, 1867.61, 1893.21, 1970.89, 2035.73, 2079.61, 2096.92, 2102.44, 2091.54, 2083.39, 2086.05, 2084.07, 2104.18, 2077.57, 2083.56, 2099.84, 2093.32, 2098.04 }; 

      double[] closingPriceStockDailyChange = new double[closingPriceStock.Length - 1]; 
      double[] closingPriceMarketDailyChange = new double[closingPriceMarket.Length - 1]; 

      for (int i = 0; i < closingPriceStockDailyChange.Length; i++) 
      { 
       closingPriceStockDailyChange[i] = (closingPriceStock[i + 1] - closingPriceStock[i])/(100 * closingPriceStock[i]); 
       closingPriceMarketDailyChange[i] = (closingPriceMarket[i + 1] - closingPriceMarket[i])/(100 * closingPriceMarket[i]); 
      } 

      double beta = Covariance(closingPriceStockDailyChange, closingPriceMarketDailyChange)/Variance(closingPriceMarketDailyChange); 

      Console.WriteLine(beta); 

      Console.Read(); 
     } 


     public static double Variance(this IEnumerable<double> source) 
     { 
      int n = 0; 
      double mean = 0; 
      double M2 = 0; 

      foreach (double x in source) 
      { 
       n = n + 1; 
       double delta = x - mean; 
       mean = mean + delta/n; 
       M2 += delta * (x - mean); 
      } 
      return M2/(n - 1); 
     } 

     public static double Covariance(this IEnumerable<double> source, IEnumerable<double> other) 
     { 
      int len = source.Count(); 

      double avgSource = source.Average(); 
      double avgOther = other.Average(); 
      double covariance = 0; 

      for (int i = 0; i < len; i++) 
       covariance += (source.ElementAt(i) - avgSource) * (other.ElementAt(i) - avgOther); 

      return covariance/len; 
     } 

    } 


} 

이해야 할 것입니다 함수에서 베타를 계산하기 위해 리팩터링을하면 포함 된 정적 메서드를 피하기 위해 링크 된 패키지를 가져올 수 있습니다. 그러나 이것은 장난감의 예일뿐입니다.

+0

고마워요. 내가 가야 할 것처럼 보입니다. 그래서 놀랍지 만 주어진 C#은 비즈니스 개발자에게 기대다. 이것은 존재하지 않는다. – MX313