Предсказание рынка на основе макроэкономических показателей - страница 56

 
Vladimir:

3: доходности ценных бумаг разных сроков плюс ещё один

Buy & hold annual percentage rate, 1974 - present: APR = 7.35%

Buy & sell strategy using economic indicators: APR = 13.18%

Данная стратегия дала сигнал на продажу в декабре 2019. Пока сигнал на покупку не даёт. Видимо рынок пойдёт вниз.

Купил и держи.

Интересно было бы посмотреть на форвард-тест такой модели, но тут это невозможно.

Сейчас, насколько я понимаю, все ждут выборов. 

 
Vladimir:

3: доходности ценных бумаг разных сроков плюс ещё один

Buy & hold annual percentage rate, 1974 - present: APR = 7.35%

Buy & sell strategy using economic indicators: APR = 13.18%

Данная стратегия дала сигнал на продажу в декабре 2019. Пока сигнал на покупку не даёт. Видимо рынок пойдёт вниз.

Речь о конкретном инструменте или общий показатель?

 
Vladimir:

Итак, задача предсказать S&P 500 индекс на основе имеющихся экономических показателей.

Шаг 1: Находим показатели. Показатели имеются в общем доступе здесь: http://research.stlouisfed.org/fred2/ Их там 240 тысяч. Самым главным является рост GDP. Этот показатель расчитывается каждый квартал. Отсюда наш шаг - 3 месяца. Все индикаторы на более коротком периоде перерасчитываются на 3-х месячный период, остальные (годовые) отбрасываются. Отбрасываем также показатели для всех стран кроме США и показатели, у которых нет глубокой истории (по крайней мере 15 лет). Итак кропотливым трудом отсеиваем кучу показателей и получаем порядка 10 тыс показателей. Формулируем более конкретную задачу прдесказать S&P 500 индекс на один или два квартала вперёд имея в наличии 10 тыс экономических показателей с квартальным периодом. Я делаю всё в МатЛабе, хотя можно и в R.

Шаг 2: Преобразуем все данные к стационарному виду путём дифференцирования и нормирования. Методов тут много. Главное чтобы из преобразованных данных можно было восстановить первоначальные данные. Без стационарности не одна модель работать не будет. S&P 500 ряд до и после преобразования показан внизу.

 

Шаг 3: Выбираем модель. Можно нейронную сеть. Можно много-переменную линейную регрессию. Можно много-переменную полиномную регрессию. После опробования линейных и нелинейных моделей приходим к выводу что данные настолько зашумлены что вписывать нелинейную модель смысла нет т.к. y(x) граф, где y = S&P 500 и x = один из 10 тыс показателей, бредставляет собой почти круглое облако. Таким образом формулируем задачу ещё более конкретно: предсказать S&P 500 индекс на один или два квартала вперёд имея в наличии 10 тыс экономических показателей с квартальным периодом используя много-переменную линейную регрессию.

Шаг 4: Выбираем из 10 тыс экономических показателей наиболее главные (уменьшаем размерность задачи). Это самый главный и трудный шаг. Допустим берём историю S&P 500 длинной в 30 лет (120 кварталов). Чтобы представить S&P 500 в виде линейной комбинации экономических показателй разного рода, достаточно иметь 120 показателей чтобы точно описать S&P 500 за эти 30 лет. Причём показатели могут быть совершенно любыми чтобы создать такую точную модель из 120 показателей и 120 значений S&P 500. Значит нужно уменьшать количество входов ниже количества описываемых значений функции. Например ищем 10-20 наиболее важных показателей-входов. Такие задачи описания данных небольшим количеством входов, выбранных из огромного количества кандидатов-базисов (словаря), называются разряжённым кодированием (sparse coding).

Методов отбора входов-предсказателей много. Я перепробовал их все. Вот главные два:

  1. Классифицируем все 10 тыс данных по их предсказауемой способности S&P 500. Предсказуемая способность может измеряться коэффициентом кореляции или взаимной информацией.
  2. Перебираем все 10 тыс показателей по дному и выбираем тот, который дал линейную модель y_mod = a + b*x1 описывающую S&P 500 с наименьшей ошибкой. Потом выбираем второй вход опять же перебором оставшихся 10 тыс -1 индикаторов таким образом чтобы он описал остаток y - y_mod = c + d*x2 с наименьшей ошибкой. И так далее. Такой метод называется stepwise regression или matching pursuit. 

Вот первые 10 индикаторов с максимальным коэффициентом корреляции с S&P 500:

Series ID Lag Corr Mut Info
'PPICRM' 2 0.315 0.102
'CWUR0000SEHE' 2 0.283 0.122
'CES1021000001' 1 0.263 0.095
'B115RC1Q027SBEA' 2 0.262 0.102
'CES1000000034' 1 0.261 0.105
'A371RD3Q086SBEA' 2 0.260 0.085
'B115RC1Q027SBEA' 1 0.256 0.102
'CUUR0000SAF111' 1 0.252 0.117
'CUUR0000SEHE' 2 0.251 0.098
'USMINE' 1 0.250 0.102

Вот первые 10 индикаторов с максимальной взаимной информацией с S&P 500:

Series ID Lag Corr Mut Info
'CPILEGSL' 3 0.061 0.136
'B701RC1Q027SBEA' 3 0.038 0.136
'CUSR0000SAS' 3 0.043 0.134
'GDPPOT' 3 0.003 0.134
'NGDPPOT' 5 0.102 0.134
'OTHSEC' 4 0.168 0.133
'LNU01300060' 3 0.046 0.132
'LRAC25TTUSM156N' 3 0.046 0.132
'LRAC25TTUSQ156N' 3 0.046 0.131
'CUSR0000SAS' 1 0.130 0.131

 

Lag это задержка входного ряда по отношению к моделируемому ряду S&P 500. Как видно из этих таблиц, разные методы выбора наиважнейших входов приводят к разным наборам входов. Так как моей конечной целью является минимизация ошибки модели, то я выбрал второй метод выбора входов, т.е. перебор всех входов и выбор того входа который дал наименьшую ошибку.

Шаг 5: Выбираем метод расчёта ошибки и коэффициентов модели. Наипростейшим методом является метод СКО, поэтому линейная регрессия, использующая этот метод, так популярна. Проблема метода СКО в том что он чувствителен к выбросам (outliers), т.е. эти выбросы существенно влияют на коэфициенты модели. Чтобы уменьшить эту чувствительность, вместо суммы квадратов ошибок можно использовать сумму абсолютных значений ошибок, что ведёт к методу наименьших модулей (МНМ) или robust regression. Этот метод не имеет аналитического решения для коэффициентов модели в отличие от линейной регрессии. Обычно модули заменяются на плавные/дифференцируемые аппроксимирующие функции и решение ведётся численными методами и долго. Я пробовал оба метода (лин регрессии и МНМ) и особого преимущества МНМ не заметил. Вместо МНМ, я пошёл в обход. На втором шагу получения стационарных данных путём их дифференцирования, я добавил операцию нелинейной нормализации. То есть, исходный ряд x[1], x[2], ... x[i-1], x[i] ... сначала преобразуется в ряд разниц x[2]-x[1] ... x[i]-x[i-1] ... и потом каждая разница нормализуется путём её замены на sign(x[i]-x[i-1])*abs(x[i]-x[i-1])^u, где 0 < u < 1. При u=1, мы получаем классический метод СКО с его чувствительностью к выбросам. При u=0, все значения входного ряда заменяются на бинарные значения +/-1 практически без выбросов. При u=0.5, получаем что-то близкое к МНМ. Оптимальное значение u лежит где-то между 0.5 и 1.

Следует отметить что одним из популярных методов преобразования данных к стационарному виду является замена значений ряда на разницу логарифмов этих значений, т.е. log(x[i]) - log(x[i-1]) или log(x[i]/x[i-1]). Выбор такого преобразования опасен в моём случае так как в словаре 10 тыс входов много рядов с нулевыми и отрицательными значениями. Логарифм также имеет преимущетсво уменьшения чувствительности метода СКО к выбросамы По существу, моя функция преобразования sign(x)*|x|^u имеет ту же цель что и log(x), но без проблем связанных с нулевыми и отрицательными значениями.

Шаг 6: Расчитывем предсказание модели путём подстановки свежих входных данных и расчёта выхода модели используя те же коэффициенты модели, кторые были найдены линейной регрессией на предыдущем участки истории. Тут важно иметь в виду что квартальные значения экономических показателей и S&P 500 приходят почти одновременно (с точностью до 3 месяцев). Поэтому чтобы предсказать S&P 500 на следующий квартал, модель должна быть построена между текущим квартальным значением S&P 500 и входами задержанными по крайней мере на 1 квартал (Lag>=1). Чтобы предсказать S&P 500 через один квартал вперёд, модель должна быть построена между текущим квартальным значением S&P 500 и входами задержанными по крайней мере на 2 квартала (Lag>=2). И так далее. Точность предсказаний существенно снижается с увеличением задержки больше 2.

Шаг 7: Проверяем точность предсказаний на предыдущей истории. Первоначальная методика описанныя выше (вписываем каждый вход в предыдущую историю, выбираем вход дающий наименьшую СКО и рассчитывем предсказание по свежему значению этого входа) дала СКО предсказания, которая была ещё хуже чем случайные или нулевые предсказания. Задался таким вопросом: а почему вход, который хорошо вписался в прошлое, должен иметь хорошую предсказуемую способность будущего? Имеет смысл выбирать входы модели на основе их предыдущей ошибки предсказаний, а не на основе наименьшей ошибки регрессии на известных данных.

В конце концов, моя модель может быть пошагово описанa так:

  1. Закачиваем экономические данные из stlouisfed (около 10 тыс индикаторов). 
  2. Преобразеум данные к стационарному виду и нормализуем.
  3. Выбираем линейную модель индекса S&P 500, аналитечески решаемую методом СКО (линейная регрессия).
  4. Выбираем длинну истории (1960 - Q2 2015) и разбиваем её на обучающий отрезок (1960 - Q4 1999) и тестируемый отрезок (Q1 2000 - Q2 2015).
  5. Начинаем предсказания с 1960 + N + 1 года, где N*4 это начальное количество известных квартальных значений S&P 500.
  6. На первых N данных строится линейная модель y_mod = a + b*x для каждого экономического показателя, где y_mod - модель S&P 500, а x - один из экономических показателей. 
  7. Предсказываем N + 1 бар каждой моделью.
  8. Расчитываем ошибки предсказаний N + 1 бара каждой моделью. Запоминаем эти ошибки.
  9. Увеличиваем количество известных значений S&P 500 на 1, т.е. N + 1, и повторяем шаги 6-9 до тех пор пока не достигнем конца обучающего отрезка (Q4 1999). На этом шагу у нас запомнены ошибки предсказаний начиная с 1960 + N +1 года и кончая Q4 1999 каждым экономическим показателем.
  10. Начинаем тестирование модели на втором отрезкe истории (Q1 2000 - Q2 2015).
  11. Для каждого из 10 тыс входов расчитывем средне-квадратичную ошибку предсказаний за 1960 - Q4 1999.
  12. Из 10 тыс входов выбираем тот который имел наименьшую СКО предсказания за 1960 - Q4 1999.
  13. Строим линейную модель y_mod = a + b*x для каждого экономического показателя за 1960 - Q4 1999. 
  14. Предсказывем Q1 2000 каждой моделью.
  15. Предсказание выбранного входа с наименьшей СКО предсказаний за предыдущий отрезок времени (1960 - Q4 1999) выбираем как наше главное предсказание Q1 2000.
  16. Расчитываем ошибки предсказаний всех входов на Q1 2000 и добавляем их к СКО этих же входов за предыдущий отрезок времени (1960 - Q4 1999).
  17. Переходим к Q2 2000 и повторяем шаги 12-17 пока не достигнем конца тестируемого участка (Q2 2015) с неизвестным значением S&P 500, предсказание которого является нашей главной целью.
  18. Накопляем ошибки предсказаний за Q1 2000 - Q4 2014 сделанными входами с наименьшей СКО предсказаний на предыдущих отрезках. Эта ошибка (err2) и является нашей out-of-sample ошибкой предсказания моделью. 

Вкратце, выбор предсказателя зависит от его СКО предсказний предыдущих значений S&P 500. Заглядывания в будущее нет. Предсказатель может меняться по времени, но в конце тестируемого отрезка он в основном перестаёт меняться. Моя модель выбрала PPICRM с задержкой в 2 квартала как первый вхoд для предсказания Q2 2015. Линейная регрессия S&P 500 выбранным входом PPICRM(2) за 1960 - Q4 2014 показана внизу. Чёрные кружки - линейная регрессия. Разноцветные кружки - исторические данные за 1960 - Q4 2014. Цвет кружка означает время.


Предсказания S&P 500 в стационарном виде (красная линия):

 

Предсказания S&P 500 в исходном виде (красная линия):

 

Из графика видно что модель предсказывает рост S&P 500 во втором квартале 2015 года. Добавление второго входа увеличивают ошибку предсказаний:

1 err1=0.900298 err2=0.938355 PPICRM (2)

2 err1=0.881910 err2=0.978233 PERMIT1 (4) 

где err1 это ошибка регрессии. Очевидно что она уменьшается от добавления второго входа. err2 это средне-квадратичная ошибка предсказания, делённая на ошибку случайных предсказаний. То есть err2>=1 означает что предсказание моей моделью не лучше чем случайные предсказания. err2<1 означает что предсказание моей моделью лучше чем случайные предсказания.

PPICRM = Producer Price Index: Crude Materials for Further Processing

PERMIT1 = New Private Housing Units Authorized by Building Permits - In Structures with 1 Unit

Описанная выше модель может быть перефразирована таким образом. Собираем 10 тыс экономистов и просим их предсказать рынок на квартал вперёд. Каждый экономист проходит со своим предсказанием. Но вместо того чтобы выбрать какое-то предсказание на основе количества написанных ими учебников или полученных Нобелевских премий в прошлом, мы ждём несколько лет, собирая их предсказания. После существенного количества предсказаний, мы видим какой экономист более точный и начинаем верить его предсказаниям до тех пор пока какой-нибудь другой экономист не превзойдёт его по точности.

Анализ впечатляет, но остался один вопрос: а не задумывались, что предсказывать сразу 500 (!!!) влияющих друг на друга курсов несколько сложнее, чем 1? Ну реально, почему S&P500 выбран? Его ж 500 самостоятельных и трудно предсказуемых компаний формируют. Элементарная логика подсказывает, что этот подход желательно опробывать на одном эмитенте, что повысит доверие к конечному результату примерно... в 500 раз. :)
 
Реter Konow:
Анализ впечатляет, но остался один вопрос: а не задумывались, что предсказывать сразу 500 (!!!) влияющих друг на друга курсов несколько сложнее, чем 1? Ну реально, почему S&P500 выбран? Его ж 500 самостоятельных и трудно предсказуемых компаний формируют. Элементарная логика подсказывает, что этот подход желательно опробывать на одном эмитенте, что повысит доверие к конечному результату примерно... в 500 раз. :)
Не прав. Хоть тема и называется "предсказание рынка на основе макроэкономических показателей", но показатели в этом анализе не имеют никакого значения. Просто переменные подставляемые в некую формулу после математического обезличевания и растождествления со всеми внешними смысловыми и логическими связями с Миром. Собранные в абстрактные числовые ряды сухие цифры служат моделью нейронной сети, по ним предсказывающей... нет, не рынок, а тот самый числовой ряд. 

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

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

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

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

Получается технический анализ на фундаментальных данных.

Не всё так просто с фундаментальным анализом. Есть много факторов влияющих на цены не подпадающих под экономические показатели. Это выборы, тот же Брекзит, разного рода слухи и прочее. Они могут влиять на цену сильнее всех экономических показателей. 

 
Не в тему. 
Давно занимают вопросы возникшие от чтения многочисленных трейдерских "потоков сознания" на форуме: 

1. почему люди легко и быстро забывают обьект исследования, теряясь в "числовых рядах", коффициентах и прочем, и никогда не возвращаются к точке исхода, вечно блуждая в дремучих математических дебрях? 

2. Какая мотивация ими движет? Неужели только деньги?

На первый вопрос ответа еще нет, а вот на второй... кое что имеется:

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

 Первый пост этой темы демонстрирует не первый, и не второй шаг в этом туманном направлении...
 
Uladzimir Izerski:

Получается технический анализ на фундаментальных данных.

Не всё так просто с фундаментальным анализом. Есть много факторов влияющих на цены не подпадающих под экономические показатели. Это выборы, тот же Брекзит, разного рода слухи и прочее. Они могут влиять на цену сильнее всех экономических показателей. 

Да, все так.
 

To Peter: Я не предсказываю S&P500 напрямую. Цель данной работы предсказать рецессии чтобы выйти из рынка до их наступления и улучшить прибыльность buy&hold стратегии. Хотя S&P500 содержит акции 500 компаний, двигается он институтными инвесторами, которые продают и покупают сам индекс (или его опции), а не его составляющие. 13% в год кажется не много, но достаточна для больших денег где текучесть важна. Берни Мадофф привлекал его клиентов обещая им скромные 10% в год, чего не смог достичь.

To Uladzimir: Согласен что флуктуации цен зависят от разных социально-политических событий, выборов, брекзитов, инфекций, и пр. В конце концов всё сводится к спросу и предложению на продукты производтсва/сервис, уровню безработицы, и другим показателям экономики. Мне каждодневные флуктуации рыночных цен не важны. Даже простая buy&hold стратегия зарабатывает 7.4% в год. Мне важно избежать долгих позиций во время рецессий и улучшить прибыльность этой стратегии. Кстати, другая стратегия это покупать недвижимость. Нот это даёт только 5% в год, в США.

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

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

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

Так, какой прогноз по S&P500 ?

 
Vladimir:

Извините, но всё это ради 5-13 % в год??? Овчинка выделки не стоит)

Причина обращения: