Блог им. uralpro

101 формула сигналов для трейдинга. Часть 3

1

Начало здесь.

Зависит ли корреляция сигналов от оборачиваемости?

Если мы проведем параллель между сигналами и акциями, то оборачиваемость по каждому альфа-сигналу является аналогом ликвидности акций, которая обычно измеряется через средний дневной объем торгов (ADDV). Логарифм ADDV обычно используется  как фактор риска в многофакторных моделях для аппроксимации ковариации матричной структуры портфеля ценных бумаг, чье назначение заключается в моделировании вне-диагональных элементов ковариационной матрицы, то есть структуры парных корреляций. Следуя этой аналогии, мы можем задать вопрос, может ли оборачиваемость – или точнее ее логарифм – объяснить  корреляции альфа-сигналов? Очевидно, что примененение оборачиваемости напрямую (в отличие от логарифма) ничего не даст из-за чрезвычайно искаженного (грубо логарифмически нормального) распределения оборота (см. рисунок в заглавии).

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

101 формула сигналов для трейдинга. Часть 3

Здесь 101 формула сигналов для трейдинга. Часть 3  — отдельная мера риска, 101 формула сигналов для трейдинга. Часть 3  — это матрица факторов размерностью NxK, соответствующая K<<N факторам, и 101 формула сигналов для трейдинга. Часть 3  — ковариационная матрица факторов. В нашем случае, мы заинтересованы в моделировании корреляционной матрицы 101 формула сигналов для трейдинга. Часть 3, и в доказательствах, что оборачиваемость может объяснять попарную корреляцию. Отдельной темой также является корреляция между оборачиваемостью и волатильностью.

Наш подход состоит в представлении одного из столбцов матрицы факторов, как 101 формула сигналов для трейдинга. Часть 3. Точнее, заранее нет никакой причины, почему мы должны выбрать 101 формула сигналов для трейдинга. Часть 3 в противоположность к 101 формула сигналов для трейдинга. Часть 3, где 101 формула сигналов для трейдинга. Часть 3 , и 101 формула сигналов для трейдинга. Часть 3 - некоторый коэффициент нормализации. Чтобы разобраться с этим, нормализуем 101 формула сигналов для трейдинга. Часть 3 так, что функция l101 формула сигналов для трейдинга. Часть 3 будет иметь нулевую кросс-секционную среднюю , и пусть 101 формула сигналов для трейдинга. Часть 3 будет единичным вектором. Затем мы можем построить три симметричных тензорных комбинации 101 формула сигналов для трейдинга. Часть 3. Cейчас определим сводный индекс 101 формула сигналов для трейдинга. Часть 3, который принимает M = (N − 1)/2 значений, то есть мы преобразуем элементы нижнего треугольника основной симметричной матрицы 101 формула сигналов для трейдинга. Часть 3 в вектор 101 формула сигналов для трейдинга. Часть 3. Таким образом мы можем создать четыре М-вектора 101 формула сигналов для трейдинга. Часть 3. Тогда можно запустить линейную регрессию  101 формула сигналов для трейдинга. Часть 3 по 101 формула сигналов для трейдинга. Часть 3. Отметим, что 101 формула сигналов для трейдинга. Часть 3  — просто единичный вектор, таким образом получается регрессия 101 формула сигналов для трейдинга. Часть 3 по 101 формула сигналов для трейдинга. Часть 3 со свободным членом. Результаты представлены в таблице ниже. Очевидно, что линейная и билинейная ( в 101 формула сигналов для трейдинга. Часть 3) переменные 101 формула сигналов для трейдинга. Часть 3 имеют низкую объясняющую силу для попарных корреляций 101 формула сигналов для трейдинга. Часть 3, в то время как 101 формула сигналов для трейдинга. Часть 3 просто моделирует среднюю корреляции 101 формула сигналов для трейдинга. Часть 3. Помните, что конструкция 101 формула сигналов для трейдинга. Часть 3 ортогональна 101 формула сигналов для трейдинга. Часть 3, и все три переменных независимы друг от друга.

2

Подчеркнем что наше заключение не обязательно означает, что оборачиваемость не добавляет значимости в контекст факторной модели, это означает только то, что оборот как таковой не участвует в моделировании парных корреляций альфа-сигналов. Приведенный выше анализ не учитывает, добавляет ли оборачиваемость объяснительную силу для моделирования дисперсии конкретного риска. Можно обнаружить, что линейная регрессия 101 формула сигналов для трейдинга. Часть 3 по 101 формула сигналов для трейдинга. Часть 3 (со свободным членом) показывает ненулевое значение корреляции между этими переменными (см. таблицу ниже), хотя и не очень большое. Чтобы увидеть, добавляет ли оборот что-то к значению, например, конкретного риска, требуется использование определенных методов, что выходит за рамки данной статьи.

3

Заключение.

Отметим, что 101 сигнал, который  здесь мы приводим, не “игрушечные” альфы, а те, которые реально используются в торговле. На самом деле, 80 из этих сигналов участвуют в торговле на момент написания статьи. Насколько нам известно, это первый раз, когда такое большое количество реальных формул для торговых сигналов появляется в литературе. И это неудивительно, естественно, алгоритмическая торговля является весьма секретной и скрытной. Наша цель -предоставить возможность заглянуть в сложный мир современной и постоянно развивающейся алгоритмической торговли и демистифицировать его, в какой-то степени .

Технический прогресс сегодня позволяет автоматизировать поиск альфа-сигналов. Алгоритмические альфа-сигналы, безусловно, являются самыми многочисленными доступными торговыми сигналами, которые могут быть превращены в торговые стратегии. Существует множество перестановок  в отдельных ( рыночно — нейтральных) портфелях, например, из 2 000 наиболее ликвидных американских акций, которые могут обеспечить положительную доходность на высоко — и среднечастотных временных горизонтах. Кроме того, многие из этих сигналов эфемерны и их обоснования слабы. Нужно делать сложные, технологически  обоснованные и постоянно адаптируемые операции для поиска сотен тысяч  и миллионов торговых сигналов, чтобы потом объединить их в единый “мега-альфа” сигнал, который будет торговаться с дополнительным бонусом по доходности за счет автоматического сведения внутренних кросс- сделок.

Приложение А: Формулы альфа-сигналов.

Alpha#1: (rank(Ts_ArgMax(SignedPower(((returns < 0)? stddev(returns, 20): close), 2.), 5)) -0.5)

Alpha#2: (-1 * correlation(rank(delta(log(volume), 2)), rank(((close — open) / open)), 6))

Alpha#3: (-1 * correlation(rank(open), rank(volume), 10))

Alpha#4: (-1 * Ts_Rank(rank(low), 9))

Alpha#5: (rank((open — (sum(vwap, 10) / 10))) * (-1 * abs(rank((close — vwap))))) Alpha#6: (-1 * correlation(open, volume, 10))

Alpha#7: ((adv20 < volume)? ((-1 * ts_rank(abs(delta(close, 7)), 60)) * sign(delta(close, 7))): (-1* 1))

  Alpha#8: (-1 * rank(((sum(open, 5) * sum(returns, 5)) — delay((sum(open, 5) * sum(returns, 5)),10))))

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))))

Alpha#10: rank(((0 < ts_min(delta(close, 1), 4))? delta(close, 1): ((ts_max(delta(close, 1), 4) < 0)? delta(close, 1): (-1 * delta(close, 1)))))

  Alpha#11: ((rank(ts_max((vwap — close), 3)) + rank(ts_min((vwap — close), 3))) * rank(delta(volume, 3)))

  Alpha#12: (sign(delta(volume, 1)) * (-1 * delta(close, 1)))

Alpha#13: (-1 * rank(covariance(rank(close), rank(volume), 5)))

Alpha#14: ((-1 * rank(delta(returns, 3))) * correlation(open, volume, 10))

Alpha#15: (-1 * sum(rank(correlation(rank(high), rank(volume), 3)), 3))

Alpha#16: (-1 * rank(covariance(rank(high), rank(volume), 5)))

Alpha#17: (((-1 * rank(ts_rank(close, 10))) * rank(delta(delta(close, 1), 1))) * rank(ts_rank((volume / adv20), 5)))

Alpha#18: (-1 * rank(((stddev(abs((close — open)), 5) + (close — open)) + correlation(close, open, 10))))

Alpha#19: ((-1 * sign(((close — delay(close, 7)) + delta(close, 7)))) * (1 + rank((1 + sum(returns, 250)))))

Alpha#20: (((-1 * rank((open — delay(high, 1)))) * rank((open — delay(close, 1)))) * rank((open — delay(low, 1))))

Alpha#21: ((((sum(close, 8) / 8) + stddev(close, 8)) < (sum(close, 2) / 2))? (-1 * 1): (((sum(close,2) / 2) < ((sum(close, 8) / 8) — stddev(close, 8)))? 1: (((1 < (volume / adv20)) || ((volume /adv20) == 1))? 1: (-1 * 1))))

Alpha#22: (-1 * (delta(correlation(high, volume, 5), 5) * rank(stddev(close, 20))))

Alpha#23: (((sum(high, 20) / 20) < high)? (-1 * delta(high, 2)): 0)

Alpha#24: ((((delta((sum(close, 100) / 100), 100) / delay(close, 100)) < 0.05) || ((delta((sum(close, 100) / 100), 100) / delay(close, 100)) == 0.05))? (-1 * (close — ts_min(close,100))): (-1 * delta(close, 3)))

Alpha#25: rank(((((-1 * returns) * adv20) * vwap) * (high — close)))

Alpha#26: (-1 * ts_max(correlation(ts_rank(volume, 5), ts_rank(high, 5), 5), 3))

Alpha#27: ((0.5 < rank((sum(correlation(rank(volume), rank(vwap), 6), 2) / 2.0)))? (-1 * 1): 1) Alpha#28:scale(((correlation(adv20, low, 5) + ((high + low) /2)) — close))

Alpha#29: (min(product(rank(rank(scale(log(sum(ts_min(rank(rank((-1 * rank(delta((close — 1), 5))))), 2), 1))))), 1), 5) + ts_rank(delay((-1 * returns), 6), 5))

Alpha#30: (((1.0 — rank(((sign((close — delay(close, 1))) + sign((delay(close, 1) — delay(close, 2)))) +sign((delay(close, 2) — delay(close, 3)))))) * sum(volume, 5)) / sum(volume, 20))

Alpha#31: ((rank(rank(rank(decay_linear((-1 * rank(rank(delta(close, 10)))), 10)))) + rank((-1 * delta(close, 3)))) + sign(scale(correlation(adv20, low, 12))))

Alpha#32: (scale(((sum(close, 7) / 7) — close)) + (20 * scale(correlation(vwap, delay(close, 5),230))))

Alpha#33: rank((-1 * ((1 — (open / close))^1)))

Alpha#34: rank(((1 — rank((stddev(returns, 2) / stddev(returns, 5)))) + (1 — rank(delta(close, 1)))))

Alpha#35: ((Ts_Rank(volume, 32) * (1 — Ts_Rank(((close + high) — low), 16))) * (1 — Ts_Rank(returns, 32)))

Alpha#36: (((((2.21 * rank(correlation((close — open), delay(volume, 1), 15))) + (0.7 * rank((open- close)))) + (0.73 * rank(Ts_Rank(delay((-1 * returns), 6), 5)))) + rank(abs(correlation(vwap, adv20, 6)))) + (0.6 * rank((((sum(close, 200) / 200) — open) * (close — open)))))

Alpha#37: (rank(correlation(delay((open — close), 1), close, 200)) + rank((open — close))) Alpha#38: ((-1 * rank(Ts_Rank(close, 10))) * rank((close / open)))

Alpha#38: ((-1 * rank(Ts_Rank(close, 10))) * rank((close / open)))

Alpha#39: ((-1 * rank((delta(close, 7) * (1 — rank(decay_linear((volume / adv20), 9)))))) * (1 +rank(sum(returns, 250))))

Alpha#40: ((-1 * rank(stddev(high, 10))) * correlation(high, volume, 10)) Alpha#41: (((high * low)^0.5) — vwap)

Alpha#41: (((high * low)^0.5) — vwap)

Alpha#42: (rank((vwap — close)) / rank((vwap + close)))

Alpha#43: (ts_rank((volume / adv20), 20) * ts_rank((-1 * delta(close, 7)), 8))

Alpha#44: (-1 * correlation(high, rank(volume), 5))

Alpha#45: (-1 * ((rank((sum(delay(close, 5), 20) / 20)) * correlation(close, volume, 2)) *rank(correlation(sum(close, 5), sum(close, 20), 2))))

Alpha#46: ((0.25 < (((delay(close, 20) — delay(close, 10)) / 10) — ((delay(close, 10) — close) / 10))) ?(-1 * 1): (((((delay(close, 20) — delay(close, 10)) / 10) — ((delay(close, 10) — close) / 10)) < 0)? 1 :((-1 * 1) * (close — delay(close, 1)))))

Alpha#47: ((((rank((1 / close)) * volume) / adv20) * ((high * rank((high — close))) / (sum(high, 5) / 5))) — rank((vwap — delay(vwap, 5))))

Alpha#48: (indneutralize(((correlation(delta(close, 1), delta(delay(close, 1), 1), 250) * delta(close, 1)) / close), IndClass.subindustry) / sum(((delta(close, 1) / delay(close, 1))^2), 250))

Alpha#49: (((((delay(close, 20) — delay(close, 10)) / 10) — ((delay(close, 10) — close) / 10)) < (-1 *0.1))? 1: ((-1 * 1) * (close — delay(close, 1))))

Alpha#50: (-1 * ts_max(rank(correlation(rank(volume), rank(vwap), 5)), 5))

Alpha#51: (((((delay(close, 20) — delay(close, 10)) / 10) — ((delay(close, 10) — close) / 10)) < (-1 *0.05))? 1: ((-1 * 1) * (close — delay(close, 1))))

Alpha#52: ((((-1 * ts_min(low, 5)) + delay(ts_min(low, 5), 5)) * rank(((sum(returns, 240) -sum(returns, 20)) / 220))) * ts_rank(volume, 5))

Alpha#53: (-1 * delta((((close — low) — (high — close)) / (close — low)), 9))

Alpha#54: ((-1 * ((low — close) * (open^5))) / ((low — high) * (close^5)))

Alpha#55: (-1 * correlation(rank(((close — ts_min(low, 12)) / (ts_max(high, 12) — ts_min(low, 12)))), rank(volume), 6))

Alpha#56: (0 — (1 * (rank((sum(returns, 10) / sum(sum(returns, 2), 3))) * rank((returns * cap)))))

Alpha#57: (0 — (1 * ((close — vwap) / decay_linear(rank(ts_argmax(close, 30)), 2))))

Alpha#58: (-1 * Ts_Rank(decay_linear(correlation(IndNeutralize(vwap, IndClass.sector), volume, 3.92795), 7.89291), 5.50322))

Alpha#59: (-1 * Ts_Rank(decay_linear(correlation(IndNeutralize(((vwap * 0.728317) + (vwap * (1 — 0.728317))), IndClass.industry), volume, 4.25197),

16.2289), 8.19648))

Alpha#60: (0 — (1 * ((2 * scale(rank(((((close — low) — (high — close)) / (high — low)) * volume)))) — scale(rank(ts_argmax(close, 10))))))

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

Alpha#62: ((rank(correlation(vwap, sum(adv20, 22.4101), 9.91009)) < rank(((rank(open) + rank(open)) < (rank(((high + low) / 2)) + rank(high))))) * -1)

Alpha#63: ((rank(decay_linear(delta(IndNeutralize(close, IndClass.industry), 2.25164), 8.22237))- rank(decay_linear(correlation(((vwap * 0.318108) + (open * (1 — 0.318108))), sum(adv180, 37.2467), 13.557), 12.2883))) * -1)

Alpha#64: ((rank(correlation(sum(((open * 0.178404) + (low * (1 — 0.178404))), 12.7054),sum(adv120, 12.7054), 16.6208)) < rank(delta(((((high + low) / 2) * 0.178404) + (vwap * (1 -0.178404))), 3.69741))) * -1)

Alpha#65: ((rank(correlation(((open * 0.00817205) + (vwap * (1 — 0.00817205))), sum(adv60, 8.6911), 6.40374)) < rank((open — ts_min(open, 13.635)))) * -1)

Alpha#66: ((rank(decay_linear(delta(vwap, 3.51013), 7.23052)) + Ts_Rank(decay_linear(((((low* 0.96633) + (low * (1 — 0.96633))) — vwap) / (open — ((high + low) / 2))), 11.4157), 6.72611)) * -1)

Alpha#67: ((rank((high — ts_min(high, 2.14593)))^rank(correlation(IndNeutralize(vwap, IndClass.sector), IndNeutralize(adv20, IndClass.subindustry), 6.02936))) * -1)

Alpha#68: ((Ts_Rank(correlation(rank(high), rank(adv15), 8.91644), 13.9333) <rank(delta(((close * 0.518371) + (low * (1 — 0.518371))), 1.06157))) * -1)

Alpha#69: ((rank(ts_max(delta(IndNeutralize(vwap, IndClass.industry), 2.72412), 4.79344))^Ts_Rank(correlation(((close * 0.490655) + (vwap * (1 — 0.490655))), adv20, 4.92416),9.0615)) * -1)

Alpha#70:    ((rank(delta(vwap,    1.29456))^Ts_Rank(correlation(IndNeutralize(close, IndClass.industry), adv50, 17.8256), 17.9171)) * -1)

Alpha#71: max(Ts_Rank(decay_linear(correlation(Ts_Rank(close, 3.43976), Ts_Rank(adv180, 12.0647), 18.0175), 4.20501), 15.6948), Ts_Rank(decay_linear((rank(((low + open) — (vwap +vwap)))^2), 16.4662), 4.4388))

Alpha#72: (rank(decay_linear(correlation(((high + low) / 2), adv40, 8.93345), 10.1519)) / rank(decay_linear(correlation(Ts_Rank(vwap, 3.72469), Ts_Rank(volume, 18.5188), 6.86671),2.95011)))

Alpha#73: (max(rank(decay_linear(delta(vwap, 4.72775), 2.91864)),Ts_Rank(decay_linear(((delta(((open * 0.147155) + (low * (1 — 0.147155))), 2.03608) / ((open *0.147155) + (low * (1 — 0.147155)))) * -1), 3.33829), 16.7411)) * -1)

Alpha#74: ((rank(correlation(close, sum(adv30, 37.4843), 15.1365)) <rank(correlation(rank(((high * 0.0261661) + (vwap * (1 — 0.0261661)))), rank(volume), 11.4791)))* -1)

Alpha#75: (rank(correlation(vwap, volume, 4.24304)) < rank(correlation(rank(low), rank(adv50), 12.4413)))

Alpha#76: (max(rank(decay_linear(delta(vwap, 1.24383), 11.8259)), Ts_Rank(decay_linear(Ts_Rank(correlation(IndNeutralize(low,    IndClass.sector), adv81, 8.14941), 19.569), 17.1543), 19.383)) * -1)

Alpha#77: min(rank(decay_linear(((((high + low) / 2) + high) — (vwap + high)), 20.0451)), rank(decay_linear(correlation(((high + low) / 2), adv40, 3.1614), 5.64125)))

Alpha#78: (rank(correlation(sum(((low * 0.352233) + (vwap * (1 — 0.352233))), 19.7428),sum(adv40, 19.7428), 6.83313))^rank(correlation(rank(vwap), rank(volume), 5.77492)))

Alpha#79: (rank(delta(IndNeutralize(((close * 0.60733) + (open * (1 — 0.60733))), IndClass.sector), 1.23438)) < rank(correlation(Ts_Rank(vwap, 3.60973), Ts_Rank(adv150,9.18637), 14.6644)))

Alpha#80: ((rank(Sign(delta(IndNeutralize(((open * 0.868128) + (high * (1 — 0.868128))), IndClass.industry), 4.04545)))^Ts_Rank(correlation(high, adv10, 5.11456), 5.53756)) * -1)

Alpha#81: ((rank(Log(product(rank((rank(correlation(vwap, sum(adv10, 49.6054), 8.47743))^4)), 14.9655))) < rank(correlation(rank(vwap), rank(volume), 5.07914))) * -1)

Alpha#82: (min(rank(decay_linear(delta(open, 1.46063), 14.8717)), Ts_Rank(decay_linear(correlation(IndNeutralize(volume, IndClass.sector), ((open * 0.634196) + (open * (1 — 0.634196))), 17.4842), 6.92131), 13.4283)) * -1)

Alpha#83: ((rank(delay(((high — low) / (sum(close, 5) / 5)), 2)) * rank(rank(volume))) / (((high — low) / (sum(close, 5) / 5)) / (vwap — close)))

Alpha#84: SignedPower(Ts_Rank((vwap — ts_max(vwap, 15.3217)), 20.7127), delta(close, 4.96796))

Alpha#85: (rank(correlation(((high * 0.876703) + (close * (1 — 0.876703))), adv30, 9.61331))^rank(correlation(Ts_Rank(((high + low) / 2), 3.70596), Ts_Rank(volume, 10.1595),7.11408)))

Alpha#86: ((Ts_Rank(correlation(close, sum(adv20, 14.7444), 6.00049), 20.4195) < rank(((open+ close) — (vwap + open)))) * -1)

Alpha#87: (max(rank(decay_linear(delta(((close * 0.369701) + (vwap * (1 — 0.369701))), 1.91233),    2.65461)),    Ts_Rank(decay_linear(abs(correlation(IndNeutralize(adv81,IndClass.industry), close, 13.4132)), 4.89768), 14.4535)) * -1)

Alpha#88: min(rank(decay_linear(((rank(open) + rank(low)) — (rank(high) + rank(close))), 8.06882)), Ts_Rank(decay_linear(correlation(Ts_Rank(close, 8.44728), Ts_Rank(adv60,20.6966), 8.01266), 6.65053), 2.61957))

Alpha#89: (Ts_Rank(decay_linear(correlation(((low * 0.967285) + (low * (1 — 0.967285))), adv10, 6.94279), 5.51607), 3.79744) — Ts_Rank(decay_linear(delta(IndNeutralize(vwap,IndClass.industry), 3.48158), 10.1466), 15.3012))

Alpha#90: ((rank((close — ts_max(close, 4.66719)))^Ts_Rank(correlation(IndNeutralize(adv40, IndClass.subindustry), low, 5.38375), 3.21856)) * -1)

Alpha#91:       ((Ts_Rank(decay_linear(decay_linear(correlation(IndNeutralize(close, IndClass.industry), volume, 9.74928), 16.398), 3.83219), 4.8667) -

rank(decay_linear(correlation(vwap, adv30, 4.01303), 2.6809))) * -1)

Alpha#92: min(Ts_Rank(decay_linear(((((high + low) / 2) + close) < (low + open)), 14.7221), 18.8683), Ts_Rank(decay_linear(correlation(rank(low), rank(adv30), 7.58555), 6.94024),6.80584))

Alpha#93: (Ts_Rank(decay_linear(correlation(IndNeutralize(vwap, IndClass.industry), adv81, 17.4193), 19.848), 7.54455) / rank(decay_linear(delta(((close * 0.524434) + (vwap * (1 -0.524434))), 2.77377), 16.2664)))

Alpha#94: ((rank((vwap — ts_min(vwap, 11.5783)))^Ts_Rank(correlation(Ts_Rank(vwap, 19.6462), Ts_Rank(adv60, 4.02992), 18.0926), 2.70756)) * -1)

Alpha#95: (rank((open — ts_min(open, 12.4105))) < Ts_Rank((rank(correlation(sum(((high + low)/ 2), 19.1351), sum(adv40, 19.1351), 12.8742))^5), 11.7584))

Alpha#96: (max(Ts_Rank(decay_linear(correlation(rank(vwap), rank(volume), 3.83878), 4.16783), 8.38151), Ts_Rank(decay_linear(Ts_ArgMax(correlation(Ts_Rank(close, 7.45404),Ts_Rank(adv60, 4.13242), 3.65459), 12.6556), 14.0365), 13.4143)) * -1)

Alpha#97: ((rank(decay_linear(delta(IndNeutralize(((low * 0.721001) + (vwap * (1 — 0.721001))), IndClass.industry), 3.3705), 20.4523)) — Ts_Rank(decay_linear(Ts_Rank(correlation(Ts_Rank(low,7.87871), Ts_Rank(adv60, 17.255), 4.97547), 18.5925), 15.7152), 6.71659)) * -1)

Alpha#98: (rank(decay_linear(correlation(vwap, sum(adv5, 26.4719), 4.58418), 7.18088)) -rank(decay_linear(Ts_Rank(Ts_ArgMin(correlation(rank(open), rank(adv15), 20.8187), 8.62571),6.95668), 8.07206)))

Alpha#99: ((rank(correlation(sum(((high + low) / 2), 19.8975), sum(adv60, 19.8975), 8.8136)) <rank(correlation(low, volume, 6.28259))) * -1)

Alpha#100: (0 — (1 * (((1.5 * scale(indneutralize(indneutralize(rank(((((close — low) — (high — close)) / (high — low)) * volume)), IndClass.subindustry), IndClass.subindustry))) — scale(indneutralize((correlation(close, rank(adv20), 5) — rank(ts_argmin(close, 30))), IndClass.subindustry))) * (volume / adv20))))

Alpha#101: ((close — open) / ((high — low) + .001))

А1. Функции и операторы

   abs(x), log(x), sign(x) = стандартные определения функций; то же для операторов “+”, “-”, “*”, “/”, “>”, “<”, “==”, “||”, “x? y: z”

rank(x) = кросс-секционный ранг

delay(x, d) = значение  x d дней назад

correlation(x, y, d) = корреляция временных серий  x и y за последние d дней

covariance(x, y, d) =ковариация временных серий   x и y за последние d дней

scale(x, a) = масштабирование x таким образом, что sum(abs(x)) = a ( начальное значение a = 1)

delta(x, d) = сегодняшнее значение x минус значение x d дней назад

signedpower(x, a) = x^a

decay_linear(x, d) = взвешенная скользящая средняя за последние d дней с линейно снижающимися весами d, d – 1, …, 1 (сумма весов должна быть равна  1)

indneutralize(x, g) = x кросс-секционально нейтрализовано к группе g (субиндустрия, индустрия, секторы, и т.д.), то есть, x кросс-секционно не влиеяет на группу  g

ts_{O}(x, d) = оператор O применен к временной серии за последние d дней; нецелое число дней d преобразуется к floor(d)

  ts_min(x, d) = минимум временной серии за последние d дней

ts_max(x, d) =макисмум временной серии за последние d дней

ts_argmax(x, d) = в какой день происходит ts_max(x, d) 

ts_argmin(x, d) =в какой день происходит  ts_min(x, d)

ts_rank(x, d) = ранг временной серии за последние d дней

min(x, d) = ts_min(x, d)

   max(x, d) = ts_max(x, d)

sum(x, d) = сумма временной серии за последние d дней

product(x, d) = произведение временной серии за последние d дней

stddev(x, d) = скользящее среднеквадратичное отклонение временной серии за последние d дней

А2. Входные данные

returns = дневное приращение цены от закрытия к закрытию

open, close, high, low, volume = стандартные определения для дневных цен и объемов

vwap = дневная взвешенная по объему цена

cap = рыночная капитализация

adv{d} = средний денежный объем за последние d дней

IndClass = основное определение для бинарной индустриальной классификации (ОКВЭД  и т.п.) в indneutralize(x, IndClass.level), где level = сектор, индустрия, субиндустрия и т.д.

Множественные IndClass в одном и том же сигнале не относятся к одинаковой классификации по индустриям.

Другие стратегии и алгоритмы автоматической торговли смотрите на моем сайте — www.quantalgos.ru

★23
22 комментария
Это не форум квантовой физики я ничего не перепутал?
avatar
В свое время я проверил предикативность объемов на дневках для приращения цены на следующий день акций, входивших в Доу. Пустышка.
avatar
А. Г., не проверял предикативность объемов на западных рынках, но на нашем рынке акций объемы полезны. В частности в качестве моего любимого примера со Сбербанком очень информативны часовые объемы, которые хороши в качестве весов.
avatar
Sergey Pavlov, 

Я же написал, что проверял дневные объемы. Не знаю, как Сбербанке сейчас, а в РАО и Газпроме 1997-2002 дневные объемы тоже «ни о чем». Но повторю — дневные.
avatar
А. Г., «очемность» либо «ниочемность» объемов в данном случае ведь сильно зависит от метода, которым вы это проверяете. Не могли бы уточнить, в рамках каких гипотез вы убедились в бесполезности дневных объемов на данных тех лет?
avatar
Sergey Pavlov,
 
В рамках оценки условного распределения приращения цены на следующий день от объемов в лотах и приращений цен в пять предыдущих. Статистического отличия условного распределения с объёмами и без не находится.
avatar
ипать как все сложно, пойду в магазин за хлебушком за#@бу продавщицу
avatar
такое чувство что авторы пытаются тупо завалить читателя массой всякой хрени. а потом скажут — глядите — мы теперь одним легким движением руки запихиваем в линейную комбинацию и прогоняем тотально по истории фр и типа получаем профит.
Честно говоря, я советники с гораздо меньшим числом используемых сигналов/индикаторов в помойку выкидывал, подозревая возможность подгонки и невозможности проверить ее отсутствие по причине отсутствия хоть какогонибудь смысла в лампаде весело перемигивающихся сигнальных лампочек...

PS: Альфы 38 и 41 съехали.
Бабёр-Енот, добавил, спасибо что заметили
avatar
Подтверждаю!
avatar

не которые алфы понятны, не которые нет, но надо идеи проанализировать. Вопрос вот в чем, а как автоматизировать поиск альф? Намекните  или  поясните :)

А вообще, сказать вам спасибо за это- это не чего не сказать!

Благодарю, что несете свет в массы :)

avatar
SMA, я не знаю. как это делали авторы статьи, но предполагаю, что это можно сделать так: 
1. Создать набор характеристик — объем, приращение цены, динамика объемов и т.п. с параметрами — интервал времени, величина и т.п.
2. Запустить перебор по эти характеристикам и по этим параметрам, замеряя отклик на выходе ( в качестве отклика — приращение цены актива)
3. Собрать статистику по всем случаям
4. profit 
avatar
uralpro, Спасибо за топик, можете ли Вы, более подробно раскрыть, принцип набора характеристик?  
avatar
 а на картинках показаны доходности сигналов в %?
avatar
SMA, нет, это плотности вероятностей по всем альфа для различных характеристик — оборот, коэффициент Шарпа, логарифмы приращений, волатильность, корреляция
avatar
для аппроксимации ковариации.... 
А я еще с кровати не встал
avatar
за труды +, но читать не стал, а грааль, позволяющий обыгрывать рынок  прост, как и все гениальное.
avatar
в то же время теория суперструн типа IIA описывает взаимодействия замкнутых протяженных одномерных объектов (D1-бран, или струн) без тахиона (движущейся со сверхсветовой скоростью частицы), но с суперсимметрией и некиральными безмассовыми фермионами.
avatar
автору огромный плюс, особенно за формулы!!!
«Логарифм ADDV обычно используется для аппроксимации», это хорошо, но если вспомнить что у логарифма натурального есть взаимосвязь с площадью под фигурой как это можно использовать?
avatar
А зачем все это? Чтобы заработать деньги на рынке это точно не нужно…
Я так понимаю, каждая Альфа это отдельная стратегия?
avatar

теги блога uralpro

....все тэги



UPDONW
Новый дизайн