如何在PineScript中绘制每日(含当前交易时段)日内高低点出现顺序?
PineScript 实现日内高低点出现顺序标记
以下是实现需求的完整代码,会在每个交易日(包含当前未结束时段)的特定位置绘制标记,区分日内高点是否先于低点出现:
//@version=5 indicator("日内高低点顺序标记", overlay=true) // 初始化变量,用var保留跨bar状态 var float dayHigh = na var float dayLow = na var int highBarIndex = na var int lowBarIndex = na // 检测交易日切换,重置当日变量 isNewDay = ta.change(time("D")) if isNewDay dayHigh = high dayLow = low highBarIndex = bar_index lowBarIndex = bar_index else // 更新当日高点及出现位置 if high > dayHigh dayHigh := high highBarIndex := bar_index // 更新当日低点及出现位置 if low < dayLow dayLow := low lowBarIndex := bar_index // 判断高低点出现顺序 highBeforeLow = highBarIndex < lowBarIndex lowBeforeHigh = lowBarIndex < highBarIndex // 绘制标记:在当日开盘价附近显示 var label[] labels = array.new_label() // 清理旧标记(可选,避免过多标记) if isNewDay array.clear(labels) // 只在当前交易日的第一个bar或更新顺序时绘制/更新标记 currentDayOpen = ta.valuewhen(isNewDay, open, 0) if barstate.islast or isNewDay // 移除旧标记 if array.size(labels) > 0 label.delete(array.get(labels, 0)) // 根据顺序添加新标记 if highBeforeLow newLabel = label.new(bar_index, currentDayOpen, "高→低", color=color.green, textcolor=color.white, style=label.style_label_up) array.push(labels, newLabel) else if lowBeforeHigh newLabel = label.new(bar_index, currentDayOpen, "低→高", color=color.red, textcolor=color.white, style=label.style_label_down) array.push(labels, newLabel)
关键逻辑说明
- 交易日切换检测:通过
ta.change(time("D"))识别新交易日,此时重置当日的高低点及对应bar索引 - 高低点跟踪:实时更新当日的最高/最低价,并记录它们首次出现的bar索引
- 顺序判断:比较高低点的bar索引,索引更小的代表出现时间更早
- 标记绘制:在当日开盘价位置绘制文字标记,绿色代表"高→低"(高点先出现),红色代表"低→高"(低点先出现),且仅保留当前交易日的标记
内容的提问来源于stack exchange,提问作者user2628114
相关产品推荐
相关产品推荐

