请求编写Pine Script实现小时成交量均值静态直方图
Pine Script 实现静态小时成交量均值直方图
以下代码可生成固定显示24根的静态直方图,计算过去5000根K线中对应00:00至23:00每个小时的成交量平均值:
//@version=5 indicator("静态小时成交量均值直方图", overlay=false, shorttitle="Hourly Vol Avg", precision=0) // 初始化存储每个小时的成交量总和、K线计数的数组 var float[] hourlyVolSum = array.new_float(24, 0.0) var int[] hourlyBarCount = array.new_int(24, 0) var bool isCalculated = false // 在最后一根K线时,回溯统计过去5000根数据 if barstate.islast and not isCalculated // 限制回溯最多5000根,避免超出历史数据范围 maxBarsToLookBack = math.min(bar_index, 4999) for i = 0 to maxBarsToLookBack currentHour = hour(time[i]) currentVol = volume[i] // 更新对应小时的统计数据 array.set(hourlyVolSum, currentHour, array.get(hourlyVolSum, currentHour) + currentVol) array.set(hourlyBarCount, currentHour, array.get(hourlyBarCount, currentHour) + 1) isCalculated := true // 计算每个小时的成交量均值 var float[] hourlyVolAvg = array.new_float(24) if barstate.islast for i = 0 to 23 barCount = array.get(hourlyBarCount, i) array.set(hourlyVolAvg, i, barCount > 0 ? array.get(hourlyVolSum, i) / barCount : na) // 创建静态表格绘制直方图 var table histTable = table.new(position.bottom, 24, 1, border_width=1, width=100, height=100) if barstate.islast // 获取均值最大值用于归一化柱子高度 maxAvgVol = array.max(hourlyVolAvg) // 遍历24小时绘制柱子 for hourIdx = 0 to 23 avgVol = array.get(hourlyVolAvg, hourIdx) // 计算柱子高度比例(避免除以0) heightRatio = na(avgVol) or maxAvgVol == 0 ? 0 : avgVol / maxAvgVol // 设置单元格样式:背景透明度对应柱子高度,文本显示小时 table.cell(histTable, hourIdx, 0, text=str.tostring(hourIdx) + ":00", bgcolor=color.new(color.blue, 100 - int(heightRatio * 90)), text_color=color.white, align=align.center, valign=align.bottom)
代码说明
- 数据统计逻辑:仅在最后一根K线时回溯最多5000根历史数据,按小时(0-23)分组统计成交量总和与K线数量,计算均值
- 静态显示实现:通过
table组件固定在图表底部,绘制24个小时的柱子,柱子高度由该小时均值占所有小时均值最大值的比例决定 - 边界处理:对无数据的小时(均值为
na)显示空柱子,同时限制回溯数量避免超出历史数据范围
内容的提问来源于stack exchange,提问作者mattia mosolo
相关产品推荐
相关产品推荐

