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

使用request.security跨周期取数遇阻,求barmerge.gaps_off正确用法

Pine Script 指标开发问题

需求说明

我正在制作一款Pine Script指标,核心需求如下:

  • 从1分钟K线获取数据并应用到5秒K线图中
  • 当1分钟线上涨时,5秒图上的线条显示绿色;下跌时显示粉色

遇到的问题

尝试了两种实现方法,但都存在明显缺陷:

  1. 方法一(仅每分钟触发一次信号):使用request.security搭配barmerge.gaps_off,意图在分钟K线未完成时也能获取数据,但信号仅每分钟触发一次,无法覆盖中间的5秒K线。
  2. 方法二(连续线条但严重滞后):通过回溯12根5秒K线(对应1分钟)判断涨跌,虽能得到连续线条,但存在严重滞后,导致大量错误信号。

确认是request.security/barmerge.gaps的用法有误,作为新手无法自行排查,恳请协助解决。

相关代码

代码1(仅每分钟触发一次信号)

FinalYellow_5s = request.security(syminfo.tickerid, '5S', FinalYellow, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on) 

FinalYellow_1m = request.security(syminfo.tickerid, '1', FinalYellow, gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on) 

/// --- 线条变为绿色
Yellow_1m_Increasing = FinalYellow_1m > FinalYellow_1m[1]
Change_Yellow_Green = Yellow_1m_increasing

/// --- 线条变为粉色
Yellow_1m_Decreasing = FinalYellow_1m < FinalYellow_1m[1]
Change_Yellow_Pink = Yellow_1m_decreasing

代码2(连续线条但严重滞后)

FinalBlue_5s = request.security(syminfo.tickerid, '5S', FinalBlue)
FinalYellow_5s = request.security(syminfo.tickerid, '5S', FinalYellow)

FinalBlue_1m = request.security(syminfo.tickerid, '1', FinalBlue)
FinalYellow_1m = request.security(syminfo.tickerid, '1', FinalYellow)

/// --- 线条变为绿色
Yellow_1m_Increasing = FinalYellow_1m > FinalYellow_1m[12] // 12根5秒K线 = 1根1分钟K线

Change_Yellow_Green = Yellow_1m_increasing

/// --- 线条变为粉色
Yellow_1m_Decreasing = FinalYellow_1m < FinalYellow_1m[12]

Change_Yellow_Pink = Yellow_1m_decreasing

解决方案

问题核心是你没有正确处理不同时间框架下的信号同步,以下是修正后的实现:

核心思路

要让1分钟级别的涨跌信号持续覆盖当前分钟内的所有5秒K线,需要:

  1. 在1分钟时间框架内计算涨跌状态(当前1分钟线相对于前一根1分钟线的涨跌)
  2. 通过request.security将该状态同步到所有对应的5秒K线,确保当前分钟内的每一根5秒K线都能获取到同一信号

修正代码

//@version=5
indicator("1分钟趋势映射5秒图", overlay=true)

// 假设FinalYellow是你原指标中计算的目标值,若实际已有定义可直接替换
FinalYellow = close

// 封装1分钟趋势计算逻辑
get_1min_trend() =>
    prev_1min_val = request.security(syminfo.tickerid, "1", FinalYellow[1])
    current_1min_val = request.security(syminfo.tickerid, "1", FinalYellow)
    // 返回趋势:1=上涨,-1=下跌,0=持平
    current_1min_val > prev_1min_val ? 1 : current_1min_val < prev_1min_val ? -1 : 0

// 获取当前5秒K线对应的1分钟趋势
current_trend = get_1min_trend()

// 绘制线条并根据趋势设置颜色
plot(FinalYellow, color=current_trend == 1 ? color.green : current_trend == -1 ? color.pink : color.gray, linewidth=2)

关键说明

  • 用函数封装1分钟趋势计算:确保每次调用都能精准获取当前分钟的涨跌状态
  • 避免直接在5秒框架中引用FinalYellow_1m[1]:该写法只会在每12根5秒K线后更新一次信号,导致中间K线无信号
  • 无需手动回溯K线:request.security会自动完成时间框架映射,将1分钟信号同步到对应所有5秒K线中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:25:17