如何在TradingView Pine Script中获取周高低点的精确日期
在TradingView Pine Script中获取周线高低点的精确日期
要在周线图表上获取对应高低点的精确日期,核心思路是通过request.security()请求日线级别数据,从当周的日线K线中定位出周线高低点出现的具体时间。以下是可直接运行的实现代码及关键说明:
完整代码实现
//@version=5 indicator("周线高低点精确日期", overlay=true) // 请求日线级别高点、低点及对应时间数据 [dailyHighs, dailyLows, dailyTimes] = request.security( syminfo.tickerid, "D", [high, low, time], gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off ) // 处理周线高点对应的日期 weeklyHigh = ta.highest(high, 1) var float targetWeeklyHigh = na var int highOccurTime = na // 每周初更新目标高点并查找对应日期 if ta.change(time("W")) targetWeeklyHigh = weeklyHigh // 遍历当周日线数据,匹配周线高点 for i = 0 to bar_index - 1 if dailyHighs[i] == targetWeeklyHigh highOccurTime := dailyTimes[i] break // 处理周线低点对应的日期 weeklyLow = ta.lowest(low, 1) var float targetWeeklyLow = na var int lowOccurTime = na if ta.change(time("W")) targetWeeklyLow = weeklyLow // 遍历当周日线数据,匹配周线低点 for i = 0 to bar_index - 1 if dailyLows[i] == targetWeeklyLow lowOccurTime := dailyTimes[i] break // 在图表上标注高低点日期 var label highDateLabel = na var label lowDateLabel = na if ta.change(time("W")) // 格式化时间为yyyy-MM-dd格式 highDateStr = str.tostring(highOccurTime, "yyyy-MM-dd") highDateLabel := label.new(bar_index, weeklyHigh, "高点日期: " + highDateStr, color=color.new(color.green, 0), textcolor=color.white, style=label.style_label_down) lowDateStr = str.tostring(lowOccurTime, "yyyy-MM-dd") lowDateLabel := label.new(bar_index, weeklyLow, "低点日期: " + lowDateStr, color=color.new(color.red, 0), textcolor=color.white, style=label.style_label_up)
关键逻辑说明
- 日线数据请求:通过
request.security()获取同一标的的日线high、low和time,lookahead=barmerge.lookahead_off确保无未来函数,保证信号准确性。 - 周线切换判断:用
ta.change(time("W"))识别每周的第一根K线,此时更新当周的高低点目标值,并开始遍历日线数据。 - 高低点匹配:遍历当周的日线数据数组,找到与周线高低点数值完全匹配的K线,记录其
time(时间戳)。 - 日期格式化:用
str.tostring()将时间戳转为yyyy-MM-dd的可读格式,通过label.new标注在对应高低点位置。
注意事项
- 如果当周有多根日线K线的高点/低点与周线高低点数值相同,代码会取第一个出现的日期;若需取最后一个,可将遍历顺序改为从
bar_index - 1到0。 - 若标的存在跳空缺口,
gaps=barmerge.gaps_on会保留这些缺口数据,避免遗漏可能的高低点。
内容的提问来源于stack exchange,提问作者Napoleon Wong
相关产品推荐
相关产品推荐

