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

Pine Script条件判断异常:无法正确识别Bar 2的Imbalance问题

问题分析与修复

核心错误点

  • var关键字误用导致变量不更新

    1. 定义ib时用了var int ib = find_imbalance(...),var修饰的变量只会在脚本首次执行时初始化一次,后续K线不会重新调用函数计算新值,因此ib始终保持初始的0,触发else分支。
    2. find_imbalance函数内的var int rv = 0同样错误:var让rv不会在每次调用函数时重置为0,会保留上一次的计算结果,导致逻辑判断混乱。
  • 参数对应逻辑(可选优化)
    从日志数值看,bar[3].low = 5263.25,bar[1].high = 5263,满足l3 > h1的空失衡条件,但因var问题未生效。若你的目标是检测**Bar2(当前K线往前数第2根)**的失衡,当前参数high[1]和high[3]的对应关系可能不符合预期,需根据你的失衡定义调整。

修复后的代码

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © myself

//@version=5
indicator("My first try", overlay=true)

find_imbalance(h1, h3, l1, l3) =>
    int rv = 0  // 移除var,每次调用重置为0

    if h3 < l1
        rv := 1
    if l3 > h1
        rv := -1
    rv

var label myLabel = label.new(bar_index, high + ta.tr, textcolor=color.white, color=color.blue)

if barstate.islast
    log.info("{0} - cur: h={1}, l={2}, bar[1]: h={3}, l={4} bar[3]: h={5}, l={6}", bar_index, high, low, high[1], low[1], high[3], low[3])

    label.set_x(myLabel, bar_index)
    label.set_y(myLabel, high + ta.tr)
    int ib = find_imbalance(high[1], high[3], low[1], low[3])  // 移除var,每次重新计算

    if ib > 0
        label.set_text(myLabel, text="Imbalance Long")
    else if ib < 0
        label.set_text(myLabel, text="Imbalance Short")
    else
        label.set_text(myLabel, text="Bars on\nthe chart:\n" + str.tostring(bar_index + 1))

修复说明

  1. 移除find_imbalance函数内rv的var修饰,确保每次调用函数时从0开始判断。
  2. 移除ib变量的var修饰,让每根最后K线都重新计算当前失衡状态。
  3. 若需检测Bar2的失衡,可根据你的失衡定义调整参数,比如改为find_imbalance(high[2], high[0], low[2], low[0])(对应Bar2与前后K线的缺口关系)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:01:08