/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.riskreward; import org.apache.commons.lang.Validate; import com.opengamma.analytics.financial.timeseries.analysis.DoubleTimeSeriesStatisticsCalculator; import com.opengamma.timeseries.DoubleTimeSeries; /** * The Jensen alpha computes the abnormal return of an asset or portfolio over * the theoretical expected return i.e. the difference between the average * return of the asset and the average return of a benchmark portfolio whose * market risk is the same as that of the fund. * <p> * The Jensen alpha is defined as: * $$ * \begin{eqnarray*} * \alpha_J = R_i - [R_f + \beta_{iM}(R_M - R_f)] * \end{eqnarray*} * $$ * where $R_i$ is the asset return, $R_f$ is the risk-free rate, $\beta_{iM}$ * is the beta of the asset with respect to the market and $R_M$ is the market * return. */ public class JensenAlphaCalculator { private final DoubleTimeSeriesStatisticsCalculator _expectedAssetReturnCalculator; private final DoubleTimeSeriesStatisticsCalculator _expectedRiskFreeReturnCalculator; private final DoubleTimeSeriesStatisticsCalculator _expectedMarketReturnCalculator; public JensenAlphaCalculator(final DoubleTimeSeriesStatisticsCalculator expectedAssetReturnCalculator, final DoubleTimeSeriesStatisticsCalculator expectedRiskFreeReturnCalculator, final DoubleTimeSeriesStatisticsCalculator expectedMarketReturnCalculator) { Validate.notNull(expectedAssetReturnCalculator, "expected asset return calculator"); Validate.notNull(expectedRiskFreeReturnCalculator, "expected risk free return calculator"); Validate.notNull(expectedMarketReturnCalculator, "expected market return calculator"); _expectedAssetReturnCalculator = expectedAssetReturnCalculator; _expectedRiskFreeReturnCalculator = expectedRiskFreeReturnCalculator; _expectedMarketReturnCalculator = expectedMarketReturnCalculator; } /** * Calculates Jensen's alpha * @param assetReturnTS The return time series of the asset * @param riskFreeReturnTS The risk-free return series * @param beta The beta of the asset to the market * @param marketReturnTS The market return series * @return The Jensen alpha */ public double evaluate(final DoubleTimeSeries<?> assetReturnTS, final DoubleTimeSeries<?> riskFreeReturnTS, final double beta, final DoubleTimeSeries<?> marketReturnTS) { Validate.notNull(assetReturnTS, "asset return time series"); Validate.notNull(riskFreeReturnTS, "risk-free return time series"); Validate.notNull(marketReturnTS, "market return time series"); final double assetReturn = _expectedAssetReturnCalculator.evaluate(assetReturnTS); final double riskFreeReturn = _expectedRiskFreeReturnCalculator.evaluate(riskFreeReturnTS); final double marketReturn = _expectedMarketReturnCalculator.evaluate(marketReturnTS); return assetReturn - riskFreeReturn * (1 - beta) - beta * marketReturn; } }