You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何着手编写图表中5个higher highs与higher lows的形态检测代码?

图表形态检测实现思路指导

一、先搞定杂波过滤,精准定位有效高低点

  • 窗口过滤法:遍历价格数据,给每个点设置一个N根K线的观察窗口(比如5-10根,根据品种波动调整),只有当某个点是窗口内的绝对最高/最低点时,才标记为有效高低点,直接过滤掉小幅波动产生的杂点。
  • 波动阈值过滤:设定一个百分比阈值(比如0.5%),新的高点必须比上一个有效高点涨幅超过这个阈值,才算“有效抬高”;低点同理,需比上一个有效低点涨幅(因为是逐步抬高的低点)超过阈值,避免把微幅震荡误判为形态组成部分。

二、构建连续抬高的高低点序列

  • 维护两个列表:valid_highs(存筛选后的有效高点)、valid_lows(存筛选后的有效低点)。
  • 遍历筛选后的点,逐个验证序列连续性:
    • 高点:如果当前高点 > valid_highs最后一个元素,就加入列表;否则清空当前连续序列,重新计数。
    • 低点:当前低点 > valid_lows最后一个元素,加入列表;否则重置序列。
    • 必须保证高低点序列同步:比如当valid_highs有5个元素时,valid_lows也得有5个,才算完整形态的基础。

三、用滑动窗口检测重叠形态

当有效高点序列长度≥5时,用滑动窗口遍历:

  • 比如序列是H1<H2<H3<H4<H5<H6<H7,那么窗口从索引0开始,取H1-H5作为第一个形态;窗口后移到索引2,取H3-H7作为第二个重叠形态(完全符合你说的7个高点生成两个重叠形态的需求)。
  • 每取一个窗口的高点,同步检查对应索引的低点窗口是否也是连续抬高的,两者都满足才算有效形态。

四、核心逻辑伪代码示例

# 假设已完成预处理,得到有效高低点列表
valid_highs = [h1, h2, h3, h4, h5, h6, h7]
valid_lows = [l1, l2, l3, l4, l5, l6, l7]

detected_patterns = []
# 滑动窗口遍历,步长可根据需求调整(这里步长2实现7个高点出两个重叠形态)
for i in range(0, len(valid_highs) - 4, 2):
    window_highs = valid_highs[i:i+5]
    window_lows = valid_lows[i:i+5]
    
    # 验证是否连续抬高
    is_valid_highs = all(window_highs[j] < window_highs[j+1] for j in range(4))
    is_valid_lows = all(window_lows[j] < window_lows[j+1] for j in range(4))
    
    if is_valid_highs and is_valid_lows:
        detected_patterns.append({
            'start_pos': i+1,
            'end_pos': i+5,
            'high_points': window_highs,
            'low_points': window_lows
        })

# 输出检测结果
for idx, pattern in enumerate(detected_patterns):
    print(f"形态{idx+1}:第{pattern['start_pos']}至{pattern['end_pos']}个有效高低点")

五、实操注意事项

  • 过滤参数(窗口大小、波动阈值)必须结合你的交易品种和时间周期调优,拿历史数据回测几次,找到最适合的数值。
  • 遇到高低点不同步的情况(比如高点连续抬,但低点中途回落),直接重置序列,别硬凑形态。
  • 可以额外加形态确认规则,比如形态收尾时的成交量变化、后续的突破信号,提升形态的实战价值。

内容的提问来源于stack exchange,提问作者sey eeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:35:16