如何在PineScript中获取ES迷你合约前一日美股常规时段收盘价?
解决ES期货合约常规时段收盘价不符的缺口计算问题
你的代码在常规股票市场能正常运行,但ES期货上获取的常规时段收盘价不符合预期,核心原因是Pine Script默认的session.regular对期货合约的常规时段识别和美股股票不同——ES是24小时交易品种,默认的常规时段设置没精准匹配美股期货的9:30-16:00(美东时间)交易时段。
修正方案是自定义精准的常规交易时段,同时确保数据请求时不自动合并缺口,代码如下:
//@version=5 indicator("ES 常规时段缺口计算", overlay=true) // 定义美股期货常规交易时段(美东时间9:30-16:00) regular_session = session.new("0930-1600", "America/New_York") // 创建指定时段的合约ticker t = ticker.new(syminfo.prefix, syminfo.tickerid, session=regular_session) // 请求常规时段日线数据,开启缺口保留避免数据合并 prev_day_close = request.security(t, "D", close[1], gaps=barmerge.gaps_on) current_day_open = request.security(t, "D", open, gaps=barmerge.gaps_on) gap_value = current_day_open - prev_day_close // 可选:在K线上标注缺口数值 label.new(bar_index, high, str.tostring(gap_value, "%.2f"), color=gap_value > 0 ? color.new(color.green, 0) : color.new(color.red, 0), textcolor=color.white)
关键修正点:
- 用
session.new明确指定美东时间的9:30-16:00时段,完全匹配ES期货的常规交易时间,替代模糊的session.regular request.security添加gaps=barmerge.gaps_on参数,防止平台自动合并缺口时段的数据,保证收盘价和开盘价的准确性- 变量名更直观,方便后续维护
内容的提问来源于stack exchange,提问作者Muhammad Umair
相关产品推荐
相关产品推荐

