Итак, задача предсказать 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).
Методов отбора входов-предсказателей много. Я перепробовал их все. Вот главные два:
Классифицируем все 10 тыс данных по их предсказауемой способности S&P 500. Предсказуемая способность может измеряться коэффициентом кореляции или взаимной информацией.
Перебираем все 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 так:
Закачиваем экономические данные из stlouisfed (около 10 тыс индикаторов).
Преобразеум данные к стационарному виду и нормализуем.
Выбираем линейную модель индекса S&P 500, аналитечески решаемую методом СКО (линейная регрессия).
Выбираем длинну истории (1960 - Q2 2015) и разбиваем её на обучающий отрезок (1960 - Q4 1999) и тестируемый отрезок (Q1 2000 - Q2 2015).
Начинаем предсказания с 1960 + N + 1 года, где N*4 это начальное количество известных квартальных значений S&P 500.
На первых N данных строится линейная модель y_mod = a + b*x для каждого экономического показателя, где y_mod - модель S&P 500, а x - один из экономических показателей.
Предсказываем N + 1 бар каждой моделью.
Расчитываем ошибки предсказаний N + 1 бара каждой моделью. Запоминаем эти ошибки.
Увеличиваем количество известных значений S&P 500 на 1, т.е. N + 1, и повторяем шаги 6-9 до тех пор пока не достигнем конца обучающего отрезка (Q4 1999). На этом шагу у нас запомнены ошибки предсказаний начиная с 1960 + N +1 года и кончая Q4 1999 каждым экономическим показателем.
Начинаем тестирование модели на втором отрезкe истории (Q1 2000 - Q2 2015).
Для каждого из 10 тыс входов расчитывем средне-квадратичную ошибку предсказаний за 1960 - Q4 1999.
Из 10 тыс входов выбираем тот который имел наименьшую СКО предсказания за 1960 - Q4 1999.
Строим линейную модель y_mod = a + b*x для каждого экономического показателя за 1960 - Q4 1999.
Предсказывем Q1 2000 каждой моделью.
Предсказание выбранного входа с наименьшей СКО предсказаний за предыдущий отрезок времени (1960 - Q4 1999) выбираем как наше главное предсказание Q1 2000.
Расчитываем ошибки предсказаний всех входов на Q1 2000 и добавляем их к СКО этих же входов за предыдущий отрезок времени (1960 - Q4 1999).
Переходим к Q2 2000 и повторяем шаги 12-17 пока не достигнем конца тестируемого участка (Q2 2015) с неизвестным значением S&P 500, предсказание которого является нашей главной целью.
Накопляем ошибки предсказаний за 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 раз. :)
Анализ впечатляет, но остался один вопрос: а не задумывались, что предсказывать сразу 500 (!!!) влияющих друг на друга курсов несколько сложнее, чем 1? Ну реально, почему S&P500 выбран? Его ж 500 самостоятельных и трудно предсказуемых компаний формируют. Элементарная логика подсказывает, что этот подход желательно опробывать на одном эмитенте, что повысит доверие к конечному результату примерно... в 500 раз. :)
Не прав. Хоть тема и называется "предсказание рынка на основе макроэкономических показателей", но показатели в этом анализе не имеют никакого значения. Просто переменные подставляемые в некую формулу после математического обезличевания и растождествления со всеми внешними смысловыми и логическими связями с Миром. Собранные в абстрактные числовые ряды сухие цифры служат моделью нейронной сети, по ним предсказывающей... нет, не рынок, а тот самый числовой ряд.
С этой точки зрения, нет разницы сколько курсов в индексе и не важно какая политика у их компаний, а нужно, чтобы все переменные и значения были подставлены в формулу. А так и есть.
Так что, все верно, только тема должна называться иначе, потому что по сути, в ней не фундаментальный, а технический анализ.
Реter Konow: Не прав. Хоть тема и называется "предсказание рынка на основе макроэкономических показателей", но показатели в этом анализе не имеют никакого значения. Просто переменные подставляемые в некую формулу после математического обезличевания и растождествления со всеми внешними смысловыми и логическими связями с Миром. Собранные в абстрактные числовые ряды сухие цифры служат моделью нейронной сети, по ним предсказывающей... нет, не рынок, а тот самый числовой ряд.
С этой точки зрения, нет разницы сколько курсов в индексе и не важно какая политика у их компаний, а нужно, чтобы все переменные и значения были подставлены в формулу. А так и есть.
Так что, все верно, только тема должна называться иначе, потому что по сути, в ней не фундаментальный, а технический анализ.
Получается технический анализ на фундаментальных данных.
Не всё так просто с фундаментальным анализом. Есть много факторов влияющих на цены не подпадающих под экономические показатели. Это выборы, тот же Брекзит, разного рода слухи и прочее. Они могут влиять на цену сильнее всех экономических показателей.
Давно занимают вопросы возникшие от чтения многочисленных трейдерских "потоков сознания" на форуме:
1. почему люди легко и быстро забывают обьект исследования, теряясь в "числовых рядах", коффициентах и прочем, и никогда не возвращаются к точке исхода, вечно блуждая в дремучих математических дебрях?
2. Какая мотивация ими движет? Неужели только деньги?
На первый вопрос ответа еще нет, а вот на второй... кое что имеется:
Все их мат.поиски ведут в некий фантазийный формульно-табличный "рай", где бытие собрано, упорядочено и предсказуемо во всех аспектах. Именно так умные люди представляют Грааль.
Первый пост этой темы демонстрирует не первый, и не второй шаг в этом туманном направлении...
Получается технический анализ на фундаментальных данных.
Не всё так просто с фундаментальным анализом. Есть много факторов влияющих на цены не подпадающих под экономические показатели. Это выборы, тот же Брекзит, разного рода слухи и прочее. Они могут влиять на цену сильнее всех экономических показателей.
To Peter: Я не предсказываю S&P500 напрямую. Цель данной работы предсказать рецессии чтобы выйти из рынка до их наступления и улучшить прибыльность buy&hold стратегии. Хотя S&P500 содержит акции 500 компаний, двигается он институтными инвесторами, которые продают и покупают сам индекс (или его опции), а не его составляющие. 13% в год кажется не много, но достаточна для больших денег где текучесть важна. Берни Мадофф привлекал его клиентов обещая им скромные 10% в год, чего не смог достичь.
To Uladzimir: Согласен что флуктуации цен зависят от разных социально-политических событий, выборов, брекзитов, инфекций, и пр. В конце концов всё сводится к спросу и предложению на продукты производтсва/сервис, уровню безработицы, и другим показателям экономики. Мне каждодневные флуктуации рыночных цен не важны. Даже простая buy&hold стратегия зарабатывает 7.4% в год. Мне важно избежать долгих позиций во время рецессий и улучшить прибыльность этой стратегии. Кстати, другая стратегия это покупать недвижимость. Нот это даёт только 5% в год, в США.
Реter Konow: Не прав. Хоть тема и называется "предсказание рынка на основе макроэкономических показателей", но показатели в этом анализе не имеют никакого значения. Просто переменные подставляемые в некую формулу после математического обезличевания и растождествления со всеми внешними смысловыми и логическими связями с Миром. Собранные в абстрактные числовые ряды сухие цифры служат моделью нейронной сети, по ним предсказывающей... нет, не рынок, а тот самый числовой ряд.
С этой точки зрения, нет разницы сколько курсов в индексе и не важно какая политика у их компаний, а нужно, чтобы все переменные и значения были подставлены в формулу. А так и есть.
Так что, все верно, только тема должна называться иначе, потому что по сути, в ней не фундаментальный, а технический анализ.
3: доходности ценных бумаг разных сроков плюс ещё один
Buy & hold annual percentage rate, 1974 - present: APR = 7.35%
Buy & sell strategy using economic indicators: APR = 13.18%
Данная стратегия дала сигнал на продажу в декабре 2019. Пока сигнал на покупку не даёт. Видимо рынок пойдёт вниз.
Купил и держи.
Интересно было бы посмотреть на форвард-тест такой модели, но тут это невозможно.
Сейчас, насколько я понимаю, все ждут выборов.
3: доходности ценных бумаг разных сроков плюс ещё один
Buy & hold annual percentage rate, 1974 - present: APR = 7.35%
Buy & sell strategy using economic indicators: APR = 13.18%
Данная стратегия дала сигнал на продажу в декабре 2019. Пока сигнал на покупку не даёт. Видимо рынок пойдёт вниз.
Речь о конкретном инструменте или общий показатель?
Итак, задача предсказать 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).
Методов отбора входов-предсказателей много. Я перепробовал их все. Вот главные два:
Вот первые 10 индикаторов с максимальным коэффициентом корреляции с S&P 500:
Вот первые 10 индикаторов с максимальной взаимной информацией с S&P 500:
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 так:
Вкратце, выбор предсказателя зависит от его СКО предсказний предыдущих значений 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 тыс экономистов и просим их предсказать рынок на квартал вперёд. Каждый экономист проходит со своим предсказанием. Но вместо того чтобы выбрать какое-то предсказание на основе количества написанных ими учебников или полученных Нобелевских премий в прошлом, мы ждём несколько лет, собирая их предсказания. После существенного количества предсказаний, мы видим какой экономист более точный и начинаем верить его предсказаниям до тех пор пока какой-нибудь другой экономист не превзойдёт его по точности.
Не прав. Хоть тема и называется "предсказание рынка на основе макроэкономических показателей", но показатели в этом анализе не имеют никакого значения. Просто переменные подставляемые в некую формулу после математического обезличевания и растождествления со всеми внешними смысловыми и логическими связями с Миром. Собранные в абстрактные числовые ряды сухие цифры служат моделью нейронной сети, по ним предсказывающей... нет, не рынок, а тот самый числовой ряд.
Получается технический анализ на фундаментальных данных.
Не всё так просто с фундаментальным анализом. Есть много факторов влияющих на цены не подпадающих под экономические показатели. Это выборы, тот же Брекзит, разного рода слухи и прочее. Они могут влиять на цену сильнее всех экономических показателей.
Получается технический анализ на фундаментальных данных.
Не всё так просто с фундаментальным анализом. Есть много факторов влияющих на цены не подпадающих под экономические показатели. Это выборы, тот же Брекзит, разного рода слухи и прочее. Они могут влиять на цену сильнее всех экономических показателей.
To Peter: Я не предсказываю S&P500 напрямую. Цель данной работы предсказать рецессии чтобы выйти из рынка до их наступления и улучшить прибыльность buy&hold стратегии. Хотя S&P500 содержит акции 500 компаний, двигается он институтными инвесторами, которые продают и покупают сам индекс (или его опции), а не его составляющие. 13% в год кажется не много, но достаточна для больших денег где текучесть важна. Берни Мадофф привлекал его клиентов обещая им скромные 10% в год, чего не смог достичь.
To Uladzimir: Согласен что флуктуации цен зависят от разных социально-политических событий, выборов, брекзитов, инфекций, и пр. В конце концов всё сводится к спросу и предложению на продукты производтсва/сервис, уровню безработицы, и другим показателям экономики. Мне каждодневные флуктуации рыночных цен не важны. Даже простая buy&hold стратегия зарабатывает 7.4% в год. Мне важно избежать долгих позиций во время рецессий и улучшить прибыльность этой стратегии. Кстати, другая стратегия это покупать недвижимость. Нот это даёт только 5% в год, в США.
Не прав. Хоть тема и называется "предсказание рынка на основе макроэкономических показателей", но показатели в этом анализе не имеют никакого значения. Просто переменные подставляемые в некую формулу после математического обезличевания и растождествления со всеми внешними смысловыми и логическими связями с Миром. Собранные в абстрактные числовые ряды сухие цифры служат моделью нейронной сети, по ним предсказывающей... нет, не рынок, а тот самый числовой ряд.
Так, какой прогноз по S&P500 ?
Извините, но всё это ради 5-13 % в год??? Овчинка выделки не стоит)