量化 在 TradingView 中使用标准占位符创建动态策略警报

tradedge · 2024年04月24日 · 8 次阅读

标准占位符是双大括号之间的文本片段({{}})。将这些占位符插入到警报消息中。然后当警报生成时,TradingView 会用动态数据替换它们。生成的警报中包含当前价格、时间和成交量。

在 TradingView 中使用标准占位符与策略警报有多种方法。

标准占位符列表

策略警报消息中使用的标准占位符有以下:

  • {{ticker}} 插入生成警报的工具代码(标的名称)。
  • {{exchange}} 代表标的交易所或数据源。
  • {{interval}} 指定图表的时间间隔(即 K 线时间周期)。
  • {{close}} 包括 K 线的收盘价。这是警报触发时最新、最当前的价格。
  • {{open}} 是警报触发时所在 K 线的开盘价。
  • {{high}} 表示警报触发时所在 K 线的最高价。
  • {{low}} 是警报触发时 K 线所在的最低价。
  • {{volume}} 指示警报触发时所在 K 线的当前成交量。
  • {{time}} 代表警报生成时所在 K 线的开盘时间。
  • {{timenow}} 是警报生成时的当前时间。

带有标准占位符的策略警报

在策略警报消息中使用这些标准占位符有三种方式:

  • 在“创建警报”窗口的“消息”字段中手动输入。
  • 使用 //@strategy_alert_message 注释。
  • 以及使用订单函数的 alert_message 参数。

在“创建警报”窗口中使用占位符

第一种选择是在“创建警报”窗口中手动输入标准占位符。适用于任何策略,不需要代码更改。只需将策略添加到图表中,并打开图表的“创建警报”窗口。

假设 TradingView 应该生成每次策略模拟订单成交时的这个警报消息:

New {{strategy.order.action}} signal for {{exchange}}:{{ticker}}. Last price is {{close}}.

要创建具有此内容的警报,将策略添加到图表中,并打开“创建警报”窗口。

在该窗口中首先从“条件”下拉菜单中选择策略名称。然后在“消息”文本字段中键入我们想要的警报消息。最后,点击“创建”按钮启用警报:
手动创建带有标准占位符的 TradingView 策略警报

然后等待直到策略在实时数据上模拟一个订单成交。一旦发生入场或退出订单,TradingView 会生成一个警报消息,其中的标准占位符被动态数据替换:

带有标准占位符的 TradingView 策略警报示例

以这种方式创建策略警报时,TradingView 对每个订单成交使用相同的警报文本模版

如果不同的订单应生成不同的警报消息可以使用订单函数的 alert_message 参数与标准占位符。在讨论这种方法之前,先看看如何自定义默认的警报消息文本。

在 //@strategy_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 策略警报

一旦策略模拟一个订单成交,TradingView 会生成一个警报消息,其中的标准占位符被动态数据替换。以下是这消息提示的示例图:

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)。

这是策略在图表上的展示:
交易 SuperTrend 并附带警报消息的 TradingView 策略

订单 alert_message 占位符

使用订单函数的 alert_message 参数是第三种使用标准占位符与策略警报的方式。

alert_message 参数可以说是生成策略警报的最佳方式。因为这种方法为每个订单提供单独的警报消息。能够为开仓和平仓分别设置不同的警报消息。

  1. 创建一个包含开仓警报文本的字符串变量。并将此文本用于多头和空头入场。
  2. 创建另一个包平仓订单警报文本的字符串变量。然后将此消息用于多头和空头离场。
  3. 使用 //@strategy_alert_message 注释配置策略的警报模板。在该模板中使用 {{strategy.order.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 代码中定义的那样。

现在只需点击‘创建’按钮,实际创建策略警报:

使用订单消息中的占位符启用 TradingView 策略警报

然后我们等待策略模拟一个订单成交:

TradingView 策略警报和占位符示例标准占位符在 TradingView 策略警报中

完整 Pine 代码

//@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)

订单 alert_message 占位符

总结

  • 标准占位符是警报消息中插入的 {{ 和 }} 之间的文本片段。
  • 当警报生成时,TradingView 会用其对应的动态值替换占位符。这些占位符的示例包括 {{ticker}}、{{volume}}、{{close}} 和 {{timenow}}。
  • 三种方式创建策略警报:
    • 在‘创建警报’窗口的‘消息’字段中手动键入它们。
    • //@strategy_alert_message 注释可以包含占位符,以便它们自动出现在‘创建警报’窗口中。
    • 订单函数的 alert_message 参数可以生成带有标准占位符的消息。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号