如何在TradingView策略警报中获取syminfo.basecurrency?遇取值失败
TradingView策略警报获取syminfo.basecurrency失败的解决方案
问题分析
策略警报的模板变量存在访问范围限制,syminfo.basecurrency这类图表级内置变量无法直接在警报模板中调用,必须通过策略脚本主动传递该值到警报上下文;同时你的JSON模板存在语法错误,会导致解析失败。
具体解决步骤
1. 修正JSON模板语法错误
原模板中BaseCurrency行末尾缺少逗号,且未给变量值加引号,先修正:
{ "Quantity":"0.05", "OrderType":"PYS", "BaseCurrency":"{{syminfo.basecurrency}}", "Symbol":"{{ticker}}", "Exchange":"{{exchange}}", "Price":"{{strategy.order.price}}", "Side":"{{strategy.order.comment}}" }
注:这一步仅修正语法,仍无法解决变量取值问题,需配合以下脚本修改。
2. 在Pine Script策略中传递基础货币值
使用v5版本的Pine Script,在策略代码中提取syminfo.basecurrency,并通过strategy.custom_alert_message将其传递到警报模板:
//@version=5 strategy("自定义策略", overlay=true) // 提取基础货币 base_currency = syminfo.basecurrency // 触发警报时传递数据(替换condition为你的实际触发条件) if (condition) // 将需要的字段序列化为JSON字符串传递 alert_data = json.stringify({ baseCurrency=base_currency, ticker=ticker, exchange=exchange }) strategy.custom_alert_message(alert_data)
3. 修改警报模板使用传递的值
将模板中的{{syminfo.basecurrency}}替换为从custom_alert_message中提取的字段:
{ "Quantity":"0.05", "OrderType":"PYS", "BaseCurrency":"{{custom_alert_message.baseCurrency}}", "Symbol":"{{custom_alert_message.ticker}}", "Exchange":"{{custom_alert_message.exchange}}", "Price":"{{strategy.order.price}}", "Side":"{{strategy.order.comment}}" }
如果TradingView模板不支持直接访问JSON属性,也可以在脚本中单独传递基础货币字符串:
strategy.alert_message(base_currency)
然后模板中用{{alert_message}}替换:
"BaseCurrency":"{{alert_message}}",
关键说明
- TradingView策略警报模板仅支持有限的内置变量,大部分
syminfo系列变量需要通过脚本显式传递。 - 确保使用Pine Script v5版本,v4的
strategy.alert相关语法与v5不同。
内容的提问来源于stack exchange,提问作者start with a
相关产品推荐
相关产品推荐

