如何在时间序列中找到上衣和下衣?

时间:2012-04-16 05:41:02

标签: algorithm time-series transform signal-processing

起初,这个问题听起来真的很愚蠢,但并不是根本问题。也许,任何算法看起来都无法解决,但我假装说它是。

那么问题。我有图表,例如黄金。我需要找到顶部和底部按时轴向的位置。问题是我需要找到重大上升和重大衰退的起点。问题是存在许多小的无关紧要的上升和下滑。

以下是更好理解的图片 - 我想找到的红点(不完全是,但在某种程度上是这样的)。

enter image description here

所以我可能需要过滤小的翻身和调低,但不知道该怎么做。任何想法我都会很高兴。我不需要java等算法,只需用语言即可。

3 个答案:

答案 0 :(得分:9)

  1. 您可以先执行平滑低通滤波操作,然后从平滑后的数据中找到局部最小值/最大值的位置。然后从原始数据中获取最小值和最大值的值。

  2. 您可以使用正常的最大/最小滤镜,找到所有转折点,然后按阈值过滤转折点列表。

  3. 我认为你真正想要做的是从信号中删除“长期变化”并仅查看“短期变化”。这可以使用经验模式分解来完成。参见my thesis.的第2.3.2节(Alernately,谷歌周围的“经验模式分解”,“EMD”或“希尔伯特 - 黄变换”。)

  4. 这是EMD的实际应用:

    enter image description here

    注意随着EMD算法提取信号的组成部分,从“最详细”开始到“最常见趋势”结束,这种普遍性越来越普遍。 (注意,显然有九个组件 - 只显示了几个组件。)

答案 1 :(得分:0)

您通常会从移动平均线开始 - 也就是说,平均N个最近点,其中平滑程度大致与N成比例(即,平均值越多,您的结果越平滑)。< / p>

然后你可以得出每个平均点和下一个点之间的差异。如果差异改变符号,则表示最小值或最大值(从正值到负值,从最大值到正值,从最小值到正值,最小值)。

答案 2 :(得分:0)

我可能不完全明白,但为什么你不能在特定的时间范围内取得最低点呢?大多数数据提供商确实提供当天的高/低,你能不能只存储它,然后只是获得时间范围x的最低值?

通过扩大学习范围,你可以删除小小的起伏。这就是我通常做的事情。另一种方法是,你可以使用过去X天的平均值来平滑结果(移动平均线)但是你会失去准确性(程度取决于范围......如果它的移动平均值是2-3天而不是糟糕的2年移动平均线。)

编辑:对不起,我想念,你试图找到范围。好吧,如果你有数据,那么为什么不首先找到最低点然后去第二天找出%变化,然后找出下一个等等,并覆盖你找到更高范围的那一天。你需要稍后再增加一些逻辑(例如从那个峰值下降%或者其他东西),否则你将报告通常会获取股票的IPO并将其全部高,并说这是一个单一的时期。