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

Pine Script(165):警报标准占位符详解与实战

#Pine Script入门教学

TradingView的警报标准占位符是什么

在TradingView中设置警报时,默认每次触发警报,提示的消息都是一成不变的。这没什么不好,但一条能包含动态信息(如实时价格、成交量、品种名称)的警报消息,显然更实用。在警报中包含动态数据的一种方法,就是使用标准占位符。下面详细了解它们是什么、怎么用。

什么是标准占位符

标准占位符是一段被双大括号({{}})包裹、有特殊含义的文本,可以插入到警报消息中。当包含占位符的警报被触发时,TradingView会自动把这些占位符替换成对应的最新动态数值。通过这种机制,我们就能轻松地在警报消息中动态显示成交量、当前时间、最新价格等关键信息。

标准占位符的使用场景

在TradingView中,我们可以在多个地方使用标准占位符:

  • 手动创建的价格警报:可以在“创建警报”窗口的“消息”文本框中使用。
  • 指标脚本中的警报:可以在“创建警报”窗口的“消息”文本框中使用,也可以在代码里alertcondition()函数的message参数中使用。
  • 策略脚本中的警报:可以在“创建警报”窗口的“消息”文本框中使用;可以在策略脚本顶部的//@strategy_alert_message注释中使用;也可以在各类策略订单函数的alert_message参数中使用,为特定订单生成定制的警报消息。有一个例外:由alert()函数直接生成的警报消息不能使用标准占位符。

标准占位符使用示例

标准占位符用起来是什么效果?假设我们在BTCUSD图表上创建一个基于价格的警报。不需要任何指标或策略,直接点图表上的“创建警报”按钮,在弹出窗口的“消息”文本框里输入以下内容:

{{exchange}}:{{ticker}} 下跌2%,现价 {{close}}。

在窗口中的样子如下:

点击“创建”按钮激活警报后,一旦条件满足,TradingView就会把消息中的占位符替换为实时的动态值。收到的警报消息会是这个样子:

标准占位符一览表

以下是所有可用的标准占位符及其说明:

占位符 说明与示例
{{ticker}} 触发警报的交易品种代码。例如:AAPLEURUSDBTCUSD
{{exchange}} 交易品种所属的交易所或数据源。例如:NASDAQOANDACOINBASE。如果数据源是延迟数据,名称会以_DL_DLY结尾,例如NYMEX_DL
{{interval}} 触发警报的图表时间周期。
{{close}} 触发警报时,所在K线的“当前”收盘价(即最新成交价)。例如:124.831.53923
{{open}} 触发警报时,所在K线的开盘价。
{{high}} 触发警报时,所在K线的最高价。
{{low}} 触发警报时,所在K线的最低价。
{{volume}} 触发警报时,所在K线的成交量。
{{time}} 触发警报时,所在K线的开盘时间。该时间采用UTC(协调世界时),格式为yyyy-MM-ddTHH:mm:ssZ。例如:2022-05-03T14:25:00Z
{{timenow}} 触发警报的确切时刻。同样采用UTC,格式也是yyyy-MM-ddTHH:mm:ssZ。例如:2023-07-27T17:38:10Z

要注意占位符对大小写敏感,拼写必须与上表中的小写形式完全一致。例如{{close}}可以正确显示价格,但{{Close}}{{CLOSE}}不行,它们会被当成普通文本直接显示出来。

关于{{interval}}占位符的说明

{{interval}}占位符返回图表的时间周期,其返回值与图表周期的对应关系如下:

图表时间周期 {{interval}}返回值
秒级(如5秒) 5S
分钟级(如15分钟) 15
小时级(如4小时) 240(即4*60)
日线 D
周线 W
月线 M

有两种特殊情况,{{interval}}的返回值始终为1

  • 砖块图(Range chart)上的警报:由于砖块图基于1分钟数据构建,这类图表上的警报{{interval}}总是返回1
  • 手动的价格警报:手动创建、不依赖任何指标或策略的价格警报,其计算默认基于1分钟数据,所以{{interval}}也返回1

关于时间占位符的格式

{{time}}{{timenow}}都返回一个遵循yyyy-MM-ddTHH:mm:ssZ格式的时间字符串,这是国际标准的ISO 8601格式,其中:

  • yyyy-MM-dd代表年月日。
  • T是固定分隔符,用于分隔日期和时间。
  • HH:mm:ss代表时分秒。
  • Z代表该时间为UTC+0时区(协调世界时),没有任何时区偏移。

值得注意的是,无论你的图表是日线还是30秒线,这两个时间占位符的精度都到秒。

其他类型的警报占位符

除了标准占位符,还有另外两种占位符可以为警报消息增添动态信息:

  • 绘图占位符:用于在警报消息中包含指标的当前绘图值(例如RSI的当前值)。
  • 仓位占位符:专用于策略脚本,用于在警报消息中包含策略的持仓和订单信息。

此外,Pine脚本还提供了另一种实现动态警报消息的方法,就是使用alert()函数,它可以在不用占位符的情况下,直接构建包含动态变量的字符串。

小结

标准占位符是可以插入到警报消息中、被双大括号{{...}}包裹的特殊文本。警报触发时,TradingView会自动把这些占位符替换为相应的动态值,如最新价格、成交量、时间等。我们可以在手动创建的价格警报、alertcondition()生成的指标警报,以及策略订单触发的警报中灵活使用它们,做出信息更丰富、更实用的警报。

在TradingView警报条件中使用标准占位符

通过标准占位符,我们可以让警报消息包含动态数据,把每次触发都千篇一律的静态文本,升级为包含最新市场信息的动态通知。标准占位符是被双大括号{{...}}包裹的特殊文本,把它插入警报消息后,警报触发时TradingView会自动把这些占位符“掉包”成实时对应的动态值。在指标脚本中,我们有多种方式使用这些占位符,下面就来看看怎么在指标的警报条件中应用它们。

常用标准占位符一览

以下是可以在指标警报消息中使用的标准占位符:

  • {{ticker}}:插入触发警报的交易品种代码。
  • {{exchange}}:插入交易品种的交易所或数据源。
  • {{interval}}:插入图表的时间周期。
  • {{close}}:插入触发警报时K线的最新价格。
  • {{open}}:插入触发警报时K线的开盘价。
  • {{high}}:插入触发警报时K线的最高价。
  • {{low}}:插入触发警报时K线的最低价。
  • {{volume}}:插入触发警报时K线的成交量。
  • {{time}}:插入触发警报时K线的开盘时间(UTC)。
  • {{timenow}}:插入警报触发的确切时刻(UTC)。

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

方法一:在“创建警报”窗口中手动输入

这个方法让我们不改代码也能灵活定制警报消息。首先,需要一个已经用alertcondition()定义了警报条件的指标,并把它加载到图表上。然后打开图表的“创建警报”窗口,在“条件”一栏先选我们的指标名称,再在第二个下拉菜单中选具体的警报条件。接下来就可以在“消息”文本框中自由发挥了。例如,下图中的默认消息是“Instrument crossed WMA”:

现在我们想让它包含动态信息,可以把“消息”文本框的内容改为:

{{ticker}} 穿越WMA。最新价格:{{close}}。

这样,“创建警报”窗口会变成这个样子:

点击“创建”按钮,自定义动态警报就设置好了。之后当指标的警报条件满足时,我们收到的消息就是这样:

可以看到,TradingView已经自动把{{ticker}}替换成了品种代码,把{{close}}替换成了触发警报时的最新价格。

方法二:在代码中直接定义

第二种方法是写Pine脚本时,直接把包含占位符的文本作为alertcondition()函数message参数的值。好处是可以在代码中就预设好一条包含动态信息、内容丰富的默认警报消息。当用户在“创建警报”窗口选择这个警报条件时,这条预设消息会自动填进“消息”文本框,可以直接用,也可以在此基础上再改。假设我们要在价格穿越移动平均线的时刻生成警报,首先计算移动平均线:

// 计算加权移动平均线 (WMA)
wmaValue = ta.wma(close, 30)

这里算了30周期的WMA,存进wmaValue变量。然后定义警报的触发逻辑:

// 判断价格是否穿越均线
wmaCross = ta.cross(close, wmaValue)

我们用ta.cross()捕捉价格穿越均线的瞬间:穿越发生时wmaCrosstrue,否则为false。这个变量就是警报的“开关”。最后用alertcondition()创建警报条件,并在message参数中嵌入占位符:

// 创建价格穿越均线的警报条件
alertcondition(condition=wmaCross,
     title="WMA 穿越",
     message="{{exchange}}:{{ticker}} 的价格 ({{close}}) 穿越了WMA。")

这里condition参数用了“开关”变量wmaCrosstitle定义警报在菜单中显示的名称;message则包含预设的动态消息,其中{{exchange}}{{ticker}}{{close}}都是标准占位符。代码写完后,仍需手动在图表上创建这个警报:把指标加到图表,打开“创建警报”窗口,选择我们的指标和名为“WMA 穿越”的警报条件。这时你会发现消息框已经自动填充了代码中定义的内容,直接点“创建”即可:

之后当价格穿越WMA时,我们就会收到一条包含实时动态数据的警报消息,就像这样:

以上快速示例用到的完整指标代码如下:

//@version=5
indicator(title="alertcondition() 快速示例", overlay=true)

// 计算并绘制加权移动平均线
wmaValue = ta.wma(close, 30)
plot(wmaValue, color=color.teal, linewidth=2, title="WMA")

// 判断当前价格是否穿越均线
wmaCross = ta.cross(close, wmaValue)

// 创建价格穿越均线的警报条件
alertcondition(condition=wmaCross,
     title="WMA 穿越",
     message="{{exchange}}:{{ticker}} 的价格 ({{close}}) 穿越了WMA。")

这个指标的逻辑很简单:先计算并绘制30周期WMA,再用ta.cross()检测价格穿越均线的行为,最后通过alertcondition()把这个穿越行为定义成一个带动态消息的警报条件。

完整脚本示例

接下来构建一个包含警报条件和标准占位符的完整指标脚本。这个指标会创建两个警报条件:一个在价格向上突破阶段高点时触发,另一个在价格向下跌破阶段低点时触发,两个警报的消息中都会动态包含当时的价格信息。写完代码后,我们再演示怎么配置这些警报,并看看它们实际触发时的效果。先上完整的指标代码:

//@version=5
indicator(title="alertcondition() 示例", overlay=true)

// 计算并绘制阶段最高点与最低点
highestHigh = ta.highest(high, 10)[1]
lowestLow   = ta.lowest(low, 10)[1]
plot(highestHigh, color=color.green, linewidth=2, title="阶段高点")
plot(lowestLow, color=color.red, linewidth=2, title="阶段低点")

// 定义警报的触发逻辑
highBreakout = high > highestHigh and volume > volume[1]
lowBreakout  = low < lowestLow and volume > volume[1]

// 创建警报条件
alertcondition(condition=highBreakout,
     title="高点突破",
     message="{{ticker}} 的最高价 ({{high}}) 突破了阶段高点。")
alertcondition(condition=lowBreakout,
     title="低点跌破",
     message="{{ticker}} 的最低价 ({{low}}) 跌破了阶段低点。")

我们先用indicator()配置脚本的基本信息,如名称和显示方式。接着用ta.highest()ta.lowest()分别计算过去10根K线的最高价和最低价。注意函数后面的[1]:它表示取的是不包含当前K线的、过去10根K线的极值,这是为了确保当前价格可以与之进行有效的“突破”比较。算出的极值分别存进highestHighlowestLow变量。然后用plot()把这两条代表阶段高低点的线画在图表上,并用不同颜色区分。之后定义警报的触发逻辑:

// 定义警报的触发逻辑
highBreakout = high > highestHigh and volume > volume[1]
lowBreakout  = low < lowestLow and volume > volume[1]

第一个条件highBreakout要求当前K线的最高价high大于前面算出的阶段高点highestHigh,并且当前K线的成交量volume也要大于上一根K线的成交量,以此作为突破有效性的确认。两个条件同时满足时,highBreakouttrue。第二个条件lowBreakout逻辑类似,只是方向相反,用于捕捉向下跌破的信号。最后基于这些逻辑创建最终的警报条件:

// 创建警报条件
alertcondition(condition=highBreakout,
     title="高点突破",
     message="{{ticker}} 的最高价 ({{high}}) 突破了阶段高点。")
alertcondition(condition=lowBreakout,
     title="低点跌破",
     message="{{ticker}} 的最低价 ({{low}}) 跌破了阶段低点。")

第一个alertcondition()创建了“高点突破”警报:condition参数直接用前面定义的highBreakout变量;title为警报命名,这个名字会出现在警报设置的下拉菜单里;message设置默认警报消息,其中嵌入了{{ticker}}{{high}}两个标准占位符,用于动态显示品种代码和突破时的高点价格。第二个alertcondition()则为“低点跌破”创建了类似的警报。

指标图表与警报设置

该指标加载到图表上后,代表阶段高低点的两条线看起来是这样的:

在警报能自动触发之前,我们必须手动为这两个警报条件分别创建警报。打开图表的“创建警报”窗口,要启用“高点突破”警报,先在“条件”下拉菜单中选择我们的指标,再选择名为“高点突破”的警报条件。由于警报消息已在代码中预设好,无需修改,直接点“创建”即可。

用同样的方法为“低点跌破”警报设置,只是这次选“低点跌破”作为警报条件。设置完成后,只需等价格突破阶段高点(或跌破阶段低点)。高点突破发生时,TradingView就会弹出一条包含实时动态数据的警报消息,像这样:

至于如何在警报消息中包含像“阶段高点”这类指标算出的具体数值,后面讲“在警报条件中包含绘图值”时会介绍。

小结

标准占位符是被双大括号{{...}}包裹的特殊文本,可以插入警报消息中,警报触发时TradingView会自动把它们替换为相应的实时动态值。在指标脚本中使用标准占位符主要有两种方法:

  1. 手动配置:在“创建警报”窗口的“消息”文本框中手动输入占位符,灵活定制。
  2. 代码预设:在alertcondition()message参数中直接写入包含占位符的字符串,为警报设置一条内容丰富的默认消息。
赞(0)
未经允许不得转载:图道交易 » Pine Script(165):警报标准占位符详解与实战
分享到

评论 抢沙发

登录

找回密码

注册