/**
* 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.analytics.financial.timeseries.util.TimeSeriesDataTestUtils;
import com.opengamma.timeseries.DoubleTimeSeries;
/**
* The Treynor ratio is a measure of the excess return with respect to the
* risk-free rate per unit of systematic risk. The systematic risk is the beta
* of the asset or portfolio with respect to the asset.
* <p>
* The Treynor ratio is defined as:
* $$
* \begin{eqnarray*}
* T = \frac{R_i - R_f}{\beta_i}
* \end{eqnarray*}
* $$
* where $R_i$ is the asset return, $R_f$ is the risk-free return and $\beta_i$
* is the portfolio's beta.
*/
public class TreynorRatioCalculator {
private final DoubleTimeSeriesStatisticsCalculator _expectedAssetReturnCalculator;
private final DoubleTimeSeriesStatisticsCalculator _expectedRiskFreeReturnCalculator;
public TreynorRatioCalculator(final DoubleTimeSeriesStatisticsCalculator expectedAssetReturnCalculator,
final DoubleTimeSeriesStatisticsCalculator expectedRiskFreeReturnCalculator) {
Validate.notNull(expectedAssetReturnCalculator, "expected asset return calculator");
Validate.notNull(expectedRiskFreeReturnCalculator, "expected risk free return calculator");
_expectedAssetReturnCalculator = expectedAssetReturnCalculator;
_expectedRiskFreeReturnCalculator = expectedRiskFreeReturnCalculator;
}
/**
* Calculates the Treynor ratio
* @param assetReturnTS The asset price time series
* @param riskFreeReturnTS The risk-free return time series
* @param beta The beta of the asset
* @return The Treynor ratio
*/
public double evaluate(final DoubleTimeSeries<?> assetReturnTS, final DoubleTimeSeries<?> riskFreeReturnTS, final double beta) {
TimeSeriesDataTestUtils.testNotNullOrEmpty(assetReturnTS);
TimeSeriesDataTestUtils.testNotNullOrEmpty(riskFreeReturnTS);
final Double expectedAssetReturn = _expectedAssetReturnCalculator.evaluate(assetReturnTS);
final Double expectedRiskFreeReturn = _expectedRiskFreeReturnCalculator.evaluate(riskFreeReturnTS);
return (expectedAssetReturn - expectedRiskFreeReturn) / beta;
}
}