如何将Pine Script自定义变量传入TradingView警报?
在Pine Script中向TradingView警报传入自定义变量值的方法
问题描述
在Pine Script中编写脚本时,想要将自定义变量的值加入TradingView的警报内容,但发现可用的变量仅限官方提供的标准占位符和策略相关占位符,无法直接引用自定义变量,询问是否有解决办法。
已有的官方占位符包括:
标准占位符
{{ticker}} | 标的代码,例如:AAPL、EURUSD、USOIL、BTCUSD。 {{exchange}}| 标的所属交易所或数据源,如NASDAQ、OANDA、COINBASE;延迟数据名称会以‘_DL’或‘_DLY’结尾,例如:NYMEX_DL、EUREX_DLY。 {{interval}}| 警报触发时的图表时间周期。 {{close}} | 警报触发所在K线的当前收盘价(触发时的最新价格),例如:124.83、1.53923。 {{open}} | 警报触发所在K线的开盘价,例如:33453.30、1.00329。 {{high}} | 警报触发所在K线的当前最高价,例如:723.30、28.000。 {{low}} | 警报触发所在K线的当前最低价,例如:33.83、9.015。 {{volume}} | 警报触发所在K线的当前成交量,例如:228、4775,加密货币为1.15669521。 {{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。
策略相关占位符
{{strategy.position_size}} - 当前仓位规模,对应Pine中同名关键字的值。 {{strategy.order.action}} - 已执行订单的动作字符串:"buy"或"sell"。 {{strategy.order.contracts}} - 已执行订单的合约数量。 {{strategy.order.price}} - 订单的执行价格。 {{strategy.order.id}} - 已执行订单的ID(即strategy.entry、strategy.exit或strategy.order函数的第一个参数字符串)。 {{strategy.order.comment}} - 已执行订单的注释(上述订单函数的comment参数值;未指定则返回strategy.order.id的值)。 {{strategy.order.alert_message}} - 策略订单函数中设置的alert_message参数值(仅支持Pine v4及以上)。 {{strategy.market_position}} - 当前仓位的字符串形式:"long"、"flat"或"short"。 {{strategy.market_position_size}} - 当前仓位的绝对值(非负数)。 {{strategy.prev_market_position}} - 上一仓位的字符串形式:"long"、"flat"或"short"。 {{strategy.prev_market_position_size}} - 上一仓位的绝对值(非负数)。
解决方法
可以通过以下两种方式将自定义变量传入警报:
1. 指标脚本:使用alert()函数的message参数
在指标脚本中,直接在alert()函数的message参数里拼接自定义变量的值,无需依赖占位符。
示例代码:
//@version=5 indicator("自定义变量警报示例", overlay=true) // 定义自定义变量 maValue = ta.sma(close, 20) rsiValue = ta.rsi(close, 14) // 触发条件:RSI低于30且MA向上 alertCondition = rsiValue < 30 and ta.rising(maValue, 2) // 设置警报,直接在message中传入自定义变量值 alert(alertCondition, title="超买信号", message="RSI值: " + str.tostring(rsiValue) + "\n20周期MA值: " + str.tostring(maValue))
当警报触发时,会收到包含RSI和MA具体数值的消息。
2. 策略脚本:使用订单函数的alert_message参数
如果是策略脚本,除了上述alert()函数的方式,还可以在strategy.entry、strategy.exit或strategy.order函数中通过alert_message参数传入自定义变量组合的字符串。
示例代码:
//@version=5 strategy("策略自定义变量警报示例", overlay=true) // 自定义变量 atrValue = ta.atr(14) stopLossLevel = close - atrValue * 1.5 // 开多条件 longCondition = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) // 开多订单,同时设置alert_message if (longCondition) strategy.entry("Long", strategy.long, alert_message="开多信号\nATR值: " + str.tostring(atrValue) + "\n止损价位: " + str.tostring(stopLossLevel))
设置警报时选择“当策略发出订单时”,即可收到包含自定义变量的警报内容。
注意事项
- 需要使用
str.tostring()将数值型变量转换为字符串,才能拼接成消息内容。 - 消息内容支持换行符
\n,可以格式化输出更清晰的信息。
内容的提问来源于stack exchange,提问作者Evgeny Mamaev
相关产品推荐
相关产品推荐

