Strasmore Research
Обучение Matt ConnorАвтор: Matt Connor

Безрисковая ставка в коэффициенте Шарпа: как выбрать

Безрисковая ставка меняется со временем. Узнайте, как соотнести доходность векселей с частотой ваших данных и почему использование одной фиксированной ставки искажает результат.

Безрисковая ставка в коэффициенте Шарпа — это доходность, которую можно было бы получить за тот же период без принятия риска, который вы оцениваете. Это временной ряд, по одному значению на период, выраженный в валюте доходности. Приведите частоту ставки в соответствие с частотой доходности и вычитайте их период за периодом. Годовое значение рассчитывается один раз, в самом конце.

Игнорирование этой процедуры — главная ошибка большинства опубликованных коэффициентов Шарпа. Если взять одно число из двадцатилетней истории доходности (обычно текущую ставку по казначейским векселям) и применить её к 2009 году так же, как к 2024 году, вы уравниваете совершенно разные рыночные условия. Наше руководство по коэффициенту Шарпа описывает, что именно измеряет этот показатель. На этой странице рассматриваются исходные данные, которые почти никто не документирует.

Безрисковая ставка не является константой

Коэффициент Шарпа, рассчитанный за двадцать лет, охватывает историю изменения ставок. В таблице ниже представлены трехмесячные казначейские векселя, где каждый календарный год свернут в среднее значение и диапазон его колебаний.

ЗапросДоходность трехмесячных казначейских векселей по календарным годам
Точный SQL-код для каждого числа
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 year
Run this yourself

Среднегодовое значение составило 3.22% в 2005 и 3.74% в 2026 за 22 календарных лет. Важен именно путь между этими двумя точками. Линия опускается до минимума, остается там почти десятилетие, а затем снова растет. Столбцы минимума и максимума показывают, насколько сильно менялась ставка в течение одного года; именно поэтому даже для годового коэффициента Шарпа требуется сопоставимый ряд данных, а не одна котировка.

Какая безрисковая ставка подходит для коэффициента Шарпа

Выбор определяется четырьмя свойствами.

  1. Короткий срок погашения. Ставка должна быть практически гарантированной на протяжении одного периода измерения. Трехмесячный вексель подходит для работы с месячными данными. Десятилетняя облигация — нет, так как её цена меняется в течение месяца, который вы измеряете.
  2. Валюта доходности. Стратегия, номинированная в евро, оценивается относительно векселя в евро.
  3. Частота доходности. Доходность векселей котируется как годовая ставка, и перед сопоставлением с месячной доходностью годовую котировку необходимо конвертировать.
  4. Сопоставимые определения доходности. Доходность векселя — это его полная доходность, поэтому доходность стратегии, исключающая дивиденды, измеряется на иных основаниях. Ценовая доходность против полной доходности раскрывает эту разницу.

Для конвертации в пункте три используются два метода. Простое деление годовой котировки на двенадцать. Капитализация через корень двенадцатой степени из единицы плюс годовая ставка. Для гипотетического векселя с доходностью 5% это дает 0,4167% и 0,4074% в месяц — разница примерно в один базисный пункт, которая повторяется каждый месяц выборки. В таблицах здесь используется капитализация. Если доходность векселей интересует вас как инструмент для хранения средств, а не как пороговое значение, см. дивидендная доходность против доходности казначейских облигаций и где разместить свободные денежные средства.

Как построить ряд месячной избыточной доходности

Построение механистично: возьмите цену закрытия каждого месяца, рассчитайте доходность за месяц, конвертируйте месячную котировку векселя в месячную ставку, затем вычтите её. Результатом будет ряд избыточной доходности, по одному числу на месяц. Как измеряется месячная доходность подробно описывает этот этап.

ЗапросМесячная доходность, безрисковая ставка и премия за риск, 2020–2024 гг.
Точный SQL-код для каждого числа
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.m
Run this yourself

Это цены закрытия SPY, поэтому столбец доходности представляет собой ценовую доходность без учета дивидендов. Столбец безрисковой ставки начинается с 0.128% для первого месяца и заканчивается на 0.359%. На фоне колебаний акций в несколько процентов безрисковая составляющая выглядит как округление. Однако за 60 месяцев вычитания именно она составляет всю разницу между двумя коэффициентами Шарпа, которые претендуют на измерение одного и того же показателя.

Сначала вычитание, затем годовое приведение

Существует два порядка операций после выравнивания рядов, и они дают разные результаты. Сначала избыток: вычтите месячную ставку из месячной доходности, затем приведите ряд избыточной доходности к годовому значению. Сначала годовое приведение: капитализируйте доходность в годовой показатель, капитализируйте ставку векселя в годовой показатель, затем вычтите одно из другого.

ЗапросГодовая премия за риск: вычитание помесячно или предварительная годовая нормализация
Точный SQL-код для каждого числа
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 years
Run this yourself

За период 20-year ответ при вычитании избытка первым составляет 6.49% годовых против 6.59% при другом порядке, разница — 0.099 процентных пункта. За период 1-year те же два расчета дают разницу в 0.814 пункта. Показатель с предварительным годовым приведением всегда выше, чем при вычитании избытка первым. Их разделяет перекрестный член: капитализация ряда доходности в годовое число включает получение ставки по векселю сверх самой премии за риск, и последующее вычитание годовой ставки векселя не убирает этот компонент. Перекрестный член масштабируется как произведение двух годовых показателей, поэтому он наиболее велик, когда векселя приносят высокую доходность.

У годового приведения есть вторая развилка. Арифметическое приведение умножает средний месячный избыток на двенадцать. Геометрическое приведение использует капитализацию: это постоянная годовая ставка, которая воспроизводит кумулятивный результат. Возьмем гипотетический двухпериодный цикл: +50% и -33,3%, что возвращает нас к исходной точке. Арифметическое среднее составляет +8,35% за период, а геометрическое — ноль. В таблицах здесь используется капитализация. Важное примечание: при арифметическом приведении двенадцать умножить на среднюю доходность минус двенадцать умножить на среднюю ставку векселя алгебраически равно двенадцати умножить на средний избыток. При таком подходе порядок вычитания не влияет на числитель. Знаменатель все равно меняется, так как стандартное отклонение избыточной доходности отличается от стандартного отклонения «сырой» доходности, когда сама ставка меняется.

Цена использования одной фиксированной ставки

Распространенный упрощенный подход — взять текущую доходность векселя и вычитать её из каждого периода в истории. В таблице ниже коэффициент Шарпа рассчитан обоими способами для пяти периодов, заканчивающихся на одну и ту же дату: один раз с использованием сопоставимого месячного ряда, другой — с использованием доходности векселя, действующей на конец периода.

ЗапросКоэффициент Шарпа: сравнение с фиксированной ставкой и с соответствующим временным рядом
Точный SQL-код для каждого числа
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 years
Run this yourself

Для периода 1-year значения различаются на 0.07. За двенадцать месяцев у фиксированной ставки мало возможностей отклониться от среднего значения за период. За период 20-year они различаются на 0.18: 0.49 по сопоставимому ряду против 0.32 по фиксированной ставке. Ошибка отслеживает расстояние между выбранной вами ставкой и средней ставкой, которая реально действовала; это расстояние увеличивается по мере удлинения периода. Любые последующие расчеты наследуют эту ошибку, а таргетирование волатильности и определение размера позиции опираются именно на такие входные данные.

Валютная ловушка

Стратегия, которая зарабатывает в одной валюте и оценивается относительно векселя в другой валюте, дает число, не имеющее смысла ни в одной из них. Рассчитывайте избыточную доходность в рамках одной валюты: доходность в евро против векселя в евро, доходность в иенах против векселя в иенах. Хеджированные стратегии содержат вторую ловушку. Валютный хедж оценивается по форварду, а форвардные пункты близки к разнице процентных ставок между двумя валютами, что уже включает часть внутренней ставки в хеджированную иностранную доходность. Вычитание иностранного векселя сверх этого учитывает одну и ту же ставку дважды. Указывайте валюту рядом со ставкой, и двусмысленность исчезнет.

Публикуйте ставку вместе с коэффициентом

Коэффициент Шарпа, указанный без источника безрисковой ставки и её частоты, невозможно проверить. Два аналитика могут получить 0,8 и 1,1 из одного и того же потока доходности, и оба будут правы, работая с разными рядами ставок и разными методами конвертации. С числом должны идти четыре элемента: инструмент, из которого взята ставка, её частота, метод конвертации и точный период. В этом разница между числом, которое читатель может проверить, и числом, которое приходится принимать на веру.

Примечания к данным и воспроизводимость

Ряд ставок в каждой таблице — это трехмесячный казначейский вексель из ежедневной кривой доходности казначейских облигаций, усредненный внутри каждого календарного месяца и конвертированный в месячную ставку как корень двенадцатой степени из единицы плюс годовая котировка. Доходность — цены закрытия SPY на конец месяца, только ценовая доходность, без учета дивидендов. Коэффициенты используют выборочное стандартное отклонение месячной избыточной доходности и корень квадратный из двенадцати для годового приведения. Последние две таблицы используют периоды, заканчивающиеся на одну общую дату, а столбец фиксированной ставки берет среднюю котировку векселя в последнем месяце этого периода. Каждая цифра в тексте выше взята из соответствующей таблицы.

Часто задаваемые вопросы

Какую безрисковую ставку следует использовать в коэффициенте Шарпа?

Короткий государственный вексель в той же валюте, что и доходность, конвертированный в ту же частоту, что и доходность. Для месячной доходности в USD это означает одномесячный или трехмесячный казначейский вексель. Более длинные сроки погашения несут ценовой риск в течение периода измерения, что исключает их из категории безрисковых инструментов.

Можно ли вычитать сегодняшнюю доходность казначейского векселя из длинной истории доходности?

Это самая распространенная ошибка в опубликованных коэффициентах Шарпа. За период 20-year выше фиксированная ставка на конец периода и сопоставимый месячный ряд дают значения, различающиеся на 0.18 при использовании одной и той же доходности.

Нужно ли приводить безрисковую ставку к годовому значению перед вычитанием?

Нет. Конвертируйте годовую котировку векселя в частоту доходности, вычитайте период за периодом, затем приведите избыточный ряд к годовому значению один раз в конце. Годовое приведение каждого компонента отдельно и последующее вычитание оставляет в ответе перекрестный член.

Насколько сильно безрисковая ставка меняет коэффициент Шарпа?

Примерно на величину изменения ставки, деленную на годовую волатильность. Для гипотетической стратегии с годовой волатильностью 15% разница в 4% в предполагаемой ставке меняет коэффициент примерно на 0,27, что является дистанцией между обычным результатом и выдающимся.

В чем разница между арифметическим и геометрическим годовым приведением?

Арифметическое умножает средний избыток за период на количество периодов в году. Геометрическое капитализирует периоды в постоянную ставку, которая воспроизводит кумулятивный результат. За период геометрический показатель находится на уровне или ниже арифметического, и расстояние между ними увеличивается с ростом волатильности.


Каждая таблица здесь содержит SQL-запрос, который её создал, поэтому ряд ставок и период видны. Чтобы выполнить такое же построение для другого тикера или другого отрезка истории, запросите его на простом английском языке в терминале Strasmore.

#sharpe ratio#risk-free rate#excess returns#annualization#performance measurement