Pine Script实现每日指定时段绘制矩形框 支持多历史日显示
TradingView 多日指定时段矩形绘制实现方案
原有代码问题说明
- 边界值仅做单变量存储,新交易日的2点、4点开盘价会覆盖历史值,无法给历史日矩形提供取值
- 矩形绘制逻辑仅在最后一根K线触发,只会生成1个矩形,无法批量生成历史日的对应图形
- 没有做历史天数的配置控制,也没有按日匹配边界值和显示时段的对应关系
可直接使用的完整代码
//@version=5 indicator("指定时段矩形", overlay=true, shorttitle="TimeBox") // 可配置参数 show_days = input.int(10, title="展示过往天数", minval=1, maxval=100) box_color = color.new(color.blue, 80) // 时间点判断 is_2am = hour == 2 and minute == 0 is_4am = hour == 4 and minute == 0 is_9am = hour == 9 and minute == 0 is_12pm = hour == 12 and minute == 0 is_new_day = ta.change(time("D")) // 按日存储边界值 var float daily_op1 = na var float daily_op2 = na var array<box> box_list = array.new_box() // 新交易日重置当日边界值 if is_new_day daily_op1 := na daily_op2 := na // 记录当日对应整点K线开盘价 if is_2am daily_op1 := open if is_4am daily_op2 := open // 到9点时创建当日矩形 if is_9am and not na(daily_op1) and not na(daily_op2) new_box = box.new(bar_index, math.max(daily_op1, daily_op2), bar_index, math.min(daily_op1, daily_op2), bgcolor=box_color, border_width=0) array.unshift(box_list, new_box) // 超出配置天数的旧矩形直接删除 if array.size(box_list) > show_days old_box = array.pop(box_list) box.delete(old_box) // 当日9点-12点时段内,更新最新矩形的右边界到当前K线 if hour >=9 and hour <12 and array.size(box_list) >0 current_box = array.get(box_list, 0) box.set_right(current_box, bar_index)
核心逻辑说明
- 所有参数支持在指标设置面板直接调整,不需要改代码:可以自行修改展示天数、矩形颜色,也可以根据需求调整边界取值时间、矩形显示时段
- 每个交易日独立存储当日2点、4点的开盘价,不会出现历史值被覆盖的问题
- 矩形在每日9点第一根K线自动创建,随着行情推进自动延伸右边界到12点整点,自动清理超过设置天数的旧矩形,不会出现图形冗余
- 自动取两个边界值的较大值作为矩形上沿、较小值作为下沿,避免2点开仓价低于4点时矩形上下颠倒
如果需要调整矩形显示时段,直接修改
is_9am/is_12pm的判断条件、以及时段更新逻辑里的hour >=9 and hour <12数值即可;如果要修改上下边界的取值时间,调整is_2am/is_4am的小时、分钟判断值就行。
内容的提问来源于stack exchange,提问作者crunch Rough
相关产品推荐
相关产品推荐

