numeraire.core.stats.performance_fee#

numeraire.core.stats.performance_fee(candidate: NDArray[float64], benchmark: NDArray[float64], gamma: float) float[source]#

Quadratic-utility performance fee (Fleming-Kirby-Ostdiek; Kirby-Ostdiek 2012 eq. 23).

The maximum per-period fee an investor with U(R) = R - gamma/2 R^2 would pay to switch from benchmark to candidate (both raw return series): the fee solving E[U(benchmark)] = E[U(candidate - fee)]. Annualize as fee * periods (* 1e4 for bp/yr). Positive => the candidate is worth paying for; NaN when no real fee equates the two utilities (a deeply dominated candidate). NaNs are dropped pairwise.