UNPKG

@railpath/finance-toolkit

Version:

Production-ready finance library for portfolio construction, risk analytics, quantitative metrics, and ML-based regime detection

34 lines (33 loc) 1.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateCalmarRatio = calculateCalmarRatio; const CalmarRatioOptionsSchema_1 = require("../schemas/CalmarRatioOptionsSchema"); const CalmarRatioResultSchema_1 = require("../schemas/CalmarRatioResultSchema"); const calculateMaxDrawdown_1 = require("./calculateMaxDrawdown"); /** * Calculate Calmar Ratio * * Calmar = Annualized Return / Max Drawdown * * Measures return per unit of downside risk (drawdown). * Higher is better; typically calculated over 36 months. * * @param options - Prices, returns, annualization factor * @returns Calmar Ratio and components */ function calculateCalmarRatio(options) { const { prices, returns, annualizationFactor } = CalmarRatioOptionsSchema_1.CalmarRatioOptionsSchema.parse(options); // Mean return const meanReturn = returns.reduce((sum, r) => sum + r, 0) / returns.length; // Annualized return const annualizedReturn = meanReturn * annualizationFactor; // Max Drawdown const { maxDrawdownPercent } = (0, calculateMaxDrawdown_1.calculateMaxDrawdown)({ prices }); // Calmar Ratio (use absolute value of drawdown) const calmarRatio = maxDrawdownPercent !== 0 ? annualizedReturn / Math.abs(maxDrawdownPercent) : 0; return CalmarRatioResultSchema_1.CalmarRatioResultSchema.parse({ calmarRatio, annualizedReturn, maxDrawdownPercent, }); }