@railpath/finance-toolkit
Version:
Production-ready finance library for portfolio construction, risk analytics, quantitative metrics, and ML-based regime detection
36 lines (35 loc) • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculateSharpeRatio = calculateSharpeRatio;
const SharpeRatioOptionsSchema_1 = require("../schemas/SharpeRatioOptionsSchema");
const SharpeRatioResultSchema_1 = require("../schemas/SharpeRatioResultSchema");
const calculateStandardDeviation_1 = require("./calculateStandardDeviation");
/**
* Calculate Sharpe Ratio
*
* Sharpe = (Mean Return - Risk-Free Rate) / StdDev
*
* @param options - Returns, risk-free rate, annualization factor
* @returns Sharpe Ratio and related metrics
*/
function calculateSharpeRatio(options) {
const { returns, riskFreeRate, annualizationFactor } = SharpeRatioOptionsSchema_1.SharpeRatioOptionsSchema.parse(options);
// Mean return
const meanReturn = returns.reduce((sum, r) => sum + r, 0) / returns.length;
// Annualized return
const annualizedReturn = meanReturn * annualizationFactor;
// Standard deviation
const stdDev = (0, calculateStandardDeviation_1.calculateStandardDeviation)(returns);
// Annualized volatility
const annualizedVolatility = stdDev * Math.sqrt(annualizationFactor);
// Excess return
const excessReturn = annualizedReturn - riskFreeRate;
// Sharpe Ratio
const sharpeRatio = annualizedVolatility !== 0 ? excessReturn / annualizedVolatility : 0;
return SharpeRatioResultSchema_1.SharpeRatioResultSchema.parse({
sharpeRatio,
annualizedReturn,
annualizedVolatility,
excessReturn,
});
}