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

如何根据价格在蜡烛中的位置为line.new定义上影线、下影线及实体对应颜色

问题分析与修正方案

首先得指出你代码里的几个核心逻辑错误,这些问题直接导致了需求无法实现:

  • UW = max(open, close) > high 这个条件永远不可能成立——K线的high本身就是该周期内的最高价,实体顶部(max(open,close))必然≤high,所以红色永远不会被触发。
  • LW = low < min(open, close) 是在判断K线是否存在下影线,而不是当前价格处于下影线区域,逻辑完全偏离了你的需求。
  • CandleBody = max(open, close) < min(open, close) and max(open, close) > min(open, close) 是矛盾的——最大值不可能同时小于且大于最小值,这个条件永远不成立。

正确的区域判断逻辑

我们先明确蜡烛各区域的定义,再针对当前价格(这里默认用close,如果需要实时价格可直接沿用)做判断:

  1. 实体顶部:bodyTop = math.max(open, close)
  2. 实体底部:bodyBottom = math.min(open, close)
  3. 上影线区域:价格 > 实体顶部(即价格落在实体顶部到K线最高价之间)
  4. 下影线区域:价格 < 实体底部(即价格落在K线最低价到实体底部之间)
  5. 实体范围内:价格在实体底部和顶部之间(包含边界)

修正后的完整代码

//@version=5
indicator("Candle Zone Line Color", overlay=true)

// 计算蜡烛实体的顶部与底部
bodyTop = math.max(open, close)
bodyBottom = math.min(open, close)
// 定义要判断的目标价格(这里用当前K线收盘价,可按需替换)
targetPrice = close

// 判断价格所处的蜡烛区域
inUpperWick = targetPrice > bodyTop
inLowerWick = targetPrice < bodyBottom
inBody = not inUpperWick and not inLowerWick

// 显示开关输入
show_BTSL = input(true, title="Show Candle Color", type=input.bool)

// 确定线条颜色
lineColor = show_BTSL ? inUpperWick ? color.red : inLowerWick ? color.green : color.blue : na

// 示例:绘制一条跟随价格的水平线,颜色随区域变化
var line priceLine = na
if barstate.islast
    if show_BTSL
        priceLine := line.new(bar_index - 20, targetPrice, bar_index, targetPrice, color=lineColor, width=2)
    else
        line.delete(priceLine)

代码说明

  • 先计算实体的顶底值,这是区域判断的基础;
  • 用targetPrice对应你要判断的价格(如果是实时价格,直接用close即可,Pine Script会自动更新);
  • 通过三个布尔值明确价格所处的区域;
  • 最后根据区域结果设置线条颜色,示例里绘制了一条跟随价格的水平线,你可以根据自己的需求调整line.new的起点、终点等参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:07:40