如何在PineScript中计算外部证券的ATR指标数值
PineScript计算外部标的ATR的实现方法
你可以通过两种方式实现外部标的的ATR计算,两种方案的计算结果均与内置ATR在对应标的图表上的输出完全一致:
方案1:直接在request.security()中调用内置ATR(推荐)
request.security()函数的第三个参数支持传入任意计算表达式,直接将ta.atr()作为该参数传入,函数会自动基于外部标的的OHLC数据完成ATR计算,无需额外处理:
//@version=5 indicator("外部标的ATR示例", overlay=false) // 自定义参数:外部标的代码、计算周期、ATR长度 ex_ticker = "SPX" ex_timeframe = timeframe.period atr_length = 14 // 直接拉取外部标的的ATR值 ex_atr = request.security(ex_ticker, ex_timeframe, ta.atr(atr_length)) plot(ex_atr, title="SPX 14周期ATR", color=color.new(color.blue, 0))
方案2:手动拉取OHLC复现ATR计算逻辑
如果你需要自定义ATR的平滑逻辑,可以先拉取外部标的的OHLC数据,再按照ATR的标准计算逻辑手动实现:
ATR的标准计算规则:
- 先计算真实波幅TR:
TR = max(当期最高-当期最低, abs(当期最高-上期收盘), abs(当期最低-上期收盘)) - 对TR序列做RMA(相对移动平均)平滑,平滑周期即为ATR的长度参数
代码示例:
//@version=5 indicator("手动计算外部标的ATR示例", overlay=false) ex_ticker = "SPX" ex_timeframe = timeframe.period atr_length = 14 // 拉取外部标的的OHLC数据 [ex_high, ex_low, ex_close] = request.security(ex_ticker, ex_timeframe, [high, low, close]) // 手动计算TR ex_tr = math.max(ex_high - ex_low, math.abs(ex_high - ex_close[1]), math.abs(ex_low - ex_close[1])) // 用RMA平滑得到ATR,和内置ATR逻辑完全对齐 ex_atr = ta.rma(ex_tr, atr_length) plot(ex_atr, title="手动计算SPX 14周期ATR", color=color.new(color.red, 0))
注意事项
- 不要给
request.security()添加barmerge.lookahead_on参数,避免引入未来函数导致回测结果失真 - 外部标的的计算周期可自定义,例如在日线图表上计算周线级别的指数ATR,只需将
ex_timeframe参数改为"W"即可
内容的提问来源于stack exchange,提问作者Abhay Sahu
相关产品推荐
相关产品推荐

