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

如何从更高时间框架获取历史值?自定义指标跨周期画线异常排查

解决更高时间框架历史点的获取问题

问题出在**request.security返回的数据是对应当前更高时间框架bar的值,而外部的索引[1]是基于当前时间框架(5分钟)的bar**。在5分钟图中,同一个日线bar对应的所有5分钟bar里,dots的值都是当前日线的点,所以dots[1]只是前一根5分钟bar的dots值,和当前值完全相同,自然拿不到上一个日线的点。

要获取更高时间框架的历史点,必须在更高时间框架的环境内部处理历史数据,而不是在当前时间框架下用索引回溯。以下是具体实现方案:

方法:在日线环境内维护历史点

修改逻辑,在request.security调用的日线环境中,同时计算当前点和上一个符合条件的点,再把这两个值返回给5分钟框架使用。

代码示例

// 1. 重写/封装你的点计算逻辑,返回上一个点和当前点
getDailyDotsWithHistory() =>
    // 调用你原有的calcDots函数获取当前日线的点
    currentDot = calcDots(high)
    // 用var变量持久化存储上一个有效点(仅在日线框架内生效)
    var float prevValidDot = na
    // 当当前日线有有效点时,更新上一个点的值(这里的[1]是日线的前一根bar)
    if not na(currentDot)
        prevValidDot := nz(prevValidDot[1])
    // 返回上一个点和当前点的元组
    [prevValidDot, currentDot]

// 2. 通过request.security获取日线的历史点和当前点
[prevDailyDot, currentDailyDot] = request.security(
    syminfo.tickerid, 
    "D", 
    getDailyDotsWithHistory(), 
    gaps = barmerge.gaps_on, 
    lookahead = barmerge.lookahead_off  // 建议关闭lookahead避免未来数据问题
)

// 3. 在5分钟图上绘制日线趋势线(仅当两个点都有效时)
if not na(prevDailyDot) and not na(currentDailyDot)
    line.new(bar_index[0], prevDailyDot, bar_index[0], currentDailyDot, color=color.red, width=2)

关键说明

  • var变量在更高时间框架(日线)内会持续保留状态,每一根日线bar更新一次,这样就能正确记录上一个有效点。
  • 内部的prevValidDot[1]是基于日线框架的索引,所以能拿到上一根日线bar的历史值,这才是你真正需要的“上一个日线点”。
  • 关闭lookahead(设置为barmerge.lookahead_off)可以避免未来数据问题,确保指标的可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:10:41