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

PDH/PDL指标画线起始位置切换功能开发求助

PDH指标画线起始位置切换问题解决

我在开发PDH/PDL指标,作为编程新手,目前指标基础功能正常,但想加个画线起始位置的切换选项:要么从新交易日的第一根K线开始画,要么从前一日日K高点对应的那根K线位置开始画。

当前实现“从新交易日”画线的代码是正常的:

dayh = request.security(syminfo.tickerid, 'D', high, barmerge.gaps_off, barmerge.lookahead_on)

previousday_from = input.string(defval = "New day",title="Previous Day from",group = "Previous Level", options = ["New day","Origine"])

var line line_pdh = na

if ta.change(time("D"))
  if previousday_from == "New day"
    line_pdh := line.new(x1=bar_index, y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1) // 从新交易日起始K线开始画

但我尝试实现“Origine”选项时写错了代码,把价格值dayh[1]当成了x坐标传入line.new(),导致达不到预期效果:

if ta.change(time("D"))
  if previousday_from == "New day" // x1= bar_index to put at actual value
    line_pdh := line.new(x1=bar_index, y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1) // Drawing from bar_index if new day
  else  // x1= dayh[1] to get the high[1] from previous day ?
     line_pdh := line.new(x1=dayh[1], y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1) // 这里x1用了价格,完全错误

问题根源

line.new()的x参数需要的是K线的索引值(bar_index),而不是价格数值。你之前错误地把前一日的高点价格当成了x坐标,这自然画不出正确的线。

修正方案

我们需要先获取前一日日K高点对应的那根K线在当前周期下的bar_index,然后用这个索引作为画线的起始点:

// 获取日线级别高点,以及该高点对应的bar_index(当前周期下的索引)
[dayh, dayh_bar_index] = request.security(syminfo.tickerid, 'D', [high, bar_index], barmerge.gaps_off, barmerge.lookahead_on)

previousday_from = input.string(defval = "New day",title="Previous Day from",group = "Previous Level", options = ["New day","Origine"])

var line line_pdh = na

// 每日开盘时更新画线
if ta.change(time("D"))
    // 先删除旧的线,避免重复
    line.delete(line_pdh)
    
    // 根据选项选择画线起始点
    if previousday_from == "New day"
        // 新交易日第一根K线为起点
        start_x = bar_index
    else
        // 前一日日K高点对应的K线为起点
        start_x = dayh_bar_index[1]
    
    // 绘制水平线,起点是选中的位置,终点是当前K线,y值为前一日高点
    line_pdh := line.new(x1=start_x, y1=dayh[1], x2=bar_index, y2=dayh[1], color=color.black, width=1)

代码说明

  1. 用request.security()同时获取日线的高点dayh和该高点对应的bar_index(dayh_bar_index)
  2. 每日切换交易日时,先删除旧的画线,避免界面上残留多条线
  3. 根据选择的选项,分别设置画线的起始x坐标:新交易日用当前bar_index,Origine选项用前一日日线高点对应的bar_index[1]
  4. 最后调用line.new()画出正确的水平线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:18:12