如何在Pine Script中固定5分钟周期绘制第二根K线高低水平线?
解决Pine Script跨周期绘制当日第二根5分钟K线高低水平线问题
要实现固定基于5分钟周期计算当日第二根K线的高低并绘制水平线,核心是使用request.security()跨周期获取5分钟数据,而非依赖当前图表周期的bar。以下是修正后的完整代码:
//@version=5 indicator("当日第二根5分钟K线高低", shorttitle="5M-2nd-Bar", overlay=true) // 跨周期获取5分钟K线的关键数据 [is_5m_last, is_5m_session_first, low_5m, high_5m, bar_idx_5m] = request.security(syminfo.tickerid, "5", [barstate.islast, session.isfirstbar, low, high, bar_index]) // 变量初始化:保存当日第二根5分钟K线的高低,当日内保持不变 var float day_2nd_5m_low = na var float day_2nd_5m_high = na var int 5m_bar_count = 0 // 在5分钟周期的上下文里统计当日bar数量,并记录第二根的高低 if is_5m_session_first 5m_bar_count := 1 day_2nd_5m_low := na day_2nd_5m_high := na elif is_5m_last 5m_bar_count += 1 // 当计数到第二根5分钟K线时,记录高低 if 5m_bar_count == 2 day_2nd_5m_low := low_5m day_2nd_5m_high := high_5m // 绘制水平线(仅当第二根5分钟K线数据已确定时) if not na(day_2nd_5m_low) line.new(bar_index - 1, day_2nd_5m_low, bar_index, day_2nd_5m_low, style=line.style_solid, extend=extend.both, color=color.new(#8f9197, 0), width=1) label.new(bar_index, day_2nd_5m_low, text=str.tostring(day_2nd_5m_low, "0.00"), color=color.new(#F5F5EC, 0), style=label.style_label_upper_right) if not na(day_2nd_5m_high) line.new(bar_index - 1, day_2nd_5m_high, bar_index, day_2nd_5m_high, style=line.style_solid, extend=extend.both, color=color.new(#8f9197, 0), width=1) label.new(bar_index, day_2nd_5m_high, text=str.tostring(day_2nd_5m_high, "0.00"), color=color.new(#F5F5EC, 0), style=label.style_label_lower_right)
关键逻辑说明
- 跨周期数据获取:
request.security()函数指定"5"周期,获取该周期下的bar状态和价格数据,确保计算完全基于5分钟K线,不受当前图表周期影响。 - 当日第二根K线识别:在5分钟周期的上下文里,从当日第一根bar开始计数,当计数到第2根时,锁定其高低点,用
var变量保存,确保当日内数据不会被重置。 - 动态绘制:仅当第二根5分钟K线的高低数据已确定(非na)时,才绘制水平线和标签,避免显示无效数据。
原代码问题分析
原代码使用当前图表周期的bar_index来计数当日第二根bar,切换周期后,barnum + 1对应的是当前周期的第二根bar,而非5分钟周期的,因此高低点会随图表周期变化,无法达到需求。
内容的提问来源于stack exchange,提问作者Sandeep Bhamra
相关产品推荐
相关产品推荐

