/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.equity.capm; import static com.opengamma.analytics.financial.timeseries.util.TimeSeriesDataTestUtils.testTimeSeriesDates; import static com.opengamma.analytics.financial.timeseries.util.TimeSeriesDataTestUtils.testTimeSeriesSize; import org.apache.commons.lang.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.analytics.financial.timeseries.analysis.DoubleTimeSeriesStatisticsCalculator; import com.opengamma.analytics.math.function.Function; import com.opengamma.timeseries.DoubleTimeSeries; /** * */ public class CAPMBetaCalculator implements Function<DoubleTimeSeries<?>, Double> { private static final Logger s_logger = LoggerFactory.getLogger(CAPMBetaCalculator.class); private final DoubleTimeSeriesStatisticsCalculator _covarianceCalculator; private final DoubleTimeSeriesStatisticsCalculator _varianceCalculator; //TODO switch to CovarianceCalculator public CAPMBetaCalculator(final DoubleTimeSeriesStatisticsCalculator covarianceCalculator, final DoubleTimeSeriesStatisticsCalculator varianceCalculator) { Validate.notNull(covarianceCalculator, "covariance calculator"); Validate.notNull(varianceCalculator, "variance calculator"); _covarianceCalculator = covarianceCalculator; _varianceCalculator = varianceCalculator; } @Override public Double evaluate(final DoubleTimeSeries<?>... ts) { Validate.notNull(ts, "ts"); final int n = ts.length; Validate.isTrue(n > 1); if (n > 3) { s_logger.warn("Found more than two time series; will only use the first two"); } final DoubleTimeSeries<?> assetReturn = ts[0]; final DoubleTimeSeries<?> marketReturn = ts[1]; testTimeSeriesSize(assetReturn, 2); testTimeSeriesSize(marketReturn, 2); testTimeSeriesDates(assetReturn, marketReturn); return _covarianceCalculator.evaluate(assetReturn, marketReturn) / _varianceCalculator.evaluate(marketReturn); } }