保持敬畏之心
交易是一场持久战

Pine Script(166):在警报消息中包含绘图值

#Pine Script入门教学

在TradingView的警报中包含绘图值

要在TradingView的警报消息中获取动态值,除了标准占位符,我们还有另一种好用的工具:绘图占位符(plot placeholders)。下面详细了解它们是什么、怎么用。

绘图占位符的含义

绘图占位符是警报消息中一段被双大括号{{...}}包裹的特殊文本。警报触发时,TradingView会自动把这个占位符替换为代码中与之对应的那个绘图(plot)的当前值。通过这种方式,我们就能在警报消息中动态显示脚本中任意一个已绘制变量的数值。使用绘图占位符主要有两种方式:按编号引用(例如{{plot_0}})和按名称引用(例如{{plot("SMA")}})。

绘图占位符的历史演变

绘图占位符的出现,是为了解决早期Pine脚本中alertcondition()函数无法在警报消息里包含自定义动态值的问题。在那个时期,如果没有绘图占位符,警报消息就只能是千篇一律的静态文本。如今,Pine脚本已经引入了功能更强的alert()函数以及订单函数中的alert_message参数,两者都允许我们把任何变量(先转换成字符串)直接嵌入警报消息,灵活得多。这些新特性使绘图占位符的重要性有所下降。现在我们主要在两种情况下用它:需要配合alertcondition()时,或者想为一个拿不到源代码的指标创建动态警报时。

绘图占位符的使用场景

我们可以在以下场景中使用绘图占位符:

  • 在“创建警报”窗口中,为指标的警报条件设置消息。
  • 在代码中,为alertcondition()函数的message参数设置默认消息。
  • 在“创建警报”窗口中,为策略设置全局警报消息。
  • 在策略代码的//@strategy_alert_message注释中。

以下场景则不能使用绘图占位符:

  • alert()函数的消息中。
  • 策略订单函数的alert_message参数中。

不过,后两者用不了绘图占位符并无大碍,因为它们本身就具备更灵活的动态消息构建能力,可以包含脚本中的任何变量值,而不仅限于那些被绘制到图表上的值。从这个角度看,alert()alert_message的功能远比绘图占位符强大。

支持占位符的绘图函数

绘图占位符可以引用以下函数所绘制的数值:

函数 说明
plot() 最通用的绘图函数,能以线图、柱状图、面积图、圆圈、十字等多种形式显示数据。
plotshape() 根据布尔条件,在图表上绘制指定的形状(如方块、三角等)。
plotchar() 根据布尔条件,在图表上显示指定的单个字符。
plotarrow() 在图表上绘制向上或向下的箭头,箭头的大小由其数值决定。
plotbar() 将OHLC值绘制成一根简单的价格K线。
plotcandle() 将OHLC值绘制成一根标准的蜡烛图。

两种类型的绘图占位符

要在警报消息中引用一个绘图的值,我们有两种方式可选:

  1. 按名称引用:例如{{plot("绘图名称")}}
  2. 按编号引用:从{{plot_0}}{{plot_19}}

在Pine脚本代码中,它们的使用示例如下:

// 按名称引用RSI的绘图值
alertcondition(close < close[1], "做空警报", '做空。RSI值为 {{plot("RSI")}}')

// 按编号引用第一个绘图(假设为RSI)的值
alertcondition(close > close[1], "做多警报", "做多。RSI值为 {{plot_0}}")

接下来详细看看这两种方式的用法和区别。

按名称引用绘图值

要在警报消息中包含特定绘图的数值,第一种方法就是通过名称来引用。当TradingView生成一个包含按名称引用占位符的警报时,会自动把占位符替换为脚本中具有相应名称的那个绘图的当前值。通过这种方式,我们可以在脚本的警报消息中精确获取该脚本自身任何一个绘图的输出值。需要注意的是,这种方法无法引用来自其他脚本的绘图。

按名称引用的基本格式如下:

{{plot("name")}}

这里的"name"就是我们想在警报消息中引用的那个绘图的名称,例如{{plot("成交量")}}{{plot("EMA线")}}

  • 绘图的名称需要用双引号"包围。
  • 这个名称,实际上就是我们在代码中调用绘图函数(如plot())时,为title参数指定的字符串。
  • 除了在代码中查找,也可以在指标设置窗口的“样式”标签页,或图表的“数据窗口”工具中找到这个名称。

当警报触发时,这样一个按名称引用的占位符会返回:

  • 指定绘图在警报触发那一刻的精确数值。
  • 如果警报是在K线尚未收盘时触发的,那么警报消息中的这个数值,很可能与该K线最终收盘后图表上显示的数值不同。
  • TradingView会把这个实时数值直接插入警报消息,替换掉占位符原来的位置。

引用绘图值的另一种方法是使用编号占位符(如{{plot_0}})。但与编号占位符相比,按名称引用有两个明显优势:一是没有数量限制——编号占位符最多只能引用脚本中的前20个绘图,而按名称引用可以指向脚本中的任何一个绘图;二是代码维护更方便——你可以自由地在代码中添加、删除或调整绘图函数的顺序,不用担心打乱现有的占位符引用,迭代和维护都更安全。

如何找到绘图的名称

我们有两种途径可以找到一个绘图的确切名称:通过TradingView的用户界面,或者直接在脚本代码中查找。

在TradingView的用户界面中,主要有两个地方可以找到绘图名称:指标设置窗口的“样式(Style)”标签页,以及图表的“数据窗口(Data Window)”。

要通过“样式”标签页查找,先打开指标的设置:把鼠标悬停在图表上的指标名称上,点击出现的齿轮图标,在弹出的设置窗口中切换到“样式”标签页,就能看到该指标所有绘图的名称:

上图显示,这个脚本有三个绘图,名称分别是Fast、Medium和Slow。另一个更便捷的方法是使用图表的“数据窗口”,可以在图表右侧工具栏中找到并打开它。在数据窗口中找到对应指标的名称,其下方列出的就是该指标所有绘图的名称:

上图的例子为名为My example script的指标展示了三个绘图名称:Fast、Medium和Slow。

在代码中查找绘图名称

另一种方法是直接看脚本源代码:找到对应的绘图函数(如plot()),其title参数的值就是我们要的绘图名称。这种方法适用于除plotbar()plotcandle()之外的所有绘图函数,因为后两者不使用title参数命名,也就无法通过名称引用。假设我们有以下指标代码:

//@version=5
indicator(title="绘图名称示例", overlay=true)

// 计算并绘制三条指数移动平均线 (EMA)
plot(ta.ema(close, 10), color=color.red, title="Fast")
plot(ta.ema(close, 25), color=color.orange, title="Medium")
plot(ta.ema(close, 75), color=color.teal, linewidth=2, title="Slow")

这个脚本用plot()绘制了三条线。看title参数就知道它们的名称分别是Fast、Medium和Slow。要在警报消息中引用这些绘图的值,就可以分别用{{plot("Fast")}}{{plot("Medium")}}{{plot("Slow")}}这些占位符。

按名称引用时的注意事项

内置指标请使用英文原名。当我们为TradingView的内置指标(如RSI、MACD)创建警报时,必须使用其英文原版代码中定义的绘图名称,而不是中文界面上看到的本地化名称(如“快线”“慢线”),绘图占位符无法识别这些翻译后的名称。最可靠的方法是查看该内置指标的源代码,找到plot()函数中的title参数值,那才是我们需要的原始英文名称。

按名称引用的占位符无法获取由plotbar()plotcandle()绘制的数值。要引用这两个函数绘制的OHLC值,必须使用按编号引用的占位符,例如{{plot_1}}。这两个函数是特例,其他所有绘图函数(如plotplotshape等)都可以通过名称引用。

绘图名称严格区分大小写,占位符中使用的名称必须与代码里title参数的字符串在大小写上完全一致。例如一个绘图名为Moving Average,那么只能用{{plot("Moving Average")}},而{{plot("moving average")}}{{plot("Moving average")}}都无效。此外,空格也必须完全匹配。

在占位符{{plot(...)}}的括号内,绘图名称必须用双引号"包围,用单引号'是无效的。正确写法是{{plot("Fast EMA")}},而不是{{plot('Fast EMA')}}

如何在代码字符串中使用带双引号的占位符

既然绘图名称本身需要双引号,而我们在代码中定义警报消息(即message参数)时,通常也会用引号包裹整个字符串,这就产生了引号嵌套的问题。Pine脚本提供了两种解决方案:

  1. 外单内双:用单引号'包裹整个message字符串,内部的绘图名称就可以自由使用双引号"了。这是最推荐的做法,代码清晰易读。
alertcondition(condition=ta.cross(close, ta.ema(close, 20)),
     message='当 {{ticker}} 价格穿越EMA时,EMA值为 {{plot("EMA")}}.')
  1. 双引嵌套与转义:如果整个message字符串必须用双引号,那么内部绘图名称所用的双引号就需要用反斜杠\转义,避免被解释为字符串的结束符。
alertcondition(condition=ta.cross(close, ta.ema(close, 20)),
     message="{{ticker}} 价格穿越EMA时,EMA值为 {{plot(\"EMA\")}}.")

按编号引用绘图值

这是在警报消息中包含绘图值的第二种方法。它同样只能引用当前脚本内部的绘图,无法跨脚本引用。基本格式如下:

{{plot_N}}

这里的N代表绘图的编号,是一个从0开始的整数。例如{{plot_0}}代表第一个绘图,{{plot_4}}代表第五个绘图。

  • 绘图的编号根据它们在代码中出现的先后顺序决定:第一个出现的绘图函数编号是0,第二个是1,以此类推。
  • TradingView目前最多只支持到{{plot_19}},也就是说只能通过编号引用脚本中的前20个绘图。如果一个脚本的绘图超过20个,第21个及以后的绘图就必须通过名称引用。

一个按编号引用的占位符(如{{plot_0}})返回的内容,与按名称引用的占位符完全相同:都是警报触发那一刻该绘图的精确数值。

如何确定绘图的编号

既然编号是按代码顺序来的,怎么快速确定某个特定绘图的编号?有两种方法:通过图表的“数据窗口”来数,或者直接在脚本代码中数。

TradingView的“数据窗口”会按编号顺序列出脚本的所有绘图。数据窗口中显示的第一个绘图编号就是0,对应{{plot_0}};第二个编号是1,对应{{plot_1}},以此类推。点击图表右侧工具栏的相应按钮就能打开“数据窗口”,在窗口中找到你的脚本名称,其下方列出的就是所有绘图。示例如下:

在上图中,名为My example script的指标共有7个绘图,可以这样确定它们的编号:

  • Fast EMA是第一个,编号是0,用{{plot_0}}引用。
  • Slow EMA是第二个,编号是1,用{{plot_1}}引用。
  • 接下来的四个绘图(plot_2到plot_5)由一个plotbar()函数生成,分别代表该K线的开、高、低、收,编号依次为2、3、4、5。
  • Plot shape是最后一个,编号为6,用{{plot_6}}引用。

在代码中确定编号

另一种方法是直接通过阅读脚本代码来确定绘图的编号。这种方法相对复杂,因为必须清楚每个绘图函数到底占用了多少个绘图位。规则是:plotbar()plotcandle()各占用4个绘图位,其他所有绘图函数(如plotplotshape等)都只占用1个。计数时必须严格按照函数在代码中出现的先后顺序。看一个具体的例子:

//@version=5
indicator(title="我的示例脚本")

// 计算并绘制快慢两条均线
fastEMA = ta.ema(close, 20)
slowEMA = ta.ema(close, 70)
plot(fastEMA, color=color.orange, linewidth=2, title="Fast EMA")
plot(slowEMA, color=color.teal, linewidth=2, title="Slow SMA")

// 绘制OHLC价格 K 线
plotbar(open, high, low, close, color=color.black, title="Plot bar")

// 当均线交叉时,绘制一个三角形
plotshape(ta.cross(fastEMA, slowEMA) ? high + ta.tr : na, 
     style=shape.triangledown, location=location.absolute, 
     size=size.normal, title="Plot shape")

这个脚本用了plot()plotbar()plotshape()三种绘图函数。按它们在代码中的出场顺序,编号如下:

  1. 第一个plot()函数绘制fastEMA,是第一个绘图,编号为0,用{{plot_0}}引用。
  2. 第二个plot()函数绘制slowEMA,是第二个绘图,编号为1,用{{plot_1}}引用。
  3. 接下来的plotbar()函数一次性绘制了开、高、低、收四个值,连续占用4个绘图位,这四个绘图的编号分别是2、3、4、5,用{{plot_2}}{{plot_5}}引用。
  4. 最后的plotshape()函数绘制一个形状,编号紧接着plotbar()的最后一个编号,所以是6,用{{plot_6}}引用。

按编号引用时的注意事项

编号基于代码顺序。在后台,TradingView会根据绘图函数在代码中被调用的顺序,依次为每个绘图分配一个编号,这个过程严格按照从上到下的顺序进行。第一个绘图的编号是0(用{{plot_0}}访问),第二个是1(用{{plot_1}}访问),以此类推。

plotbar()plotcandle()会占用4个绘图位。每次调用这两个函数,都会一次性产生4个绘图输出(分别对应OHLC)。这会带来两个后果:

  • 快速消耗可用名额:由于编号占位符最多只能引用前20个绘图,而plotbarplotcandle一次就用掉4个名额,其他绘图可用的编号数量会大大减少。
  • 增加计数难度:在代码中手动计算编号时,必须记住这两个函数会让编号一次性跳增4位。

下面这个例子清晰地展示了编号的跳增:

plot(close)                       // 绘图编号 0: {{plot_0}}
plotbar(open, high, low, close)   // 一次性占用4个编号,分别是 1, 2, 3, 4
                                  // 对应 {{plot_1}}, {{plot_2}}, {{plot_3}}, {{plot_4}}
plot(open)                        // 紧接着的这个绘图,其编号是 5: {{plot_5}}

由此可见,在代码中手动计算编号容易出错。最稳妥的方法还是通过“数据窗口”确定编号,或者干脆使用按名称引用的占位符,完全避免计数的麻烦。

绘图占位符的通用特性

无论按名称还是按编号引用,绘图占位符都有以下几个通用特性。

它是alertcondition()实现动态值的必需品。对alertcondition()而言,绘图占位符是实现动态警报消息的唯一途径,因为该函数的message参数只接受固定的常量字符串,无法直接拼接变量,绘图占位符巧妙地绕过了这个限制。此外,当我们想为一个没有源代码的指标创建动态警报时,绘图占位符也是唯一选择。

它显示的是警报触发瞬间的值。占位符显示的是警报被触发那一刻绘图的即时值。如果警报是在一根K线尚未收盘时触发的,这个即时值很可能与该K线最终收盘后图表上显示的固定值不同。这不是错误,而是价格实时波动造成的正常现象。

布尔值绘图显示为01。绘图占位符在警报消息中总是以数值形式出现,即便它引用的绘图是基于布尔值(true/false)显示的。例如plotshape()plotchar()就是根据布尔条件决定是否绘图的,当占位符引用它们时,true会被转换成数字1false会被转换成0。这意味着警报消息不会显示直观的true或false字样,而是不太友好的1或0。如果你不希望这样,可以使用功能更强的alert()函数,它可以把布尔值转换成"true""false"字符串再输出。

它只能引用自身脚本的绘图。绘图占位符无法“跨界”引用其他指标的绘图值,只能访问生成该警报的那个脚本内部自己创建的绘图。

它无法显示字符串。Pine脚本本身无法直接“绘制”出动态的文本字符串——要在图表上显示动态文本,需要使用标签(label)或表格(table)等绘图对象。既然无法绘制字符串,绘图占位符自然也无法在警报消息中包含动态的文本内容。要实现此功能,需要使用alert()函数。

小结

绘图占位符是被双大括号{{...}}包裹的特殊文本,用于插入警报消息中。警报触发时,TradingView会自动把它替换为对应绘图的当前实时数值。我们可以在alertcondition()函数以及策略警报的相关设置中使用它们。绘图占位符主要有两种类型:

  1. 按名称引用(如{{plot("SMA")}}):通过绘图函数title参数设定的名称来引用,灵活且不易出错。
  2. 按编号引用(如{{plot_0}}{{plot_19}}):通过绘图在代码中的出现顺序来引用,最多20个。最方便的确定编号方法是查看“数据窗口”。

绘图占位符获取的是警报触发瞬间的即时值,可能与K线收盘后的最终值不同。最后请记住,绘图占位符不能与功能更现代的alert()函数和alert_message参数一起使用。

在TradingView警报条件的消息中显示绘图值

默认情况下,由alertcondition()函数生成的警报消息每次都是一成不变的。好在我们可以利用绘图占位符(plot placeholders),让这些消息也包含动态的指标数值。在警报文本中加入一个绘图占位符后,警报触发时TradingView会自动把它替换为对应绘图的当前实时值。这样我们就能在警报消息中,展示任何一个已经绘制到图表上的变量的值。下面看看具体怎么用。

引用绘图的两种方式

要在警报消息中引用一个绘图的值,主要有两种方式:

  1. 按编号引用({{plot_N}}):基于绘图在代码中的出现顺序进行引用,编号从0开始,例如第一个绘图用{{plot_0}}引用。缺点是最多只能引用脚本中的前20个绘图(即到{{plot_19}}为止)。
  2. 按名称引用({{plot("name")}}):基于我们在代码中为绘图指定的title标题来引用,例如{{plot("成交量")}}{{plot("EMA线")}}。这种方式更方便、可读性更高,而且没有前20个绘图的数量限制。

当TradingView在警报消息中填充这些占位符时,它取的是警报触发那一刻绘图的即时读数。这个值可能来自一根已经走完的K线,也可能来自一根正在实时跳动的K线。

在警报条件中使用绘图占位符

要在alertcondition()创建的警报中利用绘图占位符,同样有两种方法:一是在“创建警报”窗口的“消息”文本框中手动输入占位符;二是在Pine脚本代码中,直接把占位符写进alertcondition()函数的message参数里,以代码形式预设。下面分别看这两种方法的具体操作。

方法一:手动输入绘图占位符

要在警报消息中包含某个绘图的值,可以在“创建警报”窗口的“消息”文本框中手动输入{{plot_N}}{{plot("name")}}。使用这种方法的前提是图表上已经加载了一个内置alertcondition()函数的指标,否则“创建警报”窗口里找不到可供配置的警报条件。假设我们已经在图表上加载了一个指标,它绘制了两条移动平均线,并且内置了警报条件:

为了找到这些绘图的准确名称和编号,以便在警报消息中使用,我们可以打开图表的“数据窗口”:

通过上图的“数据窗口”可以看到,这个指标有两个绘图:第一个名为EMA,第二个名为SMA。按照从0开始的编号规则,它们的编号分别是01

明确了绘图的名称和编号后,就可以在警报消息中引用它们了。操作步骤如下:

首先,打开图表的“创建警报”窗口。在“条件”一栏中,先选择指标的名称,再选择要使用的具体警报条件(下面例子中是Cross condition):

这时,“消息”文本框会显示指标代码中预设的默认消息,我们可以直接修改它,插入绘图占位符。

例如,可以用{{plot_0}}引用EMA的当前值,用{{plot("SMA")}}引用SMA的当前值。修改后的消息框看起来会是这样:

接下来点击“创建警报”窗口中的“创建”按钮激活警报,然后只需等警报条件满足。触发时,我们收到的警报消息就是这个样子:

可以看到,两条均线的当前值已经通过绘图占位符,被成功地动态嵌入到了警报消息中。

方法二:在代码中预设占位符

另一种方法,也是更推荐、一劳永逸的方法,是在写脚本代码时直接把绘图占位符写进alertcondition()函数的message参数中。好处是message参数里的文本会自动成为用户在“创建警报”窗口中看到的默认消息。在代码里预先配置好包含占位符的消息,既方便了用户,也保证了警报信息的一致性和完整性。

要注意,在alertcondition()中使用绘图占位符的功能,从Pine脚本第4版才开始支持。因此指标代码必须以//@version=4或更高的版本声明开头。如果脚本用的是第3版或更早版本,或者没有版本声明,绘图占位符将无法生效。

代码示例

我们通过一个完整的例子,来实践如何在alertcondition()函数中直接使用绘图占位符。假设我们希望在成交量上穿其简单移动平均线(SMA)时收到警报。首先,计算并绘制这两个数值:

// 计算并绘制成交量及其均线
volumeAverage = ta.sma(volume, 30)
plot(volume, color=color.blue, style=plot.style_columns, title="Volume")
plot(volumeAverage, color=color.orange, title="Volume Average")

这里算了30周期的成交量SMA,并调用了两次plot():第一个plot绘制实时的成交量柱,命名为"Volume";第二个plot绘制成交量均线,命名为"Volume Average"。接下来定义警报的触发逻辑:

// 警报触发条件:成交量上穿其均线
volumeCross = ta.crossover(volume, volumeAverage)

我们用ta.crossover()捕捉成交量上穿其均线的瞬间:穿越发生时volumeCrosstrue,否则为false。最后基于这个逻辑创建警报条件,并在消息中嵌入占位符:

// 创建警报条件,并预设包含占位符的默认消息
alertcondition(condition=volumeCross,
     title="成交量警报",
     message='当前成交量 ({{plot_0}}) 上穿了其均线 ({{plot("Volume Average")}}).')

我们调用alertcondition()condition参数设为触发条件volumeCrosstitle参数设为“成交量警报”,这个名称会显示在警报设置的菜单中;message参数定义默认的警报消息,其中用了两种类型的绘图占位符来展示动态值:

  • 第一个占位符{{plot_0}}按编号引用。根据代码顺序,它引用的是脚本中的第一个绘图,也就是前面绘制的实时成交量。
  • 第二个占位符{{plot("Volume Average")}}按名称引用。它精确引用了我们在plot()函数中命名为Volume Average的成交量均线的值。

注意上面代码中,message参数的整个字符串是用单引号'包裹的。这是因为按名称引用的占位符{{plot("Volume Average")}}内部必须使用双引号";如果message字符串本身也用双引号包裹,就会造成引号嵌套的语法错误,Pine脚本无法正确解析。因此,当需要在message参数中使用按名称引用的占位符时,推荐用单引号包裹整个消息字符串。

代码写完后,把指标添加到图表,然后开始创建警报。打开图表的“创建警报”窗口,在“条件”一栏先选择我们的指标名称,再在第二个下拉菜单中选择刚才用title参数命名的“成交量警报”。选完后你会发现,“消息”文本框已经自动填充了代码中预设好的、包含占位符的文本,就像这样:

消息已经准备好了,剩下的就是点击“创建”按钮激活这个警报。之后只需等成交量突破的行情发生。触发时,TradingView就会发出一条警报,其中两个绘图占位符已被替换为它们当时的实时数值。例如:

完整代码

上面示例所用指标的完整代码是:

//@version=5
indicator(title="Alert with plot placeholders", format=format.volume)

// 计算并绘制成交量平均值
volumeAverage = ta.sma(volume, 30)
plot(volume, color=color.blue, style=plot.style_columns, title="Volume")
plot(volumeAverage, color=color.orange, title="Volume Average")

// 当成交量上穿其平均值时,警报设置发生
volumeCross = ta.crossover(volume, volumeAverage)

// 用默认消息文本创建警报条件
alertcondition(condition=volumeCross,
     title="Volume alert",
     message='Current bar volume ({{plot_0}}) crossed above ' + 
         'its average ({{plot("Volume Average")}}).')

这段代码先用indicator()配置指标设置,title参数为脚本命名。然后ta.sma()计算简单移动平均线,plot()用蓝色(color.blue)显示成交量,用橙色(color.orange)显示其平均值。接着ta.crossover()检测警报触发时机——K线的成交量volume上穿其移动平均线的时刻。最后alertcondition()基于volumeCross变量创建警报条件,标题为"Volume alert",默认警报消息是一个包含{{plot_0}}{{plot("Volume Average")}}两个绘图占位符的字符串。这是该脚本在图表上的样子:

如何在字符串中编写绘图名称

按名称引用的绘图占位符,必须在绘图名称两侧使用双引号,例如{{plot("Volume")}}{{plot("EMA")}}。单引号不起作用,会导致TradingView无法把绘图占位符替换为绘图的实际值。要在字符串中包含双引号又不引发Pine脚本代码错误,有两种方法:

  1. 用单引号包裹警报消息字符串,这样绘图占位符就可以在绘图名称两侧使用双引号。例如:
alertcondition(condition=ta.cross(close, ta.ema(close, 20)),
     message='{{ticker}} crossed EMA at {{plot("EMA")}}.')
  1. 用双引号包裹警报消息字符串,但用反斜杠\转义绘图名称两侧的双引号。例如:
alertcondition(condition=ta.cross(close, ta.ema(close, 20)),
     message="{{ticker}} crossed EMA at {{plot(\"EMA\")}}.")

\"是一个转义字符,会渲染为一个双引号。虽然看起来有点奇怪,但这样写在警报消息中是安全的。

小结

绘图占位符让TradingView警报消息包含动态值成为可能。在警报文本中包含一个绘图的值有两种方法:可以用从零开始的编号来引用绘图,从第一个绘图的{{plot_0}}到最后一个可用的{{plot_19}};也可以用{{plot("name")}}格式按名称引用。对于警报条件,我们既可以在“创建警报”窗口中手动输入绘图占位符,也可以把它们写进alertcondition()函数的message参数,让代码定义好带绘图占位符的默认警报消息。

赞(0)
未经允许不得转载:图道交易 » Pine Script(166):在警报消息中包含绘图值
分享到

评论 抢沙发

登录

找回密码

注册