TradingView:在低时间周期图表绘制高周期趋势线及筛选有效连线
在TradingView低周期图表绘制高周期趋势线并过滤无效连线
一、实现跨周期趋势线绘制
完全可以在低时间周期图表(如日线)中绘制高时间周期(如周线)的趋势线,核心是通过Pine Script的request.security()函数获取高周期K线数据,再在低周期图表上定位对应bar的位置并绘制连线。
以连接Week[2](上上周)和Week[1](上周)的周线高点为例,代码逻辑如下:
- 获取周线级别的高点数据与周线起始时间戳,用于定位低周期图表中的周线切换点;
- 当低周期K线进入新一周时,更新并存储上上周、上周的周线高点及其在日线图中的对应bar索引;
- 使用
line.new()绘制两点间的连线。
示例代码片段:
//@version=5 indicator("周线级趋势线(日线图显示)", overlay=true) // 获取周线数据:高点、周线起始时间戳 weeklyHigh = request.security(syminfo.tickerid, "W", high) weeklyTime = request.security(syminfo.tickerid, "W", time) // 标记周线切换点 isNewWeek = weeklyTime != weeklyTime[1] // 存储上周和上上周的高点及对应bar位置 var float week1High = na var int week1Bar = na var float week2High = na var int week2Bar = na if isNewWeek // 切换到新一周时,将上周数据移至“上上周”,当前周数据存为“上周” week2High := week1High week2Bar := week1Bar week1High := weeklyHigh[1] // 新一周第一根bar对应的weeklyHigh是当前周,取[1]得到上周高点 week1Bar := bar_index[1] // 当上周和上上周数据均有效时绘制连线 if not na(week2High) and not na(week1Bar) line.new(week2Bar, week2High, week1Bar, week1High, color=color.blue, width=2)
二、过滤无效连线
要过滤错误连线,需要先定义有效高点的判定规则,比如:
- 该周高点是N周内的相对高点(如比前后1周的高点都高);
- 两个高点构成的趋势线符合特定逻辑(如上升趋势要求Week[1]高点>Week[2]高点);
- 排除连续周高点无明显趋势意义的情况。
以下是添加过滤条件的优化代码,以“仅保留上升趋势的周线有效阶段性高点连线”为例:
//@version=5 indicator("过滤后的周线级趋势线", overlay=true) // 获取周线数据:当前周、前一周、后一周的高点,以及周线时间戳 weeklyHigh = request.security(syminfo.tickerid, "W", high) weeklyHighPrev = request.security(syminfo.tickerid, "W", high[1]) weeklyHighNext = request.security(syminfo.tickerid, "W", high[-1]) weeklyTime = request.security(syminfo.tickerid, "W", time) isNewWeek = weeklyTime != weeklyTime[1] // 定义周线有效高点:当前周高点比前一周和后一周都高(阶段性高点) isValidWeekHigh(highVal, prevHigh, nextHigh) => highVal > prevHigh and highVal > nextHigh // 存储周高点、对应bar位置及有效性标记 var float week1High = na var int week1Bar = na var bool week1IsValid = na var float week2High = na var int week2Bar = na var bool week2IsValid = na if isNewWeek // 更新上上周数据 week2High := week1High week2Bar := week1Bar week2IsValid := week1IsValid // 记录上周的高点及有效性 week1High := weeklyHigh[1] week1Bar := bar_index[1] week1IsValid := isValidWeekHigh(weeklyHigh[1], weeklyHigh[2], weeklyHigh[0]) // 仅当两个高点均为有效阶段性高点,且为上升趋势时绘制连线 if not na(week2High) and not na(week1High) and week2IsValid and week1IsValid and week1High > week2High line.new(week2Bar, week2High, week1Bar, week1High, color=color.blue, width=2)
自定义调整说明
- 可修改
isValidWeekHigh函数的判定逻辑,比如改为“高点高于前两周”,或结合成交量等指标强化有效性; - 若需保留下降趋势线,将
week1High > week2High改为week1High < week2High即可,也可同时保留两种趋势的判定; - 若要避免重复绘制连线,可添加
var关键字管理line对象,在新有效连线生成时删除旧的无效连线。
内容的提问来源于stack exchange,提问作者James Yang
相关产品推荐
相关产品推荐

