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

如何在Pine Script中计算两个指定时间点的交易日天数?

在Pine Script中计算两个时间点之间的交易日天数

要计算两个指定时间点之间的交易日天数,核心思路是遍历时间区间内的K线,仅统计每个新交易日的首次出现——因为10分钟周期下每个交易日会生成多个K线,需避免重复计数。以下是完整实现代码:

//@version=5
indicator("交易日天数计算器", overlay=true)

// 用户输入的价格与时间点
p1 = input.price(0, "P-1", confirm=true, group = "1", inline = "1")
input_time_1  = input.time(0, "T-1", confirm=true, group = "1", inline = "1")

p2 = input.price(0, "P-2", confirm=true, group = "2", inline = "2")
input_time_2  = input.time(0, "T-2", confirm=true, group = "2", inline = "2")

// 统一时间区间的先后顺序
start_time = math.min(input_time_1, input_time_2)
end_time = math.max(input_time_1, input_time_2)

// 初始化计数变量与交易日跟踪变量
var int trading_day_count = 0
var int prev_trading_date = na

// 判断当前K线是否在目标时间范围内
in_target_range = time >= start_time and time <= end_time

// 检测是否进入新交易日(time("D")返回当日开盘时间,变化时代表切换交易日)
is_new_trading_day = ta.change(time("D")) != 0

// 统计符合条件的交易日
if (in_target_range and is_new_trading_day)
    trading_day_count += 1
    prev_trading_date = year(time) * 10000 + month(time) * 100 + dayofmonth(time)

// 时间区间修改时重置计数
if (ta.change(start_time) or ta.change(end_time))
    trading_day_count := 0
    prev_trading_date := na

// 在图表上显示结果
var label result_label = label.new(bar_index, high, "", yloc=yloc.abovebar)
label.set_text(result_label, "交易日天数: " + str.tostring(trading_day_count))

// 绘制用户标记的蓝色竖线
var line line1 = na
var line line2 = na
line1 := line.new(input_time_1, low, input_time_1, high, color=color.blue, width=2)
line2 := line.new(input_time_2, low, input_time_2, high, color=color.blue, width=2)

关键逻辑说明

  • time("D"):返回当前K线所属交易日的开盘时间,当该值发生变化时,意味着进入了新的交易日。
  • 时间区间处理:用math.min和math.max保证统计范围的正确性,无需关心用户输入的时间先后顺序。
  • 重置机制:当用户修改时间输入时,自动清空计数并重新统计,避免旧数据干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:25:14