写脚本时你很可能踩过这个坑:明明在代码里写了precision=5
,想让指标显示5位小数,结果一将它叠加到主图上(overlay=true
),precision
就好像彻底失灵了,指标的小数位数顽固地跟着主图的K线走。
这是怎么回事?这其实是TradingView的一个底层设计机制。当一个脚本叠加在主图上时,它就相当于一个客人,住进了主图品种的房子里,共用同一个价格坐标轴。因此,它必须遵守房子的规则,也就是主图品种自身的价格精度设置。代码里自带的precision
设置,自然就被无视了。
下面我们通过一个实例,直观地看看这个问题,并为你提供两种行之有效的解决方案。
我们来看下面这个简单的均线指标:
//@version=6
indicator(title="均线精度问题演示", overlay=true, precision=5)
// 绘制40MA
plot(ta.sma(close, 40), color=color.orange, title="SMA")
在这个指标里,我们明确设置了overlay=true
让它叠加在主图,同时用precision=5
意图让均线值显示五位小数。
然而当我们将它添加到图表上时会发现,均线值的实际小数位数,完全跟随了主图交易品种(这里是Japan 225,1位小数),我们代码中指定的5位小数并没有生效:
这显然不是我们想要的结果,那么如何才能在这种叠加模式下,依然夺回我们对脚本显示精度的控制权呢?
要让叠加显示的脚本(overlay=true
)能够展示不同于主图品种的小数位数,目前主要有两种“曲线救国”的方案:
- 更改图表主交易品种的显示精度。
- 让脚本使用一个独立的价格坐标轴。
需要说明的是,这两种方法都并非完美,各有取舍。下面我们来分别看一下。
方案一:调整主图交易品种的显示精度
第一种方法最简单直接:既然叠加的脚本会继承主图的精度,那我们直接修改主图品种的精度设置就行了。
操作步骤如下:
在图表设置的“交易品种”选项卡中,找到并修改“精度”选项:
这个“精度”选项,就是主图价格坐标轴的“总开关”。把它调整为你想要的位数后,所有共用这个坐标轴的叠加脚本,其显示精度都会随之改变。
例如我们将主图交易品种的精度手动调整为5位小数,我们之前那个均线指标立刻就显示出了我们期望的5位小数:
这个方法简单粗暴,立竿见影。但它的缺点也很明显:它会把你主图K线的价格精度也改掉,有时候过长的小数位反而会让图表显得杂乱。这算是一种伤敌一千自损八百的办法,只在特定情况下推荐使用。
方案二:为脚本指定独立的价格坐标轴
这是我个人更推荐的方法,它的核心思想是,不让指标再寄人篱下,而是让它自立门户,拥有自己独立的价格坐标轴。这样一来,它就可以使用自己在代码里设定的precision
值,不再受主图品种的约束。
我们可以通过indicator()
函数中的scale
参数来实现这一点,最常用的就是将脚本指定到图表的左侧价格轴:
//@version=6
indicator(title="均线精度与独立坐标轴", overlay=true, precision=5,
scale=scale.left)
进行此更改并重载脚本后,你会看到图表左侧出现了一个新的价格轴,专门服务于我们的均线指标。现在,均线根据其自身的precision=5
设置,在左轴上显示五位小数,而右侧的主图K线则不受任何影响,保持原样:
通过为指标指定独立的左侧价格轴,我们成功地让移动平均线显示了我们期望的5位小数,同时主图的显示也保持了清爽。
这个方法虽然完美解决了精度控制的问题,但你也需要注意一点:由于指标现在使用的是一个独立的坐标轴,其数值范围可能与主图价格轴完全不同,这可能会改变均线在视觉上的倾斜度和形态。不过在大多数情况下,这都是解决叠加精度问题的最佳选择。
总结
当脚本叠加在主图上时(overlay=true
),它会默认继承主图交易品种的显示小数位数,在这种叠加模式下,脚本代码中设置的precision
参数会失效。有两种间接方法可以解决这个问题:修改主图品种的精度,简单但会影响主图K线的显示;还有指定独立坐标轴,通过scale=scale.left
让指标使用自己的价格轴和precision
设置,这是更灵活、更推荐的做法。