代码之家  ›  专栏  ›  技术社区  ›  dharmatech

识别图表中的局部高点

  •  0
  • dharmatech  · 技术社区  · 4 年前

    S&P 500高点

    这是s&2000年以前的P 500。

    enter image description here

    当谈到历史价格数据时,人们通常会提到“历史最高点”或“局部最高点”。例如,上面用蓝色箭头注释了人们可能提到的高点。

    程序自动找到高点

    我希望有一个程序来识别高点,而不是手动注释图表。

    下面是一个似乎可以工作的C#函数:

    List<Candle> identify_highs(List<Candle> rows, TimeSpan threshold)
    {
        var ls = new List<Candle>();
    
        var candidate = rows.First();
                        
        foreach (var row in rows)
        {
            if (row.High > candidate.High)
            {
                var duration = (row.DateTime - candidate.DateTime).Duration();
    
                if ((row.DateTime - candidate.DateTime).Duration() > threshold)
                {
                    ls.Add(candidate);
    
                    candidate = row;
                }
                else
                {
                    candidate = row;
                }
            }
        }
    
        ls.Add(candidate);
    
        return ls;
    }
    

    以下是算法的大致描述:

    Given a list of candles, let the first one be the `candidate`.
    
    For each candle
        If the next candle is higher than the candidate
            If the next candle is far away from the candidate
                The candidate is a high.
                The candle is a new candidate
            Else
                The candle is a new candidate
    

    如果我运行一个程序,使用此函数绘制数据和高点 threshold 属于 175 天,它输出以下内容:

    enter image description here

    它还在控制台上显示高点:

    enter image description here

    问题

    这个 identify_highs 上面使用的函数只是为这个程序组合的一个快速的ad-hoc函数。

    有没有一种流行的或既定的算法来识别图表高点?

    项目

    生成上图的整个程序如下:

    https://github.com/dharmatech/IdentifyHighsCs/blob/master/IdentifyHighsCs/Program.cs

    0 回复  |  直到 4 年前
        1
  •  1
  •   John Alexiou    4 年前

    这很容易理解。上一个高点(灰色)和未来低点(橙色)

    fig1

    图1。 反转时间SP500图表(最旧的右侧)

    从最旧到最新扫描数据,并跟踪最大值(上面的灰色线)。对于任何时段,灰色线的值都表示以前的高点。

    现在,从最新到最旧扫描数据,并跟踪最小值(上面的橙色线)。对于任何时段,橙色线的值表示下一个低点。

    要查找上一个高点和未来低点出现的日期,只需在数据中查找与计算值匹配的日期即可。

    推荐文章