← Все работы
#018НовоеДоверие: СреднееДанные рынкаВозврат к среднему

101 формульная альфа

101 Formulaic Alphas

Zura Kakushadze · Quantigic Solutions LLC; Free University of Tbilisi · arXiv:1601.00991, препринт (2016) · 9 декабря 2015 · 22 стр. · Читать оригинал

Коротко

Тема

Возврат к среднему

Рынки

Акции

Таймфрейм

D1

Данные

OHLC, Объём, Фундаментальные данные

Доказательство

Данные рынка

Статус

Разобрано
Доверие: СреднееЧисла не пересчитывали.Тестируемых идей: 9

За работу: все 101 формула выписаны полностью вместе с определениями операторов и входных данных, поэтому любую альфу можно переписать и проверить на своих данных; таблицы регрессий даны целиком, с ошибками и t-статистиками. Против: препринт, все эмпирические числа посчитаны на закрытых данных WorldQuant за четыре года и без издержек, кода расчёта нет; у части операторов определение допускает два прочтения. Числа мы не пересчитывали.

Проверяемость

Код○ не приложен
Данные○ недоступны
Рецензирование○ нет, препринт
Конфликт интересов● не заявлен

Как читать этот разбор. Работа состоит из двух частей разного веса. Главное в ней это сами формулы: приложение A, где 101 альфа записана на маленьком языке операторов. Раздел 2 разбирает этот язык, раздел 3 показывает несколько альф по шагам, раздел 4 сводит весь каталог в таблицу групп. Вторая часть работы, эмпирика на закрытых данных, разобрана в разделе 5; её числа проверить нельзя. Все 101 формулу по отдельности мы не разбираем: они лежат в открытом доступе по ссылке.

Главный тезис

Автор публикует 101 торговую альфу для американских акций в виде явных формул. В аннотации: "We present explicit formulas – that are also computer code – for 101 real-life quantitative trading alphas." Формулы короткие и записаны на языке из двух десятков операторов, поэтому, как только операторы определены, каждая формула исполняется как код.

Альфы принадлежат WorldQuant LLC и опубликованы с её разрешения. В заключении автор подчёркивает, что это не учебные примеры: "In fact, 80 of these alphas are in production as of this writing." Какие именно 80, не сказано: "For proprietary reasons, we are not at liberty to state precisely which ones."

К формулам приложены три эмпирических результата по самим альфам за 2010–2013 годы:

  1. средний срок удержания примерно от 0.6 до 6.4 дня, то есть высоко- и среднечастотный горизонт;
  2. средняя попарная корреляция альф низкая: 15.9 %, медиана 14.3 %;
  3. доходность альфы растёт с её волатильностью, но значимо не зависит от оборота; и оборот плохо объясняет корреляции между альфами.

Выбраны эти 101 альфа не случайно: "We picked these alphas largely based on simplicity considerations", чтобы их можно было уместить в статью. Автор оговаривает, что существует множество других, «неформульных» альф, слишком сложных для публикации.

1. Что здесь называется альфой

Автор приводит определение из книги WorldQuant (Tulchinsky и др., 2015): альфа это сочетание математических выражений, кода и параметров настройки, которое вместе с историческими данными позволяет прогнозировать движение инструментов. И сразу уточняет: здесь слово употребляется в трейдерском смысле, как любой разумный прогноз ожидаемой доходности, на котором можно торговать, и это не обязательно то же, что «академическая» альфа, остаток регрессии на факторы риска.

Зачем столько альф. Во введении автор описывает две встречные тенденции. Всё больше участников ищут альфы количественными методами, и сами альфы от этого становятся слабее и короче: "This results in ever fainter and more ephemeral alphas." С другой стороны, поиск альф удаётся в основном автоматизировать, и их число идёт на сотни тысяч и миллионы. Торгуют при этом не отдельными альфами, а «мега-альфой», собранной из многих. Бонусы такой схемы, по словам автора: внутренний взаимозачёт сделок (покупка по одной альфе гасит продажу по другой, и это существенно экономит на издержках) и диверсификация на случай, если часть альф перестанет работать. Трудность объединения тоже названа: переменных слишком много, наблюдений мало, "Thus, the alpha sample covariance matrix is badly singular."

Возврат к среднему и моментум. Очень грубо, пишет автор, альфы делятся на эти два типа. Простейшая альфа возврата к среднему, формула (2) работы:

−ln⁡ ⁣(сегодняшнее открытиевчерашнее закрытие)-\ln\!\left(\frac{\text{сегодняшнее открытие}}{\text{вчерашнее закрытие}}\right)

Что это такое. Ставка на то, что ночной гэп частично закроется.

Что означает каждый значок. ln⁡\ln («натуральный логарифм»): для небольших изменений превращает отношение цен в доходность, ln⁡(1+x)≈x\ln(1+x) \approx x. Минус впереди переворачивает знак.

Счёт по шагам, наш пример. Вчера закрытие 100, сегодня открытие 102. Отношение 1.02, логарифм около 0.0198, с минусом −0.0198-0.0198. Сигнал отрицательный: акцию продаём, рассчитывая, что часть гэпа вернётся. Автор называет это прямо: "The idea (or hope) here is that the stock will mean-revert".

Зачем это нужно. Пример вводит понятие delay-0: данные альфы относятся к тому же моменту, когда альфа торгуется. Эту альфу надо исполнять на открытии или как можно ближе к нему. Вчерашнее закрытие при этом скорректировано на сплиты и дивиденды, если экс-дата сегодня.

Простейшая моментум-альфа, формула (3):

ln⁡ ⁣(вчерашнее закрытиевчерашнее открытие)\ln\!\left(\frac{\text{вчерашнее закрытие}}{\text{вчерашнее открытие}}\right)

Что это такое. Если вчера акция выросла внутри дня, сегодня её покупаем, рассчитывая на продолжение.

Зачем это нужно. Пример вводит delay-1: альфа торгуется на следующий день после даты самых свежих данных. Автор оговаривает, что та же формула, исполненная как можно ближе ко вчерашнему закрытию, была бы delay-0. Delay-2 определяется так же, с отставанием в два дня.

Из 101 альфы приложения четыре, по сноске автора, относятся к delay-0: номера 42, 48, 53 и 54. Их предполагается исполнять на закрытии того дня, по которому они посчитаны, или как можно ближе к нему.

2. Язык формул: операторы и данные

Приложение A.2 определяет операторы, из которых собраны все альфы. Все выражения нечувствительны к регистру: Ts_Rank и ts_rank это одно и то же.

Оператор Как читать Что делает
rank(x) ранг поперёк ранг значения среди всех акций в этот день
delay(x, d) задержка значение xx dd дней назад
delta(x, d) изменение сегодняшнее xx минус xx dd дней назад
correlation(x, y, d) скользящая корреляция корреляция рядов xx и yy за последние dd дней
covariance(x, y, d) скользящая ковариация то же для ковариации
ts_min(x, d), ts_max(x, d) минимум, максимум по времени минимум или максимум xx за dd дней
ts_argmax(x, d), ts_argmin(x, d) день максимума, минимума в какой из последних dd дней был максимум или минимум
ts_rank(x, d) ранг по времени место сегодняшнего xx среди его значений за dd дней
sum(x, d), product(x, d) сумма, произведение по последним dd дням
stddev(x, d) скользящее стандартное отклонение разброс xx за dd дней
decay_linear(x, d) линейно затухающее среднее среднее за dd дней с весами d,d−1,…,1d, d-1, \ldots, 1, нормированными к сумме 1
scale(x, a) нормировка масштабирует xx так, чтобы сумма модулей по акциям была aa (по умолчанию 1)
signedpower(x, a) степень в работе определено как xax^a
indneutralize(x, g) нейтрализация по отраслям вычитает из xx среднее по своей группе: сектору, отрасли, подотрасли
x ? y : z условие если xx истинно, то yy, иначе zz

Важное правило для всех операторов вида ts_…: "non-integer number of days d is converted to floor(d)", то есть дробное число дней округляется вниз. Это нужно знать, потому что во второй половине каталога окна заданы числами вроде 16.1219.

Входные данные (раздел A.3): returns (доходность от закрытия до закрытия), open, close, high, low, volume, vwap (средневзвешенная по объёму цена дня), cap (капитализация), adv{d} (средний дневной оборот в долларах за dd дней, например adv20) и IndClass, место для любой отраслевой классификации: GICS, BICS, NAICS, SIC. Автор оговаривает, что разные IndClass в одной альфе не обязаны относиться к одной классификации.

Почему rank стоит почти везде. Определение в работе одно слово: "cross-sectional rank". Смысл такой: важна не величина сигнала, а место акции среди остальных в тот же день. Это гасит выбросы (самая упавшая акция получает самый высокий ранг, упала она на 15 % или на 40 %), делает сигнал сопоставимым от дня к дню при любой общей волатильности и автоматически делает стратегию поперечной: сравниваются акции между собой, а не каждая со своим прошлым. Как именно нормирован ранг, в работе не сказано; по формулам вроде rank(...) - 0.5 и 0.5 < rank(...) видно, что подразумевается доля от 0 до 1. Это наше прочтение.

3. Несколько альф по шагам

Ниже шесть альф, выбранных так, чтобы показать основные приёмы языка. Пояснения автора есть только к альфам 42 и 101; остальные прочтения наши.

Alpha#101: доля дня, пройденная насквозь.

((close - open) / ((high - low) + .001))

Что это такое. Насколько движение от открытия до закрытия заняло весь дневной диапазон. Значение около +1+1, если день открылся на минимуме и закрылся на максимуме, около −1-1 в обратном случае.

Что означает каждый значок. close - open: изменение за день. high - low: дневной диапазон. .001: добавка, защищающая от деления на ноль, когда максимум равен минимуму.

Счёт по шагам, наш пример. Открытие 100, закрытие 102, максимум 103, минимум 99. Числитель 2, знаменатель 4+0.0014 + 0.001, сигнал около 0.5.

Зачем это нужно. Автор называет её delay-1 моментум-альфой: "if the stock runs up intraday (i.e., close > open and high > low), the next day one takes a long position in the stock".

Alpha#33: возврат внутридневного движения, через ранг.

rank((-1 * ((1 - (open / close))^1)))

Что это такое. Если закрытие выше открытия, open / close меньше единицы, выражение 1 - open/close положительно, а после умножения на −1-1 отрицательно. Акции, выросшие за день сильнее всех, получают самый низкий ранг, упавшие сильнее всех самый высокий.

Что означает каждый значок. ^1: возведение в первую степень, ничего не меняет. rank(...): место акции среди всех в этот день.

Счёт по шагам, наш пример. Пять акций с изменением за день +3 %, +1 %, 0 %, −2 %, −5 %. Значения внутри ранга примерно −0.03, −0.01, 0, +0.02, +0.05. Если ранг нормирован от 0 до 1, получится 0, 0.25, 0.5, 0.75, 1: больше всего покупаем упавшую на 5 %, больше всего продаём выросшую на 3 %.

Зачем это нужно. Это возврат к среднему на горизонте одного дня. В список delay-0 она не входит, значит торгуется на следующий день после расчёта.

Alpha#42: где закрылась цена относительно vwap.

(rank((vwap - close)) / rank((vwap + close)))

Что это такое. По словам автора, по сути delay-0 альфа возврата к среднему. Если закрытие выше vwap, акция росла во второй половине дня, числитель мал, ранг низкий. Знаменатель, как пишет автор, "weights down richer stocks", то есть уменьшает вес дорогих акций.

Зачем это нужно. Позиция «против движения» открывается близко к закрытию того же дня. Это одна из четырёх альф, для которых исполнение в момент расчёта обязательно.

Alpha#12: изменение цены, знак которого задаёт объём.

(sign(delta(volume, 1)) * (-1 * delta(close, 1)))

Что это такое, наше прочтение. delta(close, 1): изменение цены закрытия за день. sign(delta(volume, 1)): +1+1, если объём вырос по сравнению со вчера, −1-1, если упал. Когда объём растёт, альфа ставит против вчерашнего движения цены; когда падает, по движению.

Зачем это нужно. Пример того, как одно поле (объём) переключает направление ставки по другому (цене).

Alpha#6: скользящая корреляция цены и объёма.

(-1 * correlation(open, volume, 10))

Что это такое, наше прочтение. Корреляция цены открытия и объёма за последние 10 дней, с обратным знаком. Акция, у которой рост цены шёл на растущем объёме, получает отрицательный сигнал.

Зачем это нужно. Скользящие корреляции между ценой и объёмом есть в 60 альфах из 101 (наш подсчёт), это самая частая операция после ранга.

Alpha#9: серия против одиночного движения.

((0 < ts_min(delta(close, 1), 5)) ? delta(close, 1) : ((ts_max(delta(close, 1), 5) < 0) ? delta(close, 1) : (-1 * delta(close, 1))))

Что это такое, наше прочтение. Если все дневные изменения цены за последние 5 дней положительны (их минимум больше нуля), альфа идёт по сегодняшнему изменению. Если все отрицательны (максимум меньше нуля), тоже по нему. Во всех остальных случаях против него.

Зачем это нужно. Внутри одной формулы смешаны моментум и возврат к среднему: после устойчивой серии альфа следует за рынком, после разнонаправленных дней ставит на откат. Автор пишет, что в сложных альфах эти элементы смешиваются и сами альфы становятся менее определёнными по типу.

Как выглядит вторая половина каталога. Начиная с номера 58, формулы устроены иначе:

Alpha#61: (rank((vwap - ts_min(vwap, 16.1219))) < rank(correlation(vwap, adv180, 17.9282)))

Окна вида 16.1219 и 17.9282 дня по правилу работы округляются вниз до 16 и 17. Встречаются и смеси одного поля с самим собой, например ((vwap * 0.728317) + (vwap * (1 - 0.728317))), что равно просто vwap. По виду это похоже на результат машинного подбора параметров, но в работе об этом ничего не сказано; это наше предположение.

4. Из чего состоит 101 альфа

Свод по приложению A. Подсчёт наш, по тексту формул; одна альфа может попадать в несколько строк.

Признак Альф Номера или пример
Поперечный ранг rank 77 например 1, 33, 42
Объём (volume или adv{d}) 70 например 3, 6, 12
Скользящая корреляция или ковариация 60 например 2, 3, 6, 13
Средневзвешенная по объёму цена vwap 43 например 5, 42, 57
Ранг по времени ts_rank 38 например 4, 7, 17
Дробные окна вида 16.1219 40 58–99, кроме 60 и 83
Линейно затухающее среднее decay_linear 22 например 31, 39, 57
Отраслевая нейтрализация indneutralize 18 48, 58, 59, 63, 67, 69, 70, 76, 79, 80, 82, 87, 89, 90, 91, 93, 97, 100
Только цены дня, без объёма, vwap, доходностей и отраслей 16 4, 9, 10, 18, 20, 23, 24, 33, 37, 38, 46, 49, 51, 53, 54, 101
Условие ? : 11 1, 7, 9, 10, 21, 23, 24, 27, 46, 49, 51
Окна от 200 до 250 дней 7 19, 32, 36, 37, 39, 48, 52
Delay-0, по сноске автора 4 42, 48, 53, 54
Капитализация cap 1 56

Автор сам описывает каталог так: в основном это альфы «цена–объём», а «фундаментальные» данные используются в некоторых: в одной капитализация и в ряде альф отраслевая классификация для нейтрализации.

5. Эмпирические свойства альф

Как мерили

Данные закрытые, WorldQuant, период с 4 января 2010 по 31 декабря 2013 года. "The number of observations in the time series is 1,006". По каждой альфе:

Si=252 PiVi,Ti=DiIi,Ci=100 PiQiS_i = \sqrt{252}\,\frac{P_i}{V_i}, \qquad T_i = \frac{D_i}{I_i}, \qquad C_i = 100\,\frac{P_i}{Q_i}

Что это такое. Три метрики альфы номер ii: годовой Шарп, дневной оборот и прибыль в центах на проторгованную акцию.

Что означает каждый значок.

  • PiP_i: средний дневной P&L в долларах. ViV_i: дневная волатильность портфеля в долларах. 252\sqrt{252} («корень из 252»): перевод дневного Шарпа в годовой, 252 торговых дня в году.
  • DiD_i: средний дневной оборот в долларах. IiI_i: общая сумма вложений в альфу, длинные плюс короткие позиции, без плеча. TiT_i = 0.5 значит, что за день переторговывается половина портфеля; 1/Ti1/T_i это средний срок удержания в днях.
  • QiQ_i: среднее число акций, проторгованных за день (покупки плюс продажи). Множитель 100 переводит доллары в центы.

Пример на числах работы. Наибольший оборот в таблице 1 равен 1.604 в день, наименьший срок удержания 0.6235 дня. Наименьший оборот 0.1571, наибольший срок 6.365 дня. Отсюда и диапазон «0.6–6.4 дня» в аннотации.

Зачем это нужно. Центы на акцию прямо сравнимы с издержками: если комиссия, половина спреда и влияние на цену в сумме больше CiC_i центов на акцию, альфа после издержек убыточна. Это наш вывод из определения, в работе его нет.

Дальше из выборочной ковариационной матрицы доходностей альф берутся дневная волатильность σi\sigma_i и корреляции Ψij\Psi_{ij}, средняя дневная доходность Ri=Pi/IiR_i = P_i / I_i и годовая R~i=252 Ri\tilde R_i = 252\,R_i. Матрица на этих данных невырожденная: 101 альфа на 1 006 наблюдениях.

Таблица 1 работы: минимум, квартили, медиана, среднее и максимум для Шарпа, оборота, срока удержания, центов на акцию, волатильности, годовой доходности и попарных корреляций
Таблица 1 работы: сводка по 101 альфе; показатели без учёта торговых издержек

Как её читать. Строки: годовой Шарп SS, дневной оборот TT, срок удержания 1/T1/T, центы на акцию CC, дневная волатильность σ\sigma (умноженная на 1 000), годовая доходность R~\tilde R в процентах, попарные корреляции Ψ\Psi в процентах. Столбцы: минимум, первый квартиль, медиана, среднее, третий квартиль, максимум.

Что нужно увидеть. Медианный Шарп 2.224 при минимуме 1.238: слабых альф в каталоге нет. Медианная годовая доходность 5.441 % при медианной дневной волатильности 1.395 тысячных, то есть около 0.14 % в день. Медиана центов на акцию 0.3969, то есть примерно 0.4 цента прибыли на каждую проторгованную акцию до издержек. Корреляции от −15.09 % до 87.33 % при среднем 15.86 %.

Оговорка под таблицей. "The performance figures are exclusive of any trading or transaction costs, price impact, etc."

Шесть кривых плотности: Шарп, логарифм оборота, логарифм центов на акцию, логарифм волатильности, логарифм доходности и попарные корреляции
Рисунок 1 работы: плотности распределения метрик 101 альфы

Как его читать. Каждая панель показывает, как распределена одна метрика по 101 альфе (по попарным корреляциям для последней панели). Оборот, центы, волатильность и доходность даны в логарифмах.

Что нужно увидеть. Оборот распределён примерно логнормально, поэтому дальше в регрессиях используется его логарифм. Одиночные выбросы справа у Шарпа, волатильности и доходности, по подписи к рисунку, дают альфы delay-0. Корреляции сосредоточены около 0.1–0.2.

Доходность растёт с волатильностью

Автор подтверждает зависимость, найденную раньше на 4 000 альфах (Kakushadze и Tulchinsky, 2015), формула (1) работы:

R∼σX,X≈0.76R \sim \sigma^{X}, \qquad X \approx 0.76

Регрессия по 101 альфе со свободным членом (таблица 2):

ln⁡Ri≈−3.509+0.761 ln⁡σi\ln R_i \approx -3.509 + 0.761\,\ln \sigma_i

Что это такое. Связь средней дневной доходности альфы с её дневной волатильностью, обе в логарифмах.

Что означает каждый значок. ln⁡\ln: натуральный логарифм. Если обе стороны в логарифмах, наклон прямой становится показателем степени: R∼σ0.761R \sim \sigma^{0.761}. Значок ∼\sim читается «пропорционально».

Счёт по шагам, наш пример. У альфы вдвое большая волатильность. Тогда доходность выше в 20.761≈1.692^{0.761} \approx 1.69 раза, а не в 2, и Шарп составляет около 1.69/2≈0.851.69/2 \approx 0.85 от Шарпа спокойной альфы.

Пример на числах работы. Наклон 0.761 со стандартной ошибкой 0.046, t-статистика 16.65, R2R^2 = 0.737 (скорректированный 0.734).

Зачем это нужно. Показатель меньше единицы значит, что у более волатильных альф Шарп в среднем ниже: доходность растёт медленнее риска.

Точки 101 альфы в осях логарифма волатильности и логарифма доходности с прямой регрессии
Рисунок 2 работы: ln(R) против ln(σ), прямая ln(R) ≈ −3.509 + 0.761 ln(σ)

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

Что нужно увидеть. Основное облако лежит вдоль прямой; одна точка справа вверху сильно отстоит от остальных по волатильности. По подписи к рисунку 1, крайние значения волатильности и доходности дают альфы delay-0.

Оборот доходность не объясняет

Вторая регрессия добавляет логарифм оборота (таблица 3):

ln⁡Ri≈−3.435+0.775 ln⁡σi−0.023 ln⁡Ti\ln R_i \approx -3.435 + 0.775\,\ln \sigma_i - 0.023\,\ln T_i

Что это такое. Та же связь, но с оборотом как второй объясняющей переменной.

Пример на числах работы. Коэффициент при обороте −0.023 со стандартной ошибкой 0.040, t-статистика −0.57: от нуля он не отличается. R2R^2 вырос с 0.737 до 0.738, скорректированный упал с 0.734 до 0.732.

Зачем это нужно. Это и есть заявление аннотации: доходности "have no significant dependence on turnover". Автор пишет, что это прямое подтверждение более раннего результата, полученного косвенно: там волатильность оценивалась через Шарп, центы на акцию и оборот, а здесь использована реализованная волатильность.

Оборот почти не объясняет корреляции

Автор проводит параллель: оборот альфы похож на ликвидность акции, а логарифм ликвидности в многофакторных моделях риска служит фактором стиля. Вопрос: объясняет ли логарифм оборота попарные корреляции альф? Факторная модель ковариации, формула (7):

Γij=ξi2 δij+∑A,B=1KΩiA φAB ΩjB\Gamma_{ij} = \xi_i^2\,\delta_{ij} + \sum_{A,B=1}^{K} \Omega_{iA}\,\varphi_{AB}\,\Omega_{jB}

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

Что означает каждый значок.

  • Γij\Gamma_{ij} («гамма»): моделируемая ковариация альф ii и jj.
  • ξi2\xi_i^2 («кси в квадрате»): специфический, собственный риск альфы ii. δij\delta_{ij} («дельта Кронекера»): единица при i=ji = j, иначе ноль; специфический риск стоит только на диагонали.
  • ΩiA\Omega_{iA} («омега»): нагрузка альфы ii на фактор AA. φAB\varphi_{AB} («фи»): ковариация факторов. KK: число факторов, намного меньше числа альф NN.

Зачем это нужно. Одним из столбцов нагрузок автор берёт логарифм оборота и проверяет, объясняет ли он корреляции.

Технически это регрессия всех N(N−1)/2N(N-1)/2 попарных корреляций (при 101 альфе это 5 050 пар, наш расчёт) на две величины, построенные из нормированных логарифмов оборота: сумму yij=ln⁡τi+ln⁡τjy_{ij} = \ln\tau_i + \ln\tau_j и произведение zij=ln⁡τi⋅ln⁡τjz_{ij} = \ln\tau_i \cdot \ln\tau_j (таблица 4):

Ψij≈0.1587+0.0067 yij+0.0474 zij\Psi_{ij} \approx 0.1587 + 0.0067\,y_{ij} + 0.0474\,z_{ij}

Что это такое. Попытка предсказать корреляцию пары альф по их оборотам.

Что означает каждый значок. Ψij\Psi_{ij} («пси»): корреляция альф ii и jj. τi\tau_i («тау»): оборот, нормированный так, чтобы среднее его логарифма по альфам было нулём.

Пример на числах работы. Коэффициенты формально значимы (t = 2.907 и 7.537), но R2R^2 = 0.0127. Свободный член 0.1587 просто воспроизводит среднюю корреляцию.

Зачем это нужно. Вывод автора: оборот сам по себе почти ничего не говорит о том, насколько две альфы похожи. И оговорка: это "does not necessarily mean the turnover adds no value in the factor model context". Оборот может помогать через специфический риск, но проверка этого требует закрытых методов и в работу не вошла.

Облако демеанированных попарных корреляций против предсказания по обороту
Рисунок 3 работы: отклонение корреляции от среднего против 0.0067 y + 0.0474 z

Как его читать. Каждая точка одна пара альф. По горизонтали предсказание по обороту из таблицы 4, по вертикали отклонение настоящей корреляции от средней.

Что нужно увидеть. Облако без наклона: если бы оборот объяснял корреляции, оно вытянулось бы по диагонали.

Связь оборота и волатильности при этом есть, хотя и не сильная (таблица 5): ln⁡σ≈−6.174+0.368 ln⁡T\ln\sigma \approx -6.174 + 0.368\,\ln T, t-статистика наклона 5.412, R2R^2 = 0.228.

Точки 101 альфы в осях логарифма оборота и логарифма волатильности с прямой регрессии
Рисунок 4 работы: ln(σ) против ln(T), прямая ln(σ) ≈ −6.174 + 0.368 ln(T)

Как его читать. По горизонтали логарифм оборота, по вертикали логарифм волатильности.

Что нужно увидеть. Более быстрые альфы в среднем немного волатильнее, но разброс вокруг прямой большой. В сноске автор добавляет, что подавление весов альф по обороту может добавлять ценность, но сильно коррелирует с подавлением по волатильности.

6. Что в работе шатко

Оговорки самого автора

Без издержек. Под таблицей 1 прямо сказано, что показатели не учитывают торговые издержки, влияние на цену и прочее. При сроке удержания от 0.6 до 6.4 дня и медиане около 0.4 цента прибыли на акцию это решающая оговорка: Шарп 2.2 в таблице это Шарп до издержек.

Отбор по простоте, а не случайно. Альфы выбраны "largely based on simplicity considerations". Это не случайная выборка из продакшена, и неизвестно, какие 80 из 101 торговались.

Закрытые данные. И альфы, и данные принадлежат WorldQuant. Автор пишет, что даёт столько подробностей, сколько позволяет закрытость набора. Воспроизвести Шарпы, обороты и корреляции нельзя; можно только посчитать те же формулы на своих данных.

Оборот и модель риска. Отрицательный результат про корреляции не означает, что оборот бесполезен в факторной модели; вклад через специфический риск автор не проверял.

Что видно при чтении, но в работе не обсуждается

Расхождений, подтверждённых цитатой, в нашем рабочем разборе нет, поэтому discrepancies равно нулю. Числа мы не пересчитывали. Ниже то, что важно для тех, кто будет переписывать формулы в код; это наши наблюдения, а не найденные ошибки.

Двуаргументные min и max. В приложении min(x, d) и max(x, d) определены только как синонимы ts_min и ts_max, второй аргумент это число дней. Но в девяти альфах (71, 73, 76, 77, 82, 87, 88, 92, 96, наш подсчёт) вторым аргументом стоит целое выражение, а не число. Прочитать это можно двумя способами: как поэлементный максимум двух рядов или буквально как окно, равное значению выражения. В работе не сказано, какой имеется в виду.

signedpower. Определён как xax^a. Название подсказывает «степень с сохранением знака», то есть sign⁡(x)⋅∣x∣a\operatorname{sign}(x)\cdot\lvert x\rvert^{a}, но в определении этого нет. В альфе 84 показатель степени сам является рядом.

Ранг не определён подробно. Нормировка, обработка одинаковых значений и пропусков не описаны.

Период. Четыре года, 2010–2013. Из одного этого отрезка нельзя судить, насколько характеристики альф устойчивы во времени.

Как объединять, не сказано. По логике самой работы ценность создаёт «мега-альфа», но способа объединения в работе нет.

7. Что из этого следует на практике

Это готовая спецификация небольшого языка описания альф. Два десятка операторов и десяток входных полей покрывают весь каталог. Если вы строите движок, который считает сигналы по формулам, 101 альфа служит набором тестов: движок считает их все без ручных правок или нет.

Двусмысленные места решить заранее и записать. Двуаргументные min и max, signedpower, округление дробных окон, нормировка ранга. Разные прочтения дают разные альфы с одним и тем же номером.

Отдельная альфа из каталога не стратегия. Сроки удержания в днях, медиана прибыли около 0.4 цента на акцию до издержек. Автор сам описывает рабочую схему как объединение множества слабых сигналов с внутренним взаимозачётом сделок. Торговать одну формулу в одиночку с розничными издержками значит взять не ту часть системы.

Центы на акцию считать раньше Шарпа. Это прямое сравнение с ценой исполнения на акцию; Шарп до издержек такого сравнения не даёт.

Не выводить похожесть стратегий из их оборота. По этой работе оборот почти не объясняет корреляции; похожесть надо мерить по самим доходностям.

Метка задержки у каждой стратегии. Delay-0 и delay-1 это разные стратегии с разными требованиями к исполнению. Альфа delay-0, исполненная через час после расчёта, уже не та альфа.

8. Тестируемые идеи

№ Идея Тип Где считать
1 Реализовать все операторы приложения и прогнать все 101 формулу как набор тестов для движка сигналов: каждая считается без ручных правок аудит Python
2 Зафиксировать и задокументировать прочтение двусмысленных мест: двуаргументные min/max в девяти альфах, signedpower, округление дробных окон, нормировку и ничьи в rank аудит Python
3 Посчитать попарные корреляции доходностей своих сигналов и сравнить со средней 15.9 % и медианой 14.3 % из работы: сильно выше значит много вариантов одной идеи диагностика Python
4 Регрессия логарифма средней доходности на логарифм волатильности по своему набору стратегий; сравнить наклон с 0.76 диагностика Python
5 Проверить на своём наборе, объясняет ли логарифм оборота доходность и попарные корреляции; значимый эффект оборота сначала искать в модели издержек диагностика Python
6 Для каждой стратегии записать задержку (delay-0, delay-1, delay-2) и сверить, что бэктестер исполняет сделки именно в этот момент аудит бэктестер
7 Для нескольких альф каталога на своих данных посчитать центы на акцию CC и сравнить с полной ценой исполнения на акцию метрика приёмки бэктестер
8 Сравнить объединение группы альф поровну, обратно волатильности и с учётом корреляций: работа утверждает, что ценность в объединении, но способа не даёт изменение конструкции Python
9 Сравнить сигнал в виде поперечного ранга и в виде сырого значения на одной и той же альфе: хвосты позиций и устойчивость к выбросам изменение конструкции Python

Заявлено авторами

Эти цифры и утверждения принадлежат авторам. Где они не сошлись при пересчёте, сказано в разборе.

Обновлено: 2026-10-17