← Усі роботи
#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