为何request.security未正常请求标的?Var_2值随图表标的变动问题咨询
问题解答
问题1 & 问题2的核心原因
你的代码中ta.highest()和ta.lowest()函数是在当前图表标的的K线上下文中执行的,而非在request.security()获取的纳斯达克100(NDX)数据的独立上下文里计算。这直接导致两个问题:
request.security()确实获取到了NDX的高低价,但后续的极值计算依赖当前图表标的的K线序列,而非NDX的完整数据,看起来像是没按预期请求指定标的。- 切换图表标的时,当前标的的K线数量、时间范围会变化,
ta.highest()和ta.lowest()的计算结果随之改变,最终导致Var_2数值变动,违背了用request.security()隔离外部标的数据的初衷。
修复方案:将计算逻辑移入request.security回调
把所有NDX相关的计算封装到request.security()的回调函数中,让所有运算都在NDX的K线环境内完成:
//@version=6 indicator("Decline from last higher high of the Nasdaq100", overlay=false) // 定义计算逻辑函数 calculate_ndx_decline() => highest_high = ta.highest(high, 252) lowest_low = ta.lowest(low, 15) -100 * ((highest_high - lowest_low) / highest_high) // 在NDX的上下文内执行计算并返回结果 Var_2 = request.security("NASDAQ:NDX", timeframe.period, calculate_ndx_decline(), gaps=barmerge.gaps_on) plot(Var_2, style=plot.style_line)
关键说明
request.security()的第三个参数为回调函数,会在目标标的(NDX)的K线环境中执行代码,确保所有计算基于NDX的独立数据序列。- 添加
gaps=barmerge.gaps_on参数,确保数据合并时保留缺口,避免因数据对齐导致的异常波动。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

