如何在PineScript中正确实现ThinkOrSwim的MACD.Diff()功能
问题解决方案
报错原因
Pine Script的ta.macd()函数会一次性返回三个序列值,分别是MACD线、信号线、MACD差值(柱状图值),你之前直接将多返回值的整体赋值给单个变量,实际拿到的是数组类型对象,传入ta.sma()时就会触发数组类型不支持的报错。
正确实现方式
ThinkOrSwim平台的MACD.Diff()本质就是MACD线减去对应信号线的差值,在Pine Script中可以直接通过多返回值接收的方式获取,不需要额外手动计算,对应代码如下:
//@version=5 indicator("MACD Diff计算示例", overlay=false) // 按参数接收ta.macd的三个返回值,第三个值即为MACD与信号线的差值,等价于ToS的MACD.Diff() // 入参顺序为:数据源、快EMA周期、慢EMA周期、信号线周期 [macdLine, signalLine, macdDiff] = ta.macd(close, 12, 26, 9) // 若你需要对差值计算9周期SMA,直接使用macdDiff计算即可 smaOfDiff = ta.sma(macdDiff, 9) // 绘图输出可根据需求调整 plot(macdDiff, color=color.new(color.blue, 0), title="MACD差值") plot(smaOfDiff, color=color.new(color.red, 0), title="差值的9周期SMA") hline(0, color=color.gray)
注意:你之前编写的参数
12, 6, 9和通用MACD默认参数不一致,如果你确实需要使用自定义参数,直接修改ta.macd()的对应入参即可。
如果需要手动计算差值,也可以用以下写法,结果和内置返回的macdDiff完全一致:
macdDiff = macdLine - signalLine
内容的提问来源于stack exchange,提问作者Zesty
相关产品推荐
相关产品推荐

