如何基于起始与结束时间戳绘制含区间高低点的TradingView箱体?
基于时间戳实现Pine Script箱体绘制方案
以下是直接基于时间戳指定区间的箱体绘制代码,替代固定K线数的实现,彻底解决切换时间框架时的适配问题:
//@version=5 indicator('时间戳箱体', overlay=true) // 输入起始与结束时间戳 start_time = input.time(timestamp("2024-01-01 00:00"), title="起始时间") end_time = input.time(timestamp("2024-02-01 00:00"), title="结束时间") show_box = input.bool(true, title="显示箱体") // 定位区间的起始和结束K线索引 start_bar = ta.valuewhen(time >= start_time, bar_index, 0) end_bar = ta.valuewhen(time >= end_time, bar_index, 0) // 计算区间内的最高最低价 range_high = ta.highest(high, ta.barssince(time >= start_time) + 1) range_low = ta.lowest(low, ta.barssince(time >= start_time) + 1) // 绘制箱体(仅在历史K线完成后执行) if barstate.islast if show_box // 绘制四条边组成箱体 bot_line = line.new(start_bar, range_low, end_bar, range_low, color=color.red, width=2) top_line = line.new(start_bar, range_high, end_bar, range_high, color=color.green, width=2) left_line = line.new(start_bar, range_high, start_bar, range_low, color=color.blue, width=2) right_line = line.new(end_bar, range_high, end_bar, range_low, color=color.blue, width=2) // 删除上一次绘制的旧箱体线条 line.delete(bot_line[1]) line.delete(top_line[1]) line.delete(left_line[1]) line.delete(right_line[1])
关键逻辑说明
- 时间区间输入:用
input.time让用户直接选择起始和结束时间,不管切换到哪个时间框架,区间都是固定的日历时间,无需调整参数 - 区间K线定位:通过
ta.valuewhen找到时间戳对应的K线索引,确保箱体的左右边界精准对应指定时间 - 高低价计算:用
ta.barssince获取从起始时间到当前的K线数量,再计算该范围内的最高最低价,确保只统计目标区间内的数据 - 绘制优化:只在最后一根K线(
barstate.islast)执行绘制,避免重复生成线条,同时删除上一次的旧线条,保持界面整洁
内容的提问来源于stack exchange,提问作者Bruce Ecurb
相关产品推荐
相关产品推荐

