TradingView PineScript:昨日高点线起始位置异常及代码优化请求
TradingView PineScript:昨日高点线起始位置异常及代码优化请求
嗨,我来帮你搞定这个昨日高点线的问题,顺便给代码做个简化优化~
首先先明确你的核心问题和需求:
问题:当前代码画出的黄色高点线,是从前一根K线的索引开始的,而不是从昨日高点对应的K线位置,或者昨日开盘的起始位置。
需求:
- 让高点线从昨日高点的K线位置,或者昨日交易日的起始位置开始绘制
- 当今日收盘价突破这条线时,线在突破点终止
- 清理代码里的冗余部分,简化逻辑
修正并优化后的代码
//@version=5 indicator(title='HL', shorttitle='HL', overlay=true) // 输入参数 i_htf = 'D' i_show_last = 1 i_ln_h_offset = 20 i_hide_crossed = true // 获取昨日日线级别的高点,以及昨日日线最后一根K线在当前图表的索引 [high_htf, prev_day_last_bar_idx] = request.security(symbol=syminfo.tickerid, timeframe=i_htf, expression=[high[1], bar_index], lookahead=barmerge.lookahead_on) // 判断是否突破价格水平的函数 break_line(price) => (close[1] < price and close >= price) or (close[1] > price and close <= price) // 初始化线条数组 var line[] high_lines = array.new_line() // 当日线切换时(新交易日开始),创建新的昨日高点线 if ta.change(time('D')) // 删除超出显示数量的旧线条 if array.size(high_lines) >= i_show_last line.delete(array.shift(high_lines)) // 创建新线:起点是昨日日线最后一根K线的索引,终点往后偏移指定数量 new_line = line.new(x1=prev_day_last_bar_idx, y1=high_htf, x2=bar_index + i_ln_h_offset, y2=high_htf, color=#ffff00) array.push(high_lines, new_line) // 更新每条线的终点,并处理突破逻辑 for current_line in high_lines line_price = line.get_y1(current_line) // 如果还没突破,持续更新线的终点到当前K线+偏移量 if not break_line(line_price) line.set_x2(current_line, bar_index + i_ln_h_offset) else // 突破后,将线的终点设为突破的K线索引 line.set_x2(current_line, bar_index) // 如果开启隐藏突破后的线,直接删除 if i_hide_crossed line.delete(current_line) array.remove(high_lines, array.indexof(high_lines, current_line))
关键优化点说明
修正线的起始位置
之前用last_index = bar_index是取的当前图表前一根确认K线的索引,现在通过request.security直接获取昨日日线最后一根K线在当前图表的索引(prev_day_last_bar_idx),这样线的起点就准确对应到昨日的结束位置,也就是你需要的“昨日高点/昨日起始”附近的位置。简化线条管理逻辑
原来的keep_lines和all_lines两个数组合并成一个high_lines,减少了数组之间的冗余操作,逻辑更清晰:只在日线切换时创建新线,超出显示数量就删除旧线。优化突破处理逻辑
把突破判断和线条更新合并到一个循环里,避免重复遍历数组。突破后直接调整线的终点,开启i_hide_crossed时直接删除线条,减少不必要的判断。清理冗余代码
移除了不必要的var变量(比如last_high、last_index),简化了线条创建的触发时机(从barstate.isconfirmed改为ta.change(time('D')),只在新交易日开始时创建新线,避免重复创建)。
这样调整后,黄色高点线就会从昨日的最后一根K线位置开始绘制,突破时也会准确在突破点终止,代码也更简洁易维护啦~
备注:内容来源于stack exchange,提问作者Arun_K_Bhaskar
相关产品推荐
相关产品推荐

