TradingView中request.security()疑似Bug:同周期数据结果不一致?
问题:通过request.security获取的SPY高低价与本地直接绘制的高低价不一致
背景
首次发布脚本时收到违反服务条款(TOS)通知,脚本已无法访问。初始脚本尝试对比本地ATR与通过request.security获取的SPY ATR,发现结果不同;后续简化测试直接绘制高低价,发现本地高低价(蓝色线条)与通过request.security获取的SPY高低价(紫色线条)仍存在明显差异,明明预期应为相同数据,对此产生疑问。
初始测试脚本(ATR对比)
//@version=5 indicator("Why Different") factor = 3 atrPeriod = 10 // 本地计算的ATR atr = ta.rma(ta.tr,atrPeriod) plot(atr, "ATR", color = color.green, style=plot.style_linebr) // 通过request.security获取SPY的TR后计算的ATR [s_tr] = request.security(symbol = "SPY", timeframe = timeframe.period, expression = [ta.tr]) s_atr = ta.rma(s_tr, atrPeriod) plot(s_atr, "ATR", color = color.purple, style=plot.style_line)
简化测试脚本(高低价对比)
//@version=5 indicator("Why Different") // 本地图表标的的高低价 plot(high, "hi", color = color.blue, style=plot.style_linebr) plot(low, "lo", color = color.blue, style=plot.style_linebr) // 通过request.security获取的SPY高低价 [s_hi,s_lo] = request.security(symbol = "SPY", timeframe = timeframe.period, expression = [high, low]) plot(s_hi, "hi", color = color.purple, style=plot.style_linebr) plot(s_lo, "lo", color = color.purple, style=plot.style_linebr)
结果对比图

问题原因
- 核心数据来源差异:你当前图表加载的标的并非SPY,本地的
high/low是当前显示标的的行情数据,而request.security明确指定获取的是SPY的高低价,二者属于不同标的,数据自然不一致。 - TOS违规可能原因:初始脚本在非SPY图表上,将SPY的ATR与本地标的ATR对比,脚本名称和展示逻辑可能被判定为存在误导性(暗示数据属于同一标的),或是触发了平台关于跨标的数据展示的相关限制。
修复建议
- 若需对比同一标的数据,确保当前图表标的与
request.security中指定的symbol一致,或在脚本标注中明确区分不同标的的数据源。 - 若需跨标的对比,修改脚本名称和数据标注,清晰展示不同标的的身份,避免误导性内容。
内容的提问来源于stack exchange,提问作者Andrew Steitz
相关产品推荐
相关产品推荐

