2013-08-01 5 views
4

J'ai une base de données psql avec des valeurs de séries temporelles pour différents stocks. Je veux trouver, si la valeur des stocks a augmenté de 50% par exemple dans les 45 derniers jours. Je veux détecter de tels changements soudains dans la courbe. En ce moment, mon objectif est d'augmenter les valeurs. Courbes majoritairement quadratiques, bien qu'il soit intéressant de trouver aussi des augmentations linéaires/logarithmiques.Détecter les tendances dans les séries chronologiques

Je vais obtenir des chutes soudaines plus tard. Des indications sur la façon dont je détecte de tels motifs dans la courbe? Est-il possible de le faire en SQL? Je suis également ouvert à l'apprentissage des outils d'analyse mathématique ou des langues.

+0

Vous souhaitez partager les définitions de table? –

Répondre

2

Pour obtenir ce type d'information, il existe de nombreuses approches possibles. Si ce rapport doit être exécuté de temps en temps, vous pouvez avoir une requête SQL qui rejoindra la table à elle-même, à une date plus ancienne. En supposant que vous avez une date, stock_ticker et prix que les champs, une requête pourrait ressembler à ceci:

  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) 

Cela vous donnera une table avec la date, le symbole boursier, et combien le prix a augmenté depuis le prix il y a 45 jours. Avec ceci, vous pouvez l'utiliser comme une sous-requête, l'alias avec une clause WITH, ou faire un autre travail dessus.

Si vous ne cherchiez pas seulement un ratio sur une période de temps, vous pouvez utiliser la même technique pour obtenir des moyennes quotidiennes et, avec ces données, trouver une moyenne mobile.

Questions connexes