Source code for qf_lib.common.utils.ratios.information_ratio
from qf_lib.common.enums.frequency import Frequency
from qf_lib.common.utils.returns.get_aggregate_returns import get_aggregate_returns
from qf_lib.containers.series.qf_series import QFSeries
[docs]def information_ratio(portfolio: QFSeries, benchmark: QFSeries) -> float:
"""
The function calculates information ratio based on monthly returns.
Return of higher frequency will be aggregated into monthly.
"""
portfolio_monthly = get_aggregate_returns(portfolio, Frequency.MONTHLY)
benchmark_monthly = get_aggregate_returns(benchmark, Frequency.MONTHLY)
portfolio_avg = portfolio_monthly.mean()
benchmark_avg = benchmark_monthly.mean()
excess_ret = portfolio_monthly - benchmark_monthly
tracking_error = excess_ret.std()
information_ratio_value = (portfolio_avg - benchmark_avg) / tracking_error
return information_ratio_value