如何在Pine Script中处理request.security_lower_tf数组数据以计算并绘制EMA?
问题分析
你遇到的报错是因为request.security_lower_tf返回的是数组类型(float[]),而ta.ema()要求输入的是序列类型(series float)——这两种数据类型不兼容,导致无法直接传入计算。
request.security_lower_tf的作用是获取当前主时间框架K线内包含的所有低时间框架数据,比如在5分钟K线上调用它获取1分钟数据,会返回当前5分钟K线对应的5根1分钟收盘价组成的数组,而非逐根K线的序列数据。
解决方案
根据你的需求,分两种场景给出修正方案:
场景1:计算低时间框架的EMA,映射到主时间框架显示
如果你的目标是先在低时间框架(比如1分钟)计算EMA,再把结果显示在主时间框架(比如5分钟)上,直接在request.security_lower_tf内部完成EMA计算即可,此时返回的是序列类型,符合plot()的要求:
//@version=5 indicator("MTF EMA") // 设置参数:EMA长度、低时间框架 emaLength = input.int(20, title="EMA Length 1") lowerTimeframe = input.timeframe("1", title="Lower Timeframe") // 示例:1分钟 // 直接在低时间框架内计算EMA,再拉取到主框架(返回series float) ema1 = request.security_lower_tf(syminfo.tickerid, lowerTimeframe, ta.ema(close, emaLength)) // 绘图 plot(ema1, color=color.blue, title="Lower TF EMA")
场景2:用低时间框架的收盘价序列,在主时间框架计算EMA
如果需要基于低时间框架的收盘价序列,在主时间框架上计算EMA,应该使用request.security而非request.security_lower_tf——前者返回的是低时间框架的序列数据(每个主K线对应低框架的一个最新值):
//@version=5 indicator("EMA from Lower TF Close") emaLength = input.int(20, title="EMA Length 1") lowerTimeframe = input.timeframe("1", title="Lower Timeframe") // 获取低时间框架的收盘价序列(返回series float) lowerClose = request.security(syminfo.tickerid, lowerTimeframe, close) // 基于低框架收盘价计算EMA ema1 = ta.ema(lowerClose, emaLength) plot(ema1, color=color.blue, title="EMA on Lower TF Close")
关键区别
request.security_lower_tf:返回当前主K线内的低框架数据数组,适合统计当前主K线内的低框架数据特征(比如高低点、成交量总和)。request.security:返回低框架的序列数据,适合跨时间框架的指标计算与绘图。
内容的提问来源于stack exchange,提问作者user21866272
相关产品推荐
相关产品推荐

