Pine Script指标问题:修正前日平均高点绘制与样式配置
修正印度股市双标的前日高点平均值Pine Script指标
问题诊断
现有代码存在两个核心问题:
- 水平线数值异常:
request.security调用中直接使用high[1],在非日线周期下,该值会随当前K线的时间滚动更新,导致盘中平均值不断变化,仅最后一根K线显示正确值。 - 缺少样式配置项:未提供显示开关、自定义颜色/线宽、价格标签等样式控制选项,不符合需求。
修正后的完整代码
//@version=5 indicator("Average: Previous Day Levels", overlay=true, shorttitle="Avg PDH") // 1. 标的选择输入 ce_symbol = input.symbol("NSE:NIFTY21SEP25500CE", title="选择CE合约标的") pe_symbol = input.symbol("NSE:NIFTY21SEP25500PE", title="选择PE合约标的") // 2. 样式配置输入 show_avg_pdh = input.bool(true, title="显示前日高点平均值线") line_color = input.color(color.new(color.blue, 0), title="线条颜色") line_width = input.int(2, title="线条宽度", minval=1, maxval=5) show_price_label = input.bool(true, title="显示价格标签") label_location = input.string("右上角", title="标签位置", options=["左上角", "右上角", "左下角", "右下角"]) // 定义印度股市交易时段(9:15-15:30) session_start = timestamp("Asia/Kolkata", year, month, dayofmonth, 9, 15) session_end = timestamp("Asia/Kolkata", year, month, dayofmonth, 15, 30) in_session = time >= session_start and time <= session_end // 锁定当日的前日高点平均值:每日开盘后仅计算一次,避免盘中波动 var float daily_avg_pdh = na if ta.change(time("D")) // 当日第一根K线时计算 // 获取前日高点(使用barmerge参数确保取数稳定) ce_pdh = request.security(ce_symbol, "D", high[1], barmerge.gaps_on, barmerge.lookahead_on) pe_pdh = request.security(pe_symbol, "D", high[1], barmerge.gaps_on, barmerge.lookahead_on) daily_avg_pdh = (ce_pdh + pe_pdh) / 2 // 绘制水平线 plot(show_avg_pdh and in_session ? daily_avg_pdh : na, color=line_color, linewidth=line_width, title="前日高点平均值", display=display.data_window) // 添加价格标签 if show_price_label and show_avg_pdh and in_session and barstate.islast var label avg_label = na label.delete(avg_label) // 根据选择的位置设置标签坐标与对齐方式 align_x = label_location == "右上角" or label_location == "右下角" ? textalign.right : textalign.left align_y = label_location == "右上角" or label_location == "左上角" ? textalign.top : textalign.bottom avg_label := label.new(x=bar_index, y=daily_avg_pdh, text=str.tostring(daily_avg_pdh, "%.2f"), color=line_color, textcolor=color.white, style=label.style_label_left, textalign=align_x, yloc=yloc.price)
关键修改说明
锁定每日平均值:
- 使用
var关键字定义变量,确保交易日内平均值保持固定 - 通过
ta.change(time("D"))触发每日一次的计算逻辑,避免盘中重复更新 - 给
request.security添加barmerge.gaps_on和barmerge.lookahead_on参数,保证跨周期取数的稳定性
- 使用
新增样式配置项:
- 添加开关类输入控制线条和价格标签的显示状态
- 提供颜色、线宽的自定义选项
- 支持选择价格标签的显示位置
优化时段判断:
- 保留印度时区的交易时段判断逻辑,确保仅在9:15-15:30内显示水平线
内容的提问来源于stack exchange,提问作者Victor Griffiths
相关产品推荐
相关产品推荐

