Определить тенденции во временных рядах

У меня есть база данных PSQL со значениями временных рядов для различных акций. Я хочу выяснить, увеличилась ли стоимость акций, скажем, на 50% за последние 45 дней. Я хочу обнаружить такие внезапные изменения в кривой. Прямо сейчас я сосредоточен на повышении ценностей. В основном квадратичные кривые, хотя было бы неплохо найти линейные / логарифмические увеличения тоже.

Я доберусь до внезапных падений позже. Какие-нибудь указатели на то, как я обнаруживаю такие образцы в кривой? Можно ли сделать это в sql? Я также открыт для изучения любых инструментов математического анализа или языков.

1 ответ

Чтобы получить такую ​​информацию, существует множество подходов. Если этот отчет будет запускаться время от времени, то у вас может быть SQL-запрос, который присоединит таблицу к себе в более раннюю дату. Предполагая, что у вас есть поля date, stock_ticker и price, запрос может выглядеть примерно так:

         SELECT base.date, 
                base.stock_ticker, 
                ((base.price - old.price) / old.price) as gain 
           FROM stocks as base
LEFT OUTER JOIN stocks as old
             ON base.stock_ticker = old.stock_ticker
            AND base.date = old.date + cast('45 days' as interval)

Это даст вам таблицу с датой, биржевым тикером и тем, насколько цена выросла с 45 дней назад. При этом вы можете использовать его как подзапрос, присвоить ему псевдоним предложение WITH или выполнить другую работу с ним.

Если вы не искали только соотношение за период времени, вы можете использовать ту же технику, чтобы получить среднесуточные значения, и с помощью этих данных найти скользящее среднее.

Другие вопросы по тегам