UNPKG

@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
"use strict"; 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, }); }