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

如何编写代码实现跨品种跨周期连续2-3根窄幅K线的颜色标记?

跨品种跨周期识别连续2-3根窄幅K线的方案

核心思路:用相对波动率的滚动统计替代固定绝对值

抛弃固定百分比阈值,改用品种自身的历史波动作为参照,自动适配不同股票、不同时间周期的波动特性。

最简实现步骤

  • 计算单根K线的相对波幅:用当前K线的高低差除以前收盘价,得到百分比形式的波幅,避免绝对值的局限性:
    # 计算相对波幅(百分比)
    df['rel_amplitude'] = (df['high'] - df['low']) / df['close'].shift(1) * 100
    
  • 用滚动窗口统计近期波幅的基准值,两种简单方案选其一:
    1. 滚动分位数法(更精准,适配波动分布):取过去N根(比如20根)K线相对波幅的20%分位数,当前波幅低于该分位数则判定为窄幅K线:
      # 计算20根K线内相对波幅的20%分位数作为窄幅阈值
      df['narrow_threshold'] = df['rel_amplitude'].rolling(window=20).quantile(0.2)
      df['is_narrow'] = df['rel_amplitude'] < df['narrow_threshold']
      
    2. 滚动均值比例法(更简单,易实现):当前波幅小于过去20根平均波幅的50%,判定为窄幅K线:
      # 计算20根K线的平均相对波幅,取50%作为阈值
      df['avg_amplitude'] = df['rel_amplitude'].rolling(window=20).mean()
      df['is_narrow'] = df['rel_amplitude'] < df['avg_amplitude'] * 0.5
      
  • 统计连续窄幅K线数量,触发标记:
    # 统计连续窄幅K线的计数
    df['consec_narrow'] = df['is_narrow'].groupby((df['is_narrow'] != df['is_narrow'].shift()).cumsum()).cumsum()
    # 标记连续2-3根的情况
    df['mark_for_color'] = df['consec_narrow'].between(2, 3)
    

关于你提到的“过去20根K线波动范围”思路的问题

这个思路的核心问题是:整体波动范围是区间极值的差值,反映的是一段周期的整体波动幅度,无法精准识别单根K线的窄幅特性。比如过去20根波动大,但其中某几根可能本身波幅很小,用整体范围判断会误判。而上面的方法针对单根K线的波幅做统计,逻辑更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:06:21