标准占位符是双大括号之间的文本片段({{ 和 }})。将这些占位符插入到警报消息中。然后当警报生成时,TradingView 会用动态数据替换它们。生成的警报中包含当前价格、时间和成交量。
在 TradingView 中使用标准占位符与策略警报有多种方法。
策略警报消息中使用的标准占位符有以下:
在策略警报消息中使用这些标准占位符有三种方式:
第一种选择是在“创建警报”窗口中手动输入标准占位符。适用于任何策略,不需要代码更改。只需将策略添加到图表中,并打开图表的“创建警报”窗口。
假设 TradingView 应该生成每次策略模拟订单成交时的这个警报消息:
New {{strategy.order.action}} signal for {{exchange}}:{{ticker}}. Last price is {{close}}.
要创建具有此内容的警报,将策略添加到图表中,并打开“创建警报”窗口。
在该窗口中首先从“条件”下拉菜单中选择策略名称。然后在“消息”文本字段中键入我们想要的警报消息。最后,点击“创建”按钮启用警报:
然后等待直到策略在实时数据上模拟一个订单成交。一旦发生入场或退出订单,TradingView 会生成一个警报消息,其中的标准占位符被动态数据替换:
以这种方式创建策略警报时,TradingView 对每个订单成交使用相同的警报文本模版
如果不同的订单应生成不同的警报消息可以使用订单函数的 alert_message 参数与标准占位符。在讨论这种方法之前,先看看如何自定义默认的警报消息文本。
第二种使用标准占位符与策略警报的方法是将它们编码在 //@strategy_alert_message 注释中。
这个特殊的注释定义了在“创建警报”窗口的“消息”字段中显示的警报消息。这会改变策略的默认警报消息文本。这使得配置警报变得更加简单和快速,特别是当多个标的或 K 线时间周期使用相同的警报模版的场景。
假设我们想要使用以下警报消息:
SuperTrend {{strategy.order.action}} signal for {{exchange}}:{{ticker}} at {{close}} price.
在策略代码的某个地方添加 //@strategy_alert_message 注释。(建议写在版本注释和 strategy() 函数之间。)
将以下这行 //@strategy_alert_message 代码添加到策略脚本中:
//@strategy_alert_message SuperTrend {{strategy.order.action}} signal for {{exchange}}:{{ticker}} at {{close}} price.
其余代码不需做改变。
接下来保存策略并将其添加到图表上,然后打开图表的“创建警报”窗口。
在该窗口中,在“条件”下拉菜单中选择策略。会自动填充“消息”字段,使用 //@strategy_alert_message 注释中提供的文本。现在只需点击“创建”按钮启用警报:
一旦策略模拟一个订单成交,TradingView 会生成一个警报消息,其中的标准占位符被动态数据替换。以下是这消息提示的示例图:
如果你对带有 //@strategy_alert_message 注释的完整策略感兴趣,可以查看以下代码。(如果不需要了解策略警报的工作原理,可以跳过这部分。)
//@version=5
//@strategy_alert_message SuperTrend {{strategy.order.action}} signal for {{exchange}}:{{ticker}} at {{close}} price.
strategy(title="Standard placeholders with alert comment",
overlay=true, default_qty_type=strategy.percent_of_equity,
default_qty_value=15)
// 获取 14 条 SuperTrend(带有 2.75 ATR 倍数)的方向
[supertrend, stDirection] = ta.supertrend(2.75, 14)
// 绘制 SuperTrend
plot(stDirection < 0 ? supertrend : na, color=color.green,
style=plot.style_linebr, linewidth=2, title="上涨趋势")
plot(stDirection < 0 ? na : supertrend, color=color.red,
style=plot.style_linebr, linewidth=2, title="下跌趋势")
// 当 SuperTrend 方向发生变化时提交多头和空头交易
if stDirection < 0 and stDirection[1] > 0
strategy.entry("做多", strategy.long)
if stDirection > 0 and stDirection[1] < 0
strategy.entry("做空", strategy.short)
这个策略以 //@version=5 版本注释开始。然后包括 //@strategy_alert_message 注释。
接下来,strategy() 函数使用多个参数配置策略。title 命名脚本。overlay 在图表上显示脚本。default_qty_type 和 default_qty_value 指定默认订单大小的类型和数量。
之后,ta.supertrend() 函数使用 2.75 的平均真实范围(ATR)倍数计算 14 条 SuperTrend 值。将其值存储在 supertrend 变量中。stDirection 变量跟踪 SuperTrend 的上/下方向。
然后,plot() 函数在图表上显示 SuperTrend。第一个 plot() 调用以绿色(color.green)显示上涨趋势。第二个 plot() 调用以红色(color.red)显示下跌趋势。两者使用条件运算符(?:)决定要绘制的内容。由于这会产生不连续的数据,将数据绘制为带有断点的线(plot.style_linebr)。
接下来的两个 if 语句生成策略的订单。当 stDirection 变量的当前值为负,而其前一个值为正时,SuperTrend 是否从下跌趋势转为上涨趋势。在这种情况下,strategy.entry() 函数会开启一个多头交易(strategy.long)。
另一个 if 语句寻找 SuperTrend 的卖出信号。条件为当 stDirection 为正,而之前为负时 strategy.entry() 会开启一个空头交易(strategy.short)。
这是策略在图表上的展示:
使用订单函数的 alert_message
参数是第三种使用标准占位符与策略警报的方式。
alert_message 参数可以说是生成策略警报的最佳方式。因为这种方法为每个订单提供单独的警报消息。能够为开仓和平仓分别设置不同的警报消息。
首先,我们编写一个包含入场订单警报文本的字符串:
// 指定新入场交易的警报文本
alertEntryMessage = "New MACD {{strategy.order.action}} signal for " +
"{{ticker}}. Price is {{close}} with {{volume}} volume."
这个 alertEntryMessage 字符串变量的值包含几个占位符。将此变量与 strategy.entry() 函数的 alert_message 参数一起使用。这个订单函数开仓。假设我们有以下代码:
// 当 MACD 穿越其零线以上时做多
if ta.crossover(macdLine, signalLine) and macdHist > 0
strategy.entry("进入多头", strategy.long,
alert_message=alertEntryMessage)
// 当 MACD 穿越其零线以下时做空
if ta.crossunder(macdLine, signalLine) and macdHist < 0
strategy.entry("进入空头", strategy.short,
alert_message=alertEntryMessage)
这个第一个 if 语句进行了两次比较。首先,ta.crossover() 函数查看 macdLine 变量是否穿过 signalLine 变量。另一个测试是 macdHist 变量是否大于(>)零。
and 运算符连接了这两个比较。因此两者必须同时发生。同时发生时,if 条件为真,strategy.entry() 函数入场做多(strategy.long)。将这个入场订单的警报消息设置为之前的 alertEntryMessage 变量。这样每个多头入场都会使用该变量中的文本。
第二个 if 语句对空头入场做了类似的事情。首先,ta.crossunder() 函数查看 macdLine 是否穿过 signalLine。接下来,条件 macdHist 低于(<)零。当这两个条件同时满足时,strategy.entry() 入场做空(strategy.short)。将 alert_message 参数设置为 alertEntryMessage 变量。因此,空头入场也使用该文本作为其警报消息。
到目前为止,我们已经为入场订单设置了警报消息。现在为离场订单做同样的事情。为了定义消息,可以使用一个字符串变量,如下所示:
// 定义离场订单的警报文本
alertExitMessage = "MACD Exit. Close {{ticker}} position at {{close}}."
这个 alertExitMessage 变量包含两个标准占位符:{{ticker}} 和 {{close}}。将这个变量与两个离场订单函数一起使用。
// 当 MACD 柱状图连续下降 3 个柱时平多头交易
if ta.falling(macdHist, 3)
strategy.close("进入多头", comment="离场多头",
alert_message=alertExitMessage)
// 当 MACD 柱状图连续上升 3 个柱时平空头交易
if ta.rising(macdHist, 3)
strategy.close("进入空头", comment="离场空头",
alert_message=alertExitMessage)
第一个 if 语句使用 ta.falling() 函数测试 macdHist 变量是否连续三根 K 线下降。当条件成立函数返回 true。调用strategy.close() 函数空单平仓。将 alert_message 参数设置为之前设置的 alertExitMessage 变量。这样这个订单使用我们之前设置的警报文本。
第二个 if 语句使用 ta.rising() 函数检查 macdHist 变量是否连续三根 K 线上升。当条件满足,执行 strategy.close() 函数讲空单平仓。这里的 alert_message 参数也是之前设置的 alertExitMessage 变量。
现在我们已经在入场和离场订单中包含了 alert_message 参数,让我们添加一个最终的策略特性。
alert_message 参数的要求是,在启用警报时,在‘创建警报’窗口中输入 {{strategy.order.alert_message}} 占位符。这告诉 TradingView 应在策略的警报消息中使用 alert_message 参数中的字符串。否则,TradingView 将忽略订单函数指定的警报消息。
但是,在‘创建警报’窗口中手动输入这个文本很容易忘记。而且我们策略的用户也需要记住这一点。因此,让我们让策略自动使用 {{strategy.order.alert_message}}。
策略使用 //@strategy_alert_message 注释定义其标准警报模板。因此在策略代码中添加以下代码:
//@strategy_alert_message {{strategy.order.alert_message}}
这告诉 TradingView 策略的警报模板应包含 {{strategy.order.alert_message}}。这样,策略在生成的每个警报消息中插入 alert_message 参数的值。
代码完成后,我们保存策略并将其添加到图表上。然后打开图表的‘创建警报’窗口。在那里,我们首先在‘条件’下拉菜单中选择策略脚本。一旦这样做,TradingView 将在‘消息’字段中更新 {{strategy.order.alert_message}} 占位符 - 就像我们在 //@strategy_alert_message 代码中定义的那样。
现在只需点击‘创建’按钮,实际创建策略警报:
然后我们等待策略模拟一个订单成交:
//@version=5
//@strategy_alert_message {{strategy.order.alert_message}}
strategy(title="Standard placeholders with order message")
// Calculate Moving Average Convergence/Divergence (MACD)
[macdLine, signalLine, macdHist] = ta.macd(close, 12, 26, 9)
// Plot MACD data
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.orange, title="Signal Line")
plot(macdHist, color=color.new(color.blue, 60),
style=plot.style_columns, title="MACD Histogram")
// Specify the alert text for new entry trades
alertEntryMessage = "New MACD {{strategy.order.action}} signal for " +
"{{ticker}}. Price is {{close}} with {{volume}} volume."
// Go long when MACD crosses above its signal line above zero
if ta.crossover(macdLine, signalLine) and macdHist > 0
strategy.entry("Enter Long", strategy.long,
alert_message=alertEntryMessage)
// Go short when MACD crosses below its signal line beneath zero
if ta.crossunder(macdLine, signalLine) and macdHist < 0
strategy.entry("Enter Short", strategy.short,
alert_message=alertEntryMessage)
// Define the alert text for exit orders
alertExitMessage = "MACD Exit. Close {{ticker}} position at {{close}}."
// Close long trades when the MACD histogram falls 3 bars in a row
if ta.falling(macdHist, 3)
strategy.close("Enter Long", comment="Exit Long",
alert_message=alertExitMessage)
// Exit short trades when the MACD histogram rises 3 bars in a row
if ta.rising(macdHist, 3)
strategy.close("Enter Short", comment="Exit Short",
alert_message=alertExitMessage)