资讯动态

TradingView警报批量创建工具:对接3Commas自动化交易实战

发布时间:2026/10/20 8:02:53 来源:尧图企业网站定制
简介这是一款基于TypeScript开发的TradingView警报批量添加工具专为使用3Commas等交易平台进行自动化交易的量化用户设计。由于TradingView官方未提供批量添加警报的API用户往往需要手动维护数十甚至数百个交易对的提醒该工具借助自动化测试框架驱动内置Chromium浏览器自动登录账户并批量录入自定义警报显著降低重复劳动。资源包共18个文件约13.9MB包含5个TypeScript源码文件、4个JSON配置与依赖文件、1个YAML示例配置、1个CSV黑名单文件以及演示GIF、操作截图、部署脚本和说明文档覆盖从环境配置到实际运行的完整流程。目前已有1447人学习下载。通过阅读源码与示例配置读者可以理解自动化操作网页的工程思路掌握警报批量生成、交易对筛选与配置文件定制的方法并参考演示动图快速验证效果适合具备一定TypeScript基础、希望提升交易自动化效率的开发者。1. 批量警报这件事手动点真的会点到手抽筋如果你在用 TradingView 做多品种监控又恰好把信号往 3Commas 这类自动化工具上对接那你大概率经历过这个场景十几个币对、每个币对要挂三四条警报一条一条点开对话框、填价格、选条件、粘贴 Webhook 消息点完一轮半小时没了改一个参数还得从头再来。更崩溃的是TradingView 的警报面板本身不支持批量导入官方也没有开放批量创建的入口纯靠手速和耐心。add-tradingview-alerts-tool就是冲着这个痛点来的。它是一个用 TypeScript 写的命令行工具核心能力是把你写在配置文件里的警报规则批量灌进 TradingView 的警报列表并且消息体格式专门为 3Commas 的 TV 警报集成做了适配。换句话说它解决的不是「怎么发信号」而是「怎么把几十条警报一次性建好、改好、删干净」。适合的人群很明确手里有多个交易对、用 TradingView 做信号源、下游接 3Commas 或类似自动化平台的量化从业者和半自动交易玩家。如果你只盯一两个币手动点两下更省事这工具对你价值不大。2. 先搞懂它怎么绕过 TradingView 的批量限制2.1 它不是调官方 API而是驱动浏览器TradingView 并没有对外开放「创建警报」的公共 API所以这个工具走的是另一条路用 Puppeteer 驱动一个真实的 Chromium 浏览器模拟你登录后的操作把警报一条条填进去。这也是为什么它必须拿到你的登录态——没有登录态浏览器打开的就是个游客页面警报按钮根本点不动。理解这一点很关键因为它决定了后面所有的配置逻辑。工具本身不存储你的账号密码它依赖的是浏览器会话Cookie 和 localStorage。常见做法是让它启动一个带界面的浏览器你手动登录一次会话就留在那个浏览器 profile 目录里后续脚本复用这个目录就不用反复登录。这个设计的好处是绕开了 API 限制坏处是——TradingView 前端一改版选择器就可能失效这是这类工具的通病后面避坑章节会细说。从技术栈看TypeScript 保证了配置项和警报对象有类型约束你在写配置文件时如果字段名拼错、类型不对编译阶段就能报出来而不是等到运行时浏览器里一片空白。对批量操作来说这种提前校验能省掉大量「跑了一半发现第 7 条格式错了」的返工。2.2 警报规则长什么样配置文件结构拆解工具的核心输入是一份警报定义文件通常是 JSON 或 TS 模块。每条警报需要描述清楚作用在哪个品种、什么条件下触发、消息体发什么。下面是一个贴近 3Commas 集成场景的配置示例字段名以工具实际约定为准这里用来说明结构{ alerts: [ { symbol: BINANCE:BTCUSDT, condition: crossing, price: 65000, message: {\action\:\buy\,\symbol\:\BTCUSDT\}, expiration: none }, { symbol: BINANCE:ETHUSDT, condition: crossing, price: 3200, message: {\action\:\buy\,\symbol\:\ETHUSDT\}, expiration: none } ] }逻辑说明alerts数组里每一条对应 TradingView 警报面板里的一行。symbol必须用 TradingView 的交易所前缀格式比如BINANCE:只写BTCUSDT是找不到品种的这是新手第一个翻车点。condition对应触发条件crossing是穿越还有greater_than、less_than等。price是触发价。message是警报触发时推送给 Webhook 的内容3Commas 要求它是合法 JSON 字符串所以这里做了转义。参数说明expiration控制警报有效期none表示不过期也可以填具体时间。批量场景下建议统一设成none或统一到期时间否则管理起来会很乱。message里的字段要和 3Commas 那边 Bot 的接收格式对齐字段名对不上警报触发了下游也不认。2.3 从零跑通环境准备与首次执行先把项目拉下来装依赖。Node 版本建议用当前 LTS太老的版本 Puppeteer 可能装不上。git clone 项目仓库地址 cd add-tradingview-alerts-tool npm installnpm install这一步会顺带下载 Puppeteer 绑定的 Chromium国内网络环境下这一步可能比较慢耐心等或者配置镜像源。装完之后先别急着批量跑用工具提供的登录/调试模式启动一次浏览器npm run start -- --login具体脚本名以项目 package.json 为准核心是找到那个「打开浏览器让你登录」的入口。浏览器起来后手动登录 TradingView确认能看到警报面板。然后关掉会话就留在 profile 目录里了。接着执行批量创建npm run start -- --config ./alerts.json逻辑说明第一次带--login是为了建立会话后续正常执行复用会话。如果你的配置里警报很多建议先拿两三条试跑确认浏览器里真的建出来了再上全量。参数上--config指向你的警报定义文件路径别写错相对路径是相对项目根目录而不是你当前终端所在目录。提示首次跑通后去 TradingView 警报面板数一下条数和配置文件里的数量对一遍。数量对不上八成是某条symbol格式不对被跳过了。3. 把警报消息对接上 3Commas格式与字段对齐3.1 3Commas 要的 Webhook 消息长什么样3Commas 的 TV 警报集成本质是它给你一个 Webhook URLTradingView 警报触发时往这个 URL POST 一段消息3Commas 解析这段消息来决定买还是卖、操作哪个 Bot。所以message字段不是随便写的它得符合 3Commas 的解析规则。常见的最小消息体大概是这样{ action: buy, symbol: BTCUSDT }有些场景还会带上bot_id、amount之类的字段具体取决于你在 3Commas 那边怎么配的。关键点是TradingView 的警报消息框里这段内容必须是合法 JSON且字段名和 3Commas 期望的完全一致。大小写、下划线、拼写错一个字符下游就静默失败——它不会报错只是不执行这种「黑匣子」式的沉默最坑人。3.2 用模板批量生成消息体别手写几十条警报手写 JSON 消息出错概率极高。合理做法是在配置文件生成阶段就用脚本拼。下面这段 TypeScript 演示怎么根据品种列表批量生成警报对象消息体自动拼装interface AlertConfig { symbol: string; price: number; action: buy | sell; } function buildAlert(cfg: AlertConfig) { // 消息体必须是字符串形式的 JSON供 TradingView 原样推送 const message JSON.stringify({ action: cfg.action, symbol: cfg.symbol.split(:)[1], // 去掉交易所前缀3Commas 只认纯品种名 }); return { symbol: cfg.symbol, condition: crossing, price: cfg.price, message, expiration: none, }; } const list: AlertConfig[] [ { symbol: BINANCE:BTCUSDT, price: 65000, action: buy }, { symbol: BINANCE:ETHUSDT, price: 3200, action: buy }, ]; const alerts list.map(buildAlert); console.log(JSON.stringify({ alerts }, null, 2));逻辑说明buildAlert把业务层的品种、价格、方向转换成工具需要的警报结构。注意symbol.split(:)[1]这一步——TradingView 那边要带交易所前缀3Commas 那边通常只要纯品种名两个系统的格式要求不一样在生成阶段就切开避免消息体里带前缀导致下游不认。参数上action用联合类型约束写错编译就报错。3.3 验证警报是否真的生效建完警报不等于万事大吉。TradingView 的警报有「已触发」和「未触发」状态你可以在警报面板看到。更靠谱的验证方式是把触发价设成当前价附近等它触发一次去 3Commas 那边看有没有收到。或者直接在 TradingView 警报日志里看推送记录。如果警报建出来了但 3Commas 没反应按这个顺序排查先看 TradingView 警报日志里 Webhook 有没有发出去发了说明 TradingView 侧没问题再看 3Commas 的 Webhook 日志有没有收到收到但没执行就是消息体字段对不上最后核对message里的 JSON 是不是被 TradingView 转义坏了。这三步能把问题定位到具体环节比盲目重试高效得多。4. 避坑与排查那些让我重跑好几遍的坑4.1 现象脚本跑完浏览器里一条警报都没有原因最常见的是会话失效。你上次登录的 Cookie 过期了脚本启动的浏览器其实是未登录状态警报按钮点不动但脚本可能不报错静默跳过。其次是选择器失效——TradingView 前端改版工具里写死的 CSS 选择器对不上元素了。解决先手动跑一次--login重新建立会话确认登录态有效。如果登录了还是不行打开浏览器的开发者工具看工具操作时到底卡在哪一步对比当前页面的元素结构。选择器失效属于工具维护层面的问题只能等更新或自己改选择器这也是这类浏览器驱动方案的固有代价。4.2 现象警报建出来了但品种是错的或空的原因symbol格式不对。TradingView 要求交易所:品种的完整格式只写BTCUSDT它匹配不到或者匹配到了默认交易所但和你预期不符。解决在 TradingView 搜索框里手动搜一次你要的品种看它显示的完整代码是什么照抄进配置。不同交易所的同一品种代码可能不同别想当然。4.3 现象警报触发了3Commas 毫无反应原因消息体 JSON 格式问题。要么字段名和 3Commas 期望的不一致要么 JSON 在 TradingView 里被转义破坏要么symbol带了交易所前缀导致下游不认。解决把message字段单独拿出来用 JSON 校验工具验一遍。然后对照 3Commas 的 Webhook 文档核对字段名。品种名在消息体里去掉前缀这个前面提过是高频错误。4.4 现象批量跑到一半中断前面建的重跑会重复原因脚本没有幂等性中断后重跑会把已经建过的警报再建一遍警报列表里出现重复条目。解决跑之前先清空或记录已建条目。稳妥做法是分批跑每批跑完去面板确认再跑下一批。如果工具支持删除模式先用删除清干净再全量重建比增量补更可控。这也是为什么建议先小批量试跑——中断的代价你能承受。4.5 现象npm install卡在 Chromium 下载原因Puppeteer 安装时会下载一个 Chromium 二进制网络不畅时卡住或超时。解决配置 npm 镜像源或者设置环境变量跳过下载、复用系统已装的 Chrome。具体做法是设置PUPPETEER_SKIP_DOWNLOAD并指定可执行文件路径让工具用你本机的浏览器。这一步能省掉不少等待时间。5. 进阶把警报配置纳入版本管理用脚本一键重建跑到后面你会发现真正有价值的不是「建一次警报」而是「警报配置可复现、可版本管理」。市场结构变了、品种换了、触发价要整体上移你需要的是一份能 diff、能回滚的配置而不是一堆散落在 TradingView 面板里的手工条目。我的习惯是把警报定义拆成两层一层是「品种与参数」的数据文件一层是生成警报的脚本。数据文件进 Git每次调整都有记录脚本负责把数据转成工具要的格式。这样换台机器、换个账号拉下代码跑一遍就能重建全部警报。下面是一个把参数外置的写法import * as fs from fs; // 参数外置改价格不用动逻辑代码 const params JSON.parse(fs.readFileSync(./params.json, utf-8)); const alerts params.symbols.flatMap((s: any) [ { symbol: s.tvSymbol, condition: crossing, price: s.buyPrice, message: JSON.stringify({ action: buy, symbol: s.plainSymbol }), expiration: none, }, { symbol: s.tvSymbol, condition: crossing, price: s.sellPrice, message: JSON.stringify({ action: sell, symbol: s.plainSymbol }), expiration: none, }, ]); fs.writeFileSync(./alerts.json, JSON.stringify({ alerts }, null, 2));逻辑说明params.json里每个品种配好tvSymbol带前缀、plainSymbol纯品种、buyPrice、sellPrice脚本用flatMap给每个品种生成买、卖两条警报。参数说明flatMap而不是map是因为每个品种要展开成多条用map会得到嵌套数组。生成结果写回alerts.json再交给工具执行。验证方法上我一般会做一次「空跑」先生成配置人工核对条数和品种确认无误再真正执行创建。重建流程则是先用工具的删除能力清空旧警报或手动清再跑生成脚本再跑创建脚本最后去面板抽查几条。这套流程走顺了调整一次全量警报的时间能从半小时压到几分钟。注意删除操作不可逆清空前一定确认配置已经生成好、且内容正确。我吃过一次亏——配置还没生成完就清了旧警报结果中间断了面板空了一段时间只能从头补。从那以后我每次动警报配置都强制走一遍「生成 → 人工核对 → 清空 → 重建 → 抽查」这五步再急也不跳步。希望这套流程能帮到你少走点我踩过的弯路。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑