如何通过security_lower_tf获取前3日1小时成交量数据而非当日数据
解决日线框架下获取过去三日1小时成交量异动数据的问题
你当前用request.security_lower_tf只能拿到当前日线bar对应的小时数据,因为这个函数是把低时间框架的序列嵌入到当前主图的单个bar里,没法获取历史日线bar对应的小时数据。要实现获取过去三日的1小时成交量异动(和日线逻辑一致),得换个思路:先在1小时图层面计算好每日的成交量异动指标,再把这些每日聚合后的数据拉到日线图里。
以下是修改后的代码,完全匹配你的日线量能异动逻辑,同时能获取过去三日的1小时级别数据:
//@version=5 indicator("Hourly Vol Buzz (Past 3 Days)", overlay=false) // 1小时时间框架内计算每日成交量异动(和日线逻辑对齐) f_calculate_hourly_vol_buzz() => // 计算1小时图上的50周期成交量均线 avg_vol_hour = ta.sma(volume, 50) // 汇总当日所有小时的成交量总和 daily_total_vol = ta.summation(volume, ta.barssince(timeframe.change("D")) + 1) // 计算过去50个交易日的每日总成交量均线 avg_daily_hour_vol = ta.sma(daily_total_vol, 50) // 计算相对异动值,和日线公式一致:(当日量/50日平均量)*100 - 100 rel_vol_hour = daily_total_vol / avg_daily_hour_vol * 100 - 100 // 只在每日最后一根小时K线输出结果,避免重复数据 rel_vol_hour := timeframe.change("D") ? na : rel_vol_hour rel_vol_hour // 从1小时图拉取每日的成交量异动数据 hourly_vol_buzz = request.security(syminfo.tickerid, "60", f_calculate_hourly_vol_buzz()) // 用数组保存最近3日的1小时异动数据 var array<float> hourly_vol_buzz_array = array.new_float() if barstate.isnew array.push(hourly_vol_buzz_array, hourly_vol_buzz) // 只保留最近3条数据,避免数组过大 if array.size(hourly_vol_buzz_array) > 3 array.shift(hourly_vol_buzz_array) // 提取过去三日的具体数据 past_1d_hour_buzz = array.size(hourly_vol_buzz_array) >= 1 ? array.get(hourly_vol_buzz_array, array.size(hourly_vol_buzz_array)-1) : na past_2d_hour_buzz = array.size(hourly_vol_buzz_array) >= 2 ? array.get(hourly_vol_buzz_array, array.size(hourly_vol_buzz_array)-2) : na past_3d_hour_buzz = array.size(hourly_vol_buzz_array) >= 3 ? array.get(hourly_vol_buzz_array, array.size(hourly_vol_buzz_array)-3) : na // 原日线量能异动代码保留 avgvol = ta.sma(volume, 50) curvol = volume relvol = curvol / avgvol * 100 - 100 // 可视化输出 plot(relvol, title="日线量能异动", color=color.blue, linewidth=2) plot(past_1d_hour_buzz, title="昨日1小时量能异动", color=color.red, linewidth=2) plot(past_2d_hour_buzz, title="前日1小时量能异动", color=color.orange, linewidth=2) plot(past_3d_hour_buzz, title="大前日1小时量能异动", color=color.green, linewidth=2)
关键逻辑说明
- 低时间框架聚合:在1小时图里先计算每日的总成交量,再按照日线的异动公式算出每日的1小时级别异动值,确保逻辑完全对齐。
- 跨时间框架拉取:用
request.security把1小时图里的每日异动值拉到日线图,这样日线图的每个bar就对应前一日的1小时异动数据。 - 数组保存历史数据:通过数组存储最近3日的异动值,方便直接调用过去三日的结果。
内容的提问来源于stack exchange,提问作者AWP
相关产品推荐
相关产品推荐

