You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PineScript疑问:图表与request.security计算的EMA值为何不一致?

TradingView中request.security计算的200周期EMA与直接计算值存在差异

问题详情

在TradingView中选择SPY作为图表标的时,通过request.security函数计算的200周期EMA(指数移动平均线)值,与直接使用图表close变量计算的EMA值不一致。尝试调整max_bars_back参数,未对request.security的行为产生影响。

测试结果

测试得到以下数值:

  • Ema Sec1 = $417.848
  • Ema Sec2 = $417.848
  • Ema Chart = $415.278 <=== 此数值为正确值!

问题代码

//@version=5
indicator("EMA not working")

// 选择SPY作为图表标的

[price,ema_security1]= request.security("SPY","D",[close,ta.ema(close,200)])
ema_security2 = ta.ema(price,200)
ema_chart = ta.ema(close,200)

var table _table = table.new(position.bottom_right, 4 , 4 ) 
table.cell(_table, 0, 0, "EMA Sec1", text_size="huge",bgcolor=color.orange)
table.cell(_table, 0, 1, str.tostring(ema_security1, '#.###'), text_size="huge", bgcolor=color.yellow)
table.cell(_table, 1, 0, "EMA Sec2", text_size="huge",bgcolor=color.orange)
table.cell(_table, 1, 1, str.tostring(ema_security2, '#.###'), text_size="huge", bgcolor=color.yellow)
table.cell(_table, 2, 0, "EMA Chart", text_size="huge",bgcolor=color.orange)
table.cell(_table, 2, 1, str.tostring(ema_chart, '#.###'), text_size="huge", bgcolor=color.yellow)

原因分析

  1. 时间周期不匹配:request.security("SPY","D",...)请求的是SPY的日线级别已完成K线数据,计算EMA用的是200个完整日线收盘价;而直接用ta.ema(close,200)时,使用的是当前图表时间周期(如分钟/小时级)的收盘价序列,包含未完成的当前K线价格,且是200个当前周期的K线,两者的计算基数完全不同。
  2. max_bars_back无效:该参数仅控制指标回溯的历史K线数量,和request.security的跨周期数据对齐逻辑无关,因此调整它无法消除差异。

解决方案

  • 若图表为日线周期:此时request.security请求的日线数据与图表close完全一致,两者计算的EMA数值会自动匹配。
  • 若图表为低时间周期:
    • 若需要计算200个当前周期的EMA:直接使用ta.ema(close,200)即可,无需通过request.security。
    • 若需要计算200日线EMA并在低周期图表显示:这种差异是跨周期数据的正常特性,此时request.security的结果是正确的日线EMA,而图表直接计算的是当前周期的EMA,两者本就不同。

内容的提问来源于stack exchange,提问作者Nelson Pesce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:03:24