Определить тенденции во временных рядах
У меня есть база данных 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 или выполнить другую работу с ним.
Если вы не искали только соотношение за период времени, вы можете использовать ту же технику, чтобы получить среднесуточные значения, и с помощью этих данных найти скользящее среднее.