如何在1分钟K线图中获取上一根15分钟K线收盘后的累计成交量?
1分钟K线图中获取已收盘15分钟K线累计成交量的实现方案
方案1:修正request.security的调用逻辑
你用request.security获取15分钟成交量的思路可行,但默认调用逻辑导致无法实时更新当前运行中的15分钟K线数据,具体细节:
request.security默认采用非前瞻模式,仅在15分钟K线完全收盘后才会更新数据,所以1分钟K线推进过程中,volume15min会保持当前15分钟周期开盘时的初始值,直到该15分钟K线收盘才刷新。volume15min[1]确实能返回上一根已收盘的15分钟K线成交量,因为[1]指向的是前一个完整的15分钟周期数据,不受当前未收盘周期影响。
如果需要实时获取当前运行中15分钟K线的成交量,需修改request.security的合并参数,开启前瞻合并:
// 获取当前运行中15分钟K线的实时成交量 current_15min_volume = request.security(syminfo.tickerid, "15", volume, barmerge.gaps_on, barmerge.lookahead_on) // 获取上一根已收盘15分钟K线的成交量 last_closed_15min_volume = request.security(syminfo.tickerid, "15", volume[1])
这里volume[1]在15分钟周期里代表前一根已收盘K线的成交量,结合request.security调用后,能在1分钟图里稳定获取目标数据。
方案2:基于1分钟K线手动计算15分钟成交量
核心步骤
- 获取时间戳:Pine Script中
time代表当前K线的开盘时间(毫秒级),timenow代表实时系统时间,按需选择即可。 - 计算15分钟周期节点:通过取模运算将当前时间向下取整到最近的15分钟起始点,公式为:
current_15min_start = time - (time % (15 * 60 * 1000)) - 定位上一个完整周期:上一根已收盘15分钟周期的起始时间为
last_15min_start = current_15min_start - 15 * 60 * 1000,结束时间即为当前15分钟周期的起始点。 - 求和周期内成交量:用
sum()函数结合时间条件,筛选出对应周期内的1分钟K线并求和成交量。
完整代码示例
//@version=5 indicator("1分钟图计算15分钟成交量", overlay=false) // 计算上一根已收盘15分钟周期的起始与结束时间 current_15min_start = time - (time % (15 * 60 * 1000)) last_15min_start = current_15min_start - 15 * 60 * 1000 last_15min_end = current_15min_start // 筛选周期内K线并求和成交量 last_closed_15min_volume = sum(volume, barssince(time >= last_15min_start and time < last_15min_end)) // 可视化输出 plot(last_closed_15min_volume, title="上一根15分钟成交量", color=color.blue)
这段代码会在每根1分钟K线更新时,重新计算上一个完整15分钟周期的成交量总和,完全依赖本地1分钟数据,无需跨周期调用。
内容的提问来源于stack exchange,提问作者Singh
相关产品推荐
相关产品推荐

