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

使用ta.barssince获取指定时间戳后K线数返回NaN的技术咨询

解决ta.barssince返回NaN的问题

问题原因

你遇到的NaN是因为time == startDate的判断过于严格:

  • TradingView中time代表每根K线的开盘时间戳,仅当用户输入的startDate与某根K线的开盘时间完全一致时,time == startDate才会成立。
  • 若输入的时间戳(比如非开盘时刻的任意时间)与所有K线的开盘时间不匹配,ta.barssince找不到满足条件的K线,就会返回NaN。

解决方案

我们需要放宽时间匹配条件,改为匹配大于等于目标时间的第一根K线,以下是两种可行实现方式:

方式1:基于ta.valuewhen计算K线数量

通过定位第一个符合时间条件的K线索引,再与当前K线索引做差值计算:

//@version=5
indicator("My Indicator")
startDate = input.time(timestamp("August 08 2024"), "Start date", group = 'Lookback Properties')

// 获取第一个时间>=startDate的K线索引
firstTargetBar = ta.valuewhen(time >= startDate, bar_index, ta.barssince(time >= startDate))
// 计算从目标K线到当前的数量(+1是因为包含当前K线)
lookBack = bar_index - firstTargetBar + 1

// 处理目标时间未到的情况(此时lookBack为NaN)
lookBack := na(lookBack) ? na : lookBack

log.info("lookBack = {0}", lookBack)

方式2:基于ta.barssince反向判断

通过判断最后一根早于目标时间的K线,计算其到当前的间隔数:

//@version=5
indicator("My Indicator")
startDate = input.time(timestamp("August 08 2024"), "Start date", group = 'Lookback Properties')

// 计算最后一根早于startDate的K线到当前的间隔数
lookBack = ta.barssince(time < startDate)

// 处理所有K线都晚于目标时间的情况
lookBack := na(lookBack) ? bar_index + 1 : lookBack

log.info("lookBack = {0}", lookBack)

说明

  • 两种方式都能正确获取从目标时间戳至今的K线数量,包含当前K线。
  • 若目标时间晚于当前所有K线的时间,两种方式都会返回NaN(方式2中通过na(lookBack)判断),符合逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:13