Tasa libre de riesgo en el ratio de Sharpe
Aprenda a ajustar el rendimiento de un Treasury bill a la frecuencia de sus retornos y por qué usar una tasa fija puede distorsionar el ratio de Sharpe.
La tasa libre de riesgo en el ratio de Sharpe es la rentabilidad que podría haber obtenido durante el mismo periodo sin asumir el riesgo que está evaluando. Es una serie, con una observación por periodo, expresada en la moneda de las rentabilidades. Haga coincidir su frecuencia con la frecuencia de las rentabilidades y réstela periodo por periodo. Anualice una sola vez, al final.
Omitir ese procedimiento es la causa de la mayoría de los errores en los ratios de Sharpe publicados. Tomar un único dato de una historia de rentabilidades de veinte años —por lo general, lo que paga un Treasury bill esta semana— aplica a 2009 el mismo umbral que a 2024. Nuestra guía sobre el ratio de Sharpe explica qué mide el ratio. Esta página aborda el insumo que casi nadie documenta.
La tasa libre de riesgo no es constante
Un ratio de Sharpe medido durante veinte años abarca una historia de tasas. El panel siguiente toma el Treasury bill a tres meses y resume cada año calendario mediante un promedio y el rango a su alrededor.
El SQL exacto detrás de cada cifra
SELECT
toString(toYear(date)) AS year,
round(avg(toFloat64(yield_3_month)), 2) AS avg_bill_pct,
round(min(toFloat64(yield_3_month)), 2) AS low_bill_pct,
round(max(toFloat64(yield_3_month)), 2) AS high_bill_pct
FROM global_markets.treasury_yields
WHERE date >= '2005-01-01'
AND yield_3_month IS NOT NULL
GROUP BY year
ORDER BY yearEl promedio anual fue de 3.22% en 2005 y de 3.74% en 2026, a lo largo de 22 años calendario. Lo importante es la trayectoria entre esas dos observaciones. La línea cae hasta el piso, permanece allí durante la mayor parte de una década y luego vuelve a subir. Las columnas de mínimos y máximos muestran cuánto se movió la tasa dentro de cada año. Por eso, incluso un ratio de Sharpe a un año requiere una serie alineada y no una sola cotización.
Qué tasa libre de riesgo corresponde al ratio de Sharpe
Cuatro características determinan la elección.
- Vencimiento corto. La tasa debe ser prácticamente cierta durante un periodo de medición. Un bill a tres meses sirve para un análisis mensual. Un bono a diez años no, porque su precio se mueve durante el mes que se está midiendo.
- La moneda de la rentabilidad. Una estrategia denominada en euros se evalúa frente a un bill en euros.
- La frecuencia de la rentabilidad. Los rendimientos de los bills se cotizan como tasas anuales. Una cotización anual debe convertirse a una tasa mensual antes de compararla con una rentabilidad mensual.
- Definiciones comparables en ambos lados. El rendimiento de un bill representa toda su rentabilidad. Por tanto, una rentabilidad de estrategia que excluye dividendos no se mide sobre una base comparable. Rentabilidad por precio frente a rentabilidad total explica esa diferencia.
La conversión mencionada en el punto tres utiliza dos convenciones. La división simple divide la cotización anual entre doce. La capitalización toma la raíz duodécima de uno más la tasa anual. Para un bill hipotético al 5%, esos métodos producen 0.4167% y 0.4074% para el mes. La diferencia es de aproximadamente un punto base y se repite en cada mes de la muestra. Los paneles de esta página utilizan capitalización. Si le interesan los rendimientos de los bills como inversión y no como umbral de comparación, rendimiento por dividendo frente a rendimientos de los Treasury y dónde colocar el efectivo ocioso cubren ese tema.
Cómo construir una serie mensual de rentabilidades en exceso
La construcción es mecánica: tome el último cierre de cada mes, calcule la rentabilidad mensual, convierta la cotización mensual del bill a una tasa mensual y después reste. El resultado es una serie de rentabilidades en exceso, con un dato por mes. Cómo se miden las rentabilidades mensuales explica en detalle el componente de rentabilidad.
El SQL exacto detrás de cada cifra
WITH
monthly_px AS
(
SELECT
toStartOfMonth(date) AS m,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2019-12-01'
AND date < '2025-01-01'
GROUP BY m
),
prior_px AS
(
SELECT
addMonths(m, 1) AS m,
month_close AS prev_close
FROM monthly_px
),
monthly_rf AS
(
SELECT
toStartOfMonth(date) AS m,
pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
FROM global_markets.treasury_yields
WHERE date >= '2019-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
GROUP BY m
)
SELECT
toString(cur.m) AS month,
round(100 * (cur.month_close / prv.prev_close - 1), 2) AS spy_ret_pct,
round(100 * rf.rf_month, 3) AS rf_pct,
round(100 * (cur.month_close / prv.prev_close - 1 - rf.rf_month), 2) AS excess_pct
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
ORDER BY cur.mSe trata de cierres de SPY. Por tanto, la columna de rentabilidad muestra la rentabilidad por precio y excluye los dividendos. La columna libre de riesgo comienza en 0.128% para el primer mes mostrado y termina en 0.359%. Frente a meses de renta variable con movimientos de varios puntos porcentuales, la franja de la tasa libre de riesgo parece un redondeo. Sin embargo, a lo largo de 60 meses de sustracciones, representa toda la diferencia entre dos ratios de Sharpe que supuestamente miden lo mismo.
Reste primero y anualice después
Una vez alineadas las series, hay dos órdenes de cálculo posibles y no producen el mismo resultado. Primero el exceso: reste la tasa mensual de la rentabilidad mensual y después anualice la serie de excesos. Primero la anualización: capitalice las rentabilidades hasta obtener una cifra anual, capitalice el bill hasta obtener otra cifra anual y luego reste una de la otra.
El SQL exacto detrás de cada cifra
WITH
monthly_px AS
(
SELECT
toStartOfMonth(date) AS m,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2004-12-01'
AND date < '2025-01-01'
GROUP BY m
),
prior_px AS
(
SELECT
addMonths(m, 1) AS m,
month_close AS prev_close
FROM monthly_px
),
monthly_rf AS
(
SELECT
toStartOfMonth(date) AS m,
pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
FROM global_markets.treasury_yields
WHERE date >= '2004-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
GROUP BY m
),
excess AS
(
SELECT
cur.m AS m,
cur.month_close / prv.prev_close - 1 AS ret,
rf.rf_month AS rf_month,
cur.month_close / prv.prev_close - 1 - rf.rf_month AS exc
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
)
SELECT
concat(toString(intDiv(count(), 12)), '-year') AS horizon,
round(100 * (exp(12 * avg(log(1 + exc))) - 1), 2) AS excess_first_pct,
round(100 * ((exp(12 * avg(log(1 + ret))) - 1)
- (exp(12 * avg(log(1 + rf_month))) - 1)), 2) AS annualize_first_pct,
round(100 * ((exp(12 * avg(log(1 + ret))) - 1)
- (exp(12 * avg(log(1 + rf_month))) - 1)
- (exp(12 * avg(log(1 + exc))) - 1)), 3) AS gap_pct
FROM excess
CROSS JOIN (SELECT arrayJoin([1, 3, 5, 10, 20]) AS years) AS hz
WHERE m >= subtractYears(toDate('2025-01-01'), years)
GROUP BY years
ORDER BY yearsDurante el periodo de 20-year, el resultado de restar primero es 6.49% anual, frente a 6.59% con el otro orden. La diferencia es de 0.099 puntos porcentuales. En el periodo de 1-year, los mismos dos cálculos quedan separados por 0.814 puntos. La cifra anualizada antes de la resta aparece por encima de la cifra obtenida al restar primero en todos los periodos mostrados. La diferencia es un término cruzado: capitalizar una serie de rentabilidades hasta obtener una cifra anual incluye el rendimiento de la tasa libre de riesgo sobre la propia prima de riesgo. Restar después una tasa libre de riesgo anualizada nunca elimina ese componente. El término cruzado aumenta con el producto de las dos cifras anualizadas. Por eso es mayor cuando los bills ofrecen rendimientos elevados.
La anualización también tiene dos alternativas. La anualización aritmética multiplica la media mensual del exceso por doce. La anualización geométrica capitaliza las rentabilidades y obtiene la tasa anual constante que reproduce el resultado acumulado. Considere una secuencia hipotética de dos periodos: +50% seguida de -33.3%, que termina exactamente en el punto de partida. El promedio aritmético es de +8.35% por periodo y el promedio geométrico es cero. Los paneles de esta página utilizan capitalización. Conviene conservar una nota: con anualización aritmética, doce veces la rentabilidad media menos doce veces la tasa libre de riesgo media equivale algebraicamente a doce veces el exceso medio. Con esa convención, el orden de la resta no modifica el numerador. El denominador sí cambia, porque la desviación estándar de las rentabilidades en exceso deja de coincidir con la desviación estándar de las rentabilidades brutas cuando la propia tasa se mueve.
El costo de utilizar una tasa fija en el resultado
El atajo habitual consiste en tomar el rendimiento actual del bill y restarlo de cada periodo de la historia. El panel siguiente calcula el ratio de Sharpe de las dos formas en cinco periodos que terminan en la misma fecha: una vez frente a la serie mensual alineada y otra frente al rendimiento del bill vigente al final de cada periodo.
El SQL exacto detrás de cada cifra
WITH
monthly_px AS
(
SELECT
toStartOfMonth(date) AS m,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2004-12-01'
AND date < '2025-01-01'
GROUP BY m
),
prior_px AS
(
SELECT
addMonths(m, 1) AS m,
month_close AS prev_close
FROM monthly_px
),
monthly_rf AS
(
SELECT
toStartOfMonth(date) AS m,
pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
FROM global_markets.treasury_yields
WHERE date >= '2004-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
GROUP BY m
),
excess AS
(
SELECT
cur.m AS m,
cur.month_close / prv.prev_close - 1 AS ret,
rf.rf_month AS rf_month
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
)
SELECT
concat(toString(intDiv(count(), 12)), '-year') AS horizon,
round(sqrt(12) * avg(ret - rf_month) / stddevSamp(ret - rf_month), 2) AS sharpe_matched_rf,
round(sqrt(12) * avg(ret - rf_fixed) / stddevSamp(ret - rf_fixed), 2) AS sharpe_fixed_rf,
round(abs(sqrt(12) * avg(ret - rf_month) / stddevSamp(ret - rf_month)
- sqrt(12) * avg(ret - rf_fixed) / stddevSamp(ret - rf_fixed)), 2) AS abs_gap
FROM excess
CROSS JOIN
(
SELECT pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_fixed
FROM global_markets.treasury_yields
WHERE date >= '2024-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
) AS fixed_rate
CROSS JOIN (SELECT arrayJoin([1, 3, 5, 10, 20]) AS years) AS hz
WHERE m >= subtractYears(toDate('2025-01-01'), years)
GROUP BY years
ORDER BY yearsEn el periodo de 1-year, las dos lecturas quedan separadas por 0.07. En doce meses, la tasa fija tiene poco margen para alejarse del promedio del propio periodo. En el periodo de 20-year, la diferencia es de 0.18: 0.49 con la serie alineada frente a 0.32 con la tasa fija. El error sigue la distancia entre la tasa elegida y la tasa promedio que realmente prevaleció. Esa distancia tiene más margen para aumentar cuanto más largo es el periodo. Todo cálculo posterior hereda el error. objetivo de volatilidad y tamaño de posición utiliza insumos exactamente de este tipo.
La trampa de la moneda
Una estrategia que genera rentabilidades en una moneda y se evalúa frente al bill de otra produce una cifra que tiene poco significado en cualquiera de las dos. Calcule la rentabilidad en exceso dentro de una sola moneda: rentabilidades en euros frente a un bill en euros y rentabilidades en yenes frente a un bill en yenes. Las estrategias con cobertura cambiaria tienen una segunda trampa. Una cobertura cambiaria se fija a partir del forward. Los puntos forward suelen aproximarse al diferencial de tasas de interés entre las dos monedas, lo que ya incorpora parte de la tasa doméstica en una rentabilidad extranjera cubierta. Restar además el bill extranjero implica cobrar la misma tasa dos veces. Indique la moneda junto a la tasa y la ambigüedad desaparece.
Publique la tasa junto con el ratio
Un ratio de Sharpe publicado sin indicar la fuente y la frecuencia de su tasa libre de riesgo no puede ser verificado. Dos mesas de operación pueden calcular 0.8 y 1.1 a partir de la misma serie de rentabilidades y ambas cifras pueden ser correctas si utilizan series de tasas y convenciones de conversión distintas. Cuatro elementos deben acompañar al dato: el instrumento del que provino la tasa, su frecuencia, la convención de conversión y el periodo exacto. Esa es la diferencia entre una cifra que el lector puede auditar y una cifra que debe aceptar sin comprobarla.
Notas de datos y reproducibilidad
La serie de tasas utilizada en cada panel corresponde al Treasury bill a tres meses de la curva diaria de rendimientos del Treasury. Se promedia dentro de cada mes calendario y se convierte a una tasa mensual mediante la raíz duodécima de uno más la cotización anual. Las rentabilidades son cierres mensuales de SPY, únicamente por precio y con los dividendos excluidos. Los ratios utilizan la desviación estándar muestral de las rentabilidades mensuales en exceso y la raíz cuadrada de doce para la anualización. Los dos últimos paneles utilizan periodos que terminan en una fecha común. La columna de tasa fija toma la cotización promedio del bill en el último mes de cada periodo. Todas las cifras mencionadas en el texto anterior provienen del panel correspondiente.
Preguntas frecuentes
¿Qué tasa libre de riesgo debo utilizar en el ratio de Sharpe?
Un bill gubernamental de vencimiento corto y denominado en la misma moneda que las rentabilidades, convertido a la misma frecuencia. Para rentabilidades mensuales en USD, esto significa el Treasury bill a uno o tres meses. Los vencimientos más largos incorporan riesgo de precio durante el periodo de medición, lo que los descarta como componente libre de riesgo.
¿Puedo restar el rendimiento actual del Treasury bill a una historia larga de rentabilidades?
Es el error más común en los ratios de Sharpe publicados. En el periodo de 20-year mostrado arriba, una tasa fija al final del periodo y la serie mensual alineada producen lecturas separadas por 0.18 sobre las mismas rentabilidades.
¿Debo anualizar la tasa libre de riesgo antes de restarla?
No. Convierta la cotización anual del bill a la frecuencia de la rentabilidad, réstela periodo por periodo y anualice la serie de excesos una sola vez al final. Anualizar cada componente por separado y restarlos después deja un término cruzado en el resultado.
¿Cuánto cambia la tasa libre de riesgo un ratio de Sharpe?
Aproximadamente, el cambio en la tasa dividido entre la volatilidad anualizada. En una estrategia hipotética con una volatilidad anualizada del 15%, una diferencia de 4% en la tasa asumida cambia el ratio en aproximadamente 0.27. Esa es la distancia entre un historial ordinario y uno celebrado.
¿Cuál es la diferencia entre la anualización aritmética y la geométrica?
La anualización aritmética multiplica el exceso promedio por periodo por el número de periodos de un año. La geométrica capitaliza los periodos hasta obtener la tasa constante que reproduce el resultado acumulado. Por periodo, la cifra geométrica es igual o inferior a la aritmética. La diferencia aumenta con la volatilidad.
Cada panel incluye el SQL que lo generó, por lo que tanto la serie de tasas como el periodo son visibles. Para ejecutar la misma construcción con otro ticker u otro tramo histórico, solicítelo en lenguaje sencillo en la terminal de Strasmore.