You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:12:05