使用request.security跨周期取数遇阻,求barmerge.gaps_off正确用法
Pine Script 指标开发问题
需求说明
我正在制作一款Pine Script指标,核心需求如下:
- 从1分钟K线获取数据并应用到5秒K线图中
- 当1分钟线上涨时,5秒图上的线条显示绿色;下跌时显示粉色
遇到的问题
尝试了两种实现方法,但都存在明显缺陷:
- 方法一(仅每分钟触发一次信号):使用
request.security搭配barmerge.gaps_off,意图在分钟K线未完成时也能获取数据,但信号仅每分钟触发一次,无法覆盖中间的5秒K线。 - 方法二(连续线条但严重滞后):通过回溯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分钟线的涨跌)
- 通过
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
相关产品推荐
相关产品推荐

