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

如何在PineScript中按45分钟周期绘制连续分段箱体?

解决PineScript绘制连续45分钟箱体的问题

核心思路

原代码依赖固定锚点仅生成单个箱体,要实现连续分段,需自动计算每个45分钟区间的起止时间,实时跟踪区间内高低点,并在区间结束时绘制箱体,同时兼容历史K线回测。

方案一:自然对齐45分钟区间

该方案自动将时间对齐到最近的45分钟节点(如00:00、00:45、01:30等),生成连续箱体:

indicator("连续45分钟箱体", overlay=true)

// 定义45分钟区间时长(毫秒)
intervalLength = 45 * 60 * 1000

// 计算当前K线所属区间的起始时间
currentIntervalStart = timestamp(year, month, dayofmonth, hour, minute - minute % 45, 0)

// 跟踪当前区间的最高/最低价(用var变量保持跨K线状态)
var float currentHigh = na
var float currentLow = na

// 进入新区间时重置高低点,否则更新极值
if currentIntervalStart != currentIntervalStart[1]
    currentHigh := high
    currentLow := low
else
    currentHigh := math.max(currentHigh, high)
    currentLow := math.min(currentLow, low)

// 判断当前K线是否为区间最后一根
intervalEndBar = bar_index == ta.barssince(currentIntervalStart != currentIntervalStart[1]) + 1

// 区间结束时绘制箱体
if intervalEndBar
    intervalStartBar = bar_index - ta.barssince(currentIntervalStart != currentIntervalStart[1]) - 1
    box.new(intervalStartBar, currentHigh, bar_index, currentLow, border_color=color.red, bgcolor=color.new(color.silver, 60))

// 可选:标记区间起始时间
var label intervalStartLabel = na
if currentIntervalStart != currentIntervalStart[1]
    intervalStartLabel := label.new(bar_index, high, str.tostring(currentIntervalStart, "HH:mm"), color=color.blue, textcolor=color.white, style=label.style_label_down)

方案二:指定锚点起始的连续区间

若需要从自定义锚点时间开始生成连续45分钟区间(非自然时间对齐),可使用以下代码:

indicator("锚点起始连续45分钟箱体", overlay=true)

// 输入自定义锚点起始时间
anchorTime = input.time(timestamp("23 Aug 2023 13:30"), "锚点起始时间")
intervalLength = 45 * 60 * 1000

// 计算当前K线所属的区间起始时间
currentIntervalStart = anchorTime + math.floor((time - anchorTime) / intervalLength) * intervalLength

// 跟踪当前区间高低点
var float currentHigh = na
var float currentLow = na

if currentIntervalStart != currentIntervalStart[1]
    currentHigh := high
    currentLow := low
else
    currentHigh := math.max(currentHigh, high)
    currentLow := math.min(currentLow, low)

// 新区间开始时,绘制上一个区间的箱体
if currentIntervalStart != currentIntervalStart[1] and not na(currentIntervalStart[1])
    prevIntervalEndBar = bar_index - 1
    prevIntervalStartBar = ta.valuewhen(currentIntervalStart[1] != currentIntervalStart[2], bar_index, 0)
    box.new(prevIntervalStartBar, currentHigh[1], prevIntervalEndBar, currentLow[1], border_color=color.red, bgcolor=color.new(color.silver, 60))

关键代码解释

  • 区间时间计算:通过取整或锚点偏移的方式,自动确定每个K线所属的45分钟区间起始点,无需手动设置多个锚点。
  • 高低点跟踪:var类型变量会保持跨K线的状态,确保每个区间内的高低点被正确记录更新。
  • 箱体绘制时机:在区间切换时触发绘制逻辑,确保每个区间的箱体都能完整覆盖对应的K线范围。

内容的提问来源于stack exchange,提问作者mohaddese abbasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:27:41