如何在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
相关产品推荐
相关产品推荐

