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

Pine Script编写TradingView指标遇行未续接语法错误求助

Pine Script 语法错误修复及代码优化

首次代码的错误分析

  • "end of line without line continuation" 错误:
    编辑器误报位置在第20行,但核心问题是line.new参数错误——bar_index[lineTime]属于非法用法,bar_index的索引只能是整数偏移(如bar_index[1]指代上一根K线),不能直接传入时间戳,这导致语法解析异常。
  • 时间戳处理逻辑错误:ta.timestamp生成UTC时间戳,直接加减偏移量的方式无法正确对应纽约时区的目标时段,且无法匹配历史K线时间。

修改后代码的错误分析

  • "Syntax error at input '('" 错误:
    1. 误用V4的study函数,V5中必须用indicator声明指标;
    2. hour(_time)、minute(_time)缺少ta.前缀,V5中时间类函数归属于ta命名空间;
    3. for循环、if语句的代码块未缩进,Pine Script强制要求代码块必须缩进(4空格或Tab),否则语法解析失败;
    4. 时区转换逻辑仍未修正,时间戳计算存在偏差。

修正后的完整代码

//@version=5
indicator("Session Liquidity", overlay=true)

// 输入参数
numDaysBack = input(5, "回溯天数")

// 纽约时区(EST)与UTC的偏移(毫秒),夏令时需改为4小时
nyOffset = 5 * 60 * 60 * 1000  

// 判断时间是否属于目标时段的函数
shouldDrawLine(_utcTime) =>
    // 将UTC时间转换为纽约时间的小时和分钟
    nyHour = ta.hour(_utcTime - nyOffset)
    nyMinute = ta.minute(_utcTime - nyOffset)
    (nyHour == 3 and nyMinute == 0) or  // 纽约时间3:00
    (nyHour == 8 and nyMinute == 0) or  // 纽约时间8:00
    (nyHour == 13 and nyMinute == 0) or // 纽约时间13:00
    (nyHour == 19 and nyMinute == 0) or // 纽约时间19:00
    (nyHour == 0 and nyMinute == 0)     // 纽约时间0:00

// 用数组管理线条,避免重复绘制
var line[] lineArray = array.new_line()
array.clear(lineArray)

for i = 0 to numDaysBack - 1
    // 获取当前日期往前i天的UTC 0点时间戳
    targetDate = ta.timestamp(year(timenow), month(timenow), dayofmonth(timenow) - i, 0, 0)
    // 遍历所有目标时段的UTC时间戳
    sessionTimes = [
        targetDate + (3 + nyOffset/3600000)*3600000,
        targetDate + (8 + nyOffset/3600000)*3600000,
        targetDate + (13 + nyOffset/3600000)*3600000,
        targetDate + (19 + nyOffset/3600000)*3600000,
        targetDate + (0 + nyOffset/3600000)*3600000
    ]
    for time in sessionTimes
        // 仅绘制图表可见范围内的线条
        if time >= time - ta.barssince(timeframe.isintraday) * timeframe.multiplier * 60000
            lineObj = line.new(x1=time, y1=ta.lowest(low, 20), x2=time, y2=ta.highest(high, 20), color=color.red, width=2, extend=extend.both)
            array.push(lineArray, lineObj)

关键优化点

  • 修正时区转换逻辑:通过UTC时间减去偏移量直接得到纽约时间,避免时间戳计算混乱;
  • 用数组管理线条,每次循环清空旧线条,防止重复绘制导致图表卡顿;
  • 增加可见范围检查,只绘制当前图表显示时段内的线条;
  • 统一遵循V5语法规范,所有内置函数添加正确的命名空间前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:39:58