Pine Script study函数添加timeframe参数报错如何修复
报错原因
study()是Pine Script的指标声明函数,本身不存在timeframe这个内置参数,直接传入该参数会触发未知参数报错,属于函数参数误用。
解决方案
要实现日线级别(或其他自定义多周期)的指标计算,不需要修改study()函数的参数,使用Pine Script内置的跨周期数据调用函数request.security()拉取目标周期的行情数据,再基于拉取到的数据计算指标即可,操作步骤如下:
- 保留原有首行的指标声明代码
study("SSL Hybrid", overlay=true),删除之前错误添加的timeframe="D"参数 - 新增周期选择输入项,方便后续灵活调整指标计算的时间周期
- 调用
request.security()拉取目标周期的基础行情数据(开高低收、真实波幅等) - 将原有指标计算逻辑中用到的当前周期数据源,替换为拉取到的目标周期数据,即可实现多周期指标计算
代码修改示例
在原有代码基础上补充跨周期逻辑的参考写法:
study("SSL Hybrid", overlay=true) // 原有输入项保留 show_Baseline = input(title="Show Baseline", type=input.bool, defval=true) show_SSL1 = input(title="Show SSL1", type=input.bool, defval=false) show_atr = input(title="Show ATR bands", type=input.bool, defval=true) // 新增多周期选择输入,默认值为日线 htf_timeframe = input.timeframe(title="指标计算周期", defval="D") //ATR atrlen = input(14, "ATR Period") mult = input(1, "ATR Multi", step=0.1) smoothing = input(title="ATR Smoothing", defval="WMA", options=["RMA", "SMA", "EMA", "WMA"]) ma_function(source, atrlen) => if smoothing == "RMA" rma(source, atrlen) else if smoothing == "SMA" sma(source, atrlen) else if smoothing == "EMA" ema(source, atrlen) else wma(source, atrlen) // 拉取目标周期的真实波幅、收盘价数据 tr_htf = request.security(syminfo.tickerid, htf_timeframe, tr(true)) close_htf = request.security(syminfo.tickerid, htf_timeframe, close) // 基于目标周期数据计算ATR及上下轨 atr_slen = ma_function(tr_htf, atrlen) upper_band = atr_slen * mult + close_htf lower_band = close_htf - atr_slen * mult ////BASELINE / SSL1 / SSL2 / EXIT MOVING AVERAGE VALUES maType = input(title="SSL1 / Baseline Type", type=input.string, defval="HMA", options=["SMA","EMA","DEMA","TEMA","LSMA","WMA","MF","VAMA","TMA","HMA", "JMA", "Kijun v2", "EDSMA","McGinley"]) len = input(title="SSL1 / Baseline Length", defval=60) // 后续SSL、基线的计算如果需要基于目标周期,同理用request.security拉取对应周期的价格数据传入计算函数即可
注意:如果需要整个SSL Hybrid指标完全基于目标周期计算,只要把所有计算环节用到的行情源(高、低、开、收等)都替换为
request.security()拉取到的对应周期变量即可。
内容的提问来源于stack exchange,提问作者Wags
相关产品推荐
相关产品推荐

