如何将Pine Script策略脚本中的自定义变量传递到告警脚本
解决方案
之前方案失效的核心原因:你仅将动态JSON写入了订单comment参数,但告警配置时仍使用固定内容,未调用TradingView内置的占位符读取comment的动态值,因此无法拿到自定义变量,可选择以下任意一种方案解决:
方案1:基于订单comment传递变量
- 修正策略代码,确保动态JSON拼接正确,示例适配Pine Script v5,v4去掉
str.前缀即可:
mySize = 8 LongCondition = crossover(close, high[1]) // 提前拼接好告警用的JSON,方便调试 alert_content = '{"pair":"BTCUSDT","units":"' + str.tostring(mySize) + '","unitsType":"absolute","exchange":"blablabla","apiKey":"blablabla","token":"blablabla","isBuy":true,"isMarket":true}' if LongCondition strategy.entry("Long", strategy.long, qty=mySize, comment=alert_content)
- 告警配置时,删除原有固定JSON内容,将告警消息栏替换为仅保留
{{strategy.order.comment}}占位符即可,TradingView触发告警时会自动将订单的comment内容填充到消息中。
方案2:使用alert()函数直接推送(更灵活,推荐)
这种方案不需要依赖订单的comment字段,不受comment长度限制,还可单独控制告警触发频率:
- 策略代码示例:
mySize = 8 LongCondition = crossover(close, high[1]) if LongCondition strategy.entry("Long", strategy.long, qty=mySize, comment="Open") // 直接触发告警,freq可根据需求调整:once_per_bar_close 代表每根K线收盘仅触发一次 alert('{"pair":"BTCUSDT","units":"' + str.tostring(mySize) + '","unitsType":"absolute","exchange":"blablabla","apiKey":"blablabla","token":"blablabla","isBuy":true,"isMarket":true}', alert.freq_once_per_bar_close)
- 告警配置时,将告警消息栏替换为仅保留
{{message}}占位符即可,会自动读取alert函数中生成的动态内容。
注意事项
- 拼接JSON时注意引号闭合,避免格式错误导致第三方服务解析失败
- 告警触发频率需和策略运行逻辑匹配,避免重复发送订单
- 若使用Pine Script v4版本,将
str.tostring改为tostring即可
内容的提问来源于stack exchange,提问作者user17403307
相关产品推荐
相关产品推荐

