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

Pine Script如何基于条件设置高低点实现自定义Darvas箱体

动态Darvas箱体指标优化方案

原有代码核心问题

  • 依赖固定长度的lowest()/highest()滑动窗口函数计算高低点,窗口滑动时历史计算结果会自动偏移,是绘图无逻辑变动的根本原因
  • NH、NL的更新逻辑未与箱体突破动作强绑定,触发逻辑和边界更新不同步,导致条件触发但绘图未更新的问题

实现逻辑优化

完全匹配需求:仅在发生有效突破时才重置箱体边界,箱体运行期间持续记录区间极值,无滑动窗口导致的重绘问题

  1. 用var关键字定义箱体边界变量,数值跨K线持久化存储,不会随历史K线变动自动重置
  2. 新增临时高低点缓存,自动记录当前箱体运行过程中的所有价格极值
  3. 收盘价突破当前箱体上沿时,将箱体下沿上移至区间记录的最低低点,上沿更新为区间最高高点;收盘价跌破箱体下沿时反向操作
  4. 突破/跌破触发后自动重置临时高低点缓存,开始记录下一个箱体的极值

优化后完整代码

//@version=5
indicator("无重绘动态Darvas箱体", overlay=true, shorttitle="动态Darvas")

// 可自定义初始箱体确认周期,不需要可删除该参数
init_period = input.int(20, title="初始箱体确认周期", minval=5)

var float top_box = na
var float bottom_box = na
var float temp_high = na
var float temp_low = na

// 初始箱体赋值
if bar_index == init_period
    top_box = ta.highest(high, init_period)
    bottom_box = ta.lowest(low, init_period)
    temp_high = top_box
    temp_low = bottom_box

// 运行期间实时更新临时极值
if bar_index > init_period
    temp_high := math.max(temp_high, high)
    temp_low := math.min(temp_low, low)

    // 突破上沿更新箱体
    if close > top_box
        bottom_box := temp_low
        top_box := temp_high
        temp_high := high
        temp_low := low

    // 跌破下沿更新箱体
    if close < bottom_box
        top_box := temp_high
        bottom_box := temp_low
        temp_high := high
        temp_low := low

// 绘制箱体
plot(top_box, linewidth=3, color=color.green, title="箱体阻力位")
plot(bottom_box, linewidth=3, color=color.red, title="箱体支撑位")

参数说明

  • 保留了原有的20周期参数作为初始箱体的确认周期,可根据需求自行调整,不会导致后续重绘
  • 若不需要初始确认周期,直接将初始赋值逻辑改为第一根K线用当前高低点赋值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:48:04