回测数据不用自己读:tradingview-mcp 一键生成策略绩效报告
发布时间:2026/10/9 18:40:27 锦皓数字建站

回测数据不用自己读tradingview-mcp 一键生成策略绩效报告【免费下载链接】tradingview-mcpAI-assisted TradingView chart analysis — connect Claude Code to your TradingView Desktop for personal workflow automation项目地址: https://gitcode.com/GitHub_Trending/tra/tradingview-mcp写完一段 Pine Script 策略在 TradingView 里点下「Strategy Tester」看着那一串数字——净利润、胜率、盈利因子、最大回撤——然后呢绝大多数人的下一步是把这些数字手动抄进笔记或表格再对着屏幕截图反复肉眼解读。这个「抄写 肉眼解读」的环节恰恰是策略研究链条里最枯燥、也最容易出错的环节数据复制不完整、指标口径理解偏差、回撤到底多大才算危险全凭感觉。tradingview-mcp 这个开源项目把这一步彻底自动化了它通过 Chrome DevTools Protocol 直接读取本地 TradingView Desktop 内部运行时暴露的策略数据源把 Strategy Tester 面板里的指标、最近交易明细和权益曲线原样取出来交给 AI再由 AI 按照预置的分析框架输出一份结构化的绩效报告——从「人肉抄表」变成「一键出报告」。本文基于仓库源码拆解这条数据管线是怎么搭起来的以及拿到数据后如何正确解读。Strategy Tester 数据提取与权益曲线读取数据从哪来不是抓屏幕是读内部运行时tradingview-mcp 的架构是Claude Code ←→ MCP Server (stdio) ←→ CDP (localhost:9222) ←→ TradingView Desktop (Electron)。它不连接 TradingView 的服务器、不拦截网络流量而是通过 Electron 自带的调试接口直接调用图表内部对象。策略数据的读取逻辑集中在 src/core/data.js对外暴露三个 MCP 工具定义见 src/tools/data.jsdata_get_strategy_results— 读取总体绩效指标净利润、胜率、盈利因子、最大回撤等data_get_trades— 读取交易明细列表默认最近 20 笔data_get_equity— 读取权益曲线数据点这三者在 CLI 里也有对应命令tv data strategy、tv data trades --max 30、tv data equityJSON 输出可直接用jq继续加工src/cli/commands/data.js。策略识别一个踩过三次坑的判断逻辑TradingView 内部一个策略strategy和一个指标indicator在运行时都是 data source怎么区分仓库里的FIND_STRATEGY_JS写得很直白var mi s.metaInfo ? s.metaInfo() : null; var isStrat mi (mi.isTVScriptStrategy || mi.is_strategy); if ((isStrat || typeof s.reportData function) typeof s.reportData function) { strategies.push({ s: s, name: mi ? mi.description : null }); }代码注释里记录了一个关键教训早期版本用is_price_study false来识别策略但实际策略的is_price_study是true这个错误判断把策略全部排除了对应 issue #48/#173/#181。现在的写法以isTVScriptStrategy/is_strategy为准并兜底兼容任何暴露reportData的对象。还有个更隐蔽的坑当图上挂了多个策略时只有用户在 Strategy Tester 面板里选中的那个策略reportData才被真正计算过。所以findStrategy()不是盲目返回第一个策略而是优先挑出report.performance非空的那个避免读到一份空的错误报告。前置保障自动开面板、自动取消隐藏TradingView 有两个「反直觉」行为是回测数据读取最常见的失败源面板没打开报告不计算——Strategy Tester 面板关闭时TradingView 不会为策略生成reportData策略被隐藏报告永远不计算——图例里被叉掉隐藏的策略看起来和「面板没打开」一模一样其实压根不会出数据。ensureStrategyTesterReady()把这俩问题一并解决src/core/data.jsvar bwb window.TradingView window.TradingView.bottomWidgetBar; if (bwb typeof bwb.showWidget function) bwb.showWidget(backtesting); return unhideStrategies();它先强制打开底部backtesting面板再把隐藏的策略自动设为可见unhideStrategies()会返回被恢复的策略名随后轮询等待reportData填充完毕最长 6 秒。因此工具返回结果里如果出现unhidden_strategies字段说明它替你做了「取消隐藏」这个动作——这是写报告前数据就绪的前提。指标映射与交易明细getStrategyResults()从report.performance里抽取指标字段名与 Strategy Tester 面板的 Key stats 对齐src/core/data.jsvar metrics { net_profit: all.netProfit, net_profit_percent: all.netProfitPercent, gross_profit: all.grossProfit, gross_loss: all.grossLoss, profit_factor: all.profitFactor, max_drawdown: perf.maxStrategyDrawDown, max_drawdown_percent: perf.maxStrategyDrawDownPercent, total_trades: (all.numberOfWiningTrades || 0) (all.numberOfLosingTrades || 0), winning_trades: all.numberOfWiningTrades, losing_trades: all.numberOfLosingTrades, percent_profitable: all.percentProfitable, avg_trade: all.avgTrade, largest_win: all.largestWinTrade, largest_loss: all.largestLosTrade, commission_paid: all.commissionPaid, sharpe_ratio: perf.sharpeRatio, sortino_ratio: perf.sortinoRatio, buy_hold_return: perf.buyHoldReturn, open_pl: perf.openPL };交易明细则从ordersData()取最近total - limit之后的一段默认 20 笔并把 TradingView 内部紧凑的字段名tp/b/e/p/q/tm翻译成可读形式type入场/出场、sidebuy/sell、entry、price、qty、time_indexsrc/core/data.js。取尾部而不是头部是因为「最近发生的交易」才是当前策略行为最该关注的对象。权益曲线方面getEquity()优先取reportData.equity或equityChart的逐 bar 数据如果 API 层没有直接暴露逐 bar 曲线则退而返回buyHold买入持有基准线的点数并明确提示「用data_get_strategy_results获取汇总 PL」——也就是说工具宁可诚实告诉你「曲线取不到」也不会拿买入持有线冒充策略权益曲线。截图作为视觉证据数字之外报告还需要视觉上下文。src/core/capture.js 的captureScreenshot支持region: strategy_tester通过定位[data-namebacktesting]或[class*strategyReport]元素用 CDP 精确裁剪 Strategy Tester 面板区域保存为 PNG。数据 截图双通道AI 既看得到数字也看得到原始界面形态便于交叉核对。让 AI 输出结构化绩效报告与改进建议一套预设的报告流水线数据工具只解决「取数」真正把数据变成报告的是仓库里的技能定义。skills/strategy-report/SKILL.md定义了一条完整的五步流水线Gather Data依次调用data_get_strategy_results、data_get_trades、data_get_equity、chart_get_state、symbol_info把指标、交易、权益曲线、当前品种与周期全部收集齐Capture Visuals分别对chart和strategy_tester两个区域截图Analyze从三个维度分析——关键指标净利、胜率、盈利因子、最大回撤、平均交易、Sharpe、最大连亏、交易明细最大盈利/亏损笔、盈亏比、多空分解、持仓时间、权益曲线形态是否平滑向上、有无长期回撤段、盈利是均匀分布还是集中在前后段Generate Report输出固定模板的结构化报告Suggest Improvements基于规则给出可执行的改进建议。配套的agents/performance-analyst.md进一步定义了分析框架盈利能力净利、盈利因子、平均交易、一致性胜率、最大连亏、权益曲线平滑度、风险最大回撤、最差交易、风险调整后收益、以及「边缘质量」——高胜率配小盈利和低胜率配大盈利是两种完全不同的策略性格。报告模板长什么样SKILL 中给出的输出格式如下## Strategy Report: [Strategy Name] **Symbol:** [symbol] | **Timeframe:** [tf] | **Period:** [date range] ### Summary [1-2 sentence overview of performance] ### Key Metrics | Metric | Value | |--------|-------| | Net Profit | ... | | Win Rate | ... | | Profit Factor | ... | | Max Drawdown | ... | ### Strengths - [bullet points] ### Weaknesses - [bullet points] ### Recommendations - [specific actionable improvements]规则化的改进建议SKILL 里最值钱的是把「改进建议」沉淀成了可判定的规则AI 拿数据直接对号入座胜率低于 50% 但盈利因子大于 1 → 建议收紧入场条件最大回撤超过 20% → 建议调整仓位或止损盈利因子低于 1.2 → 策略可能需要在根本上重做交易次数太少 → 建议扩大回测区间或放宽入场标准。这些阈值不是拍脑袋而是量化研究里的通用经验值回撤 20% 是许多资管风控的红线盈利因子 1.2 以下意味着策略毛利几乎被摩擦成本吃光。回测解读的常见误区与指标口径说明数据自动化之后真正的考验在解读。仓库源码里的字段名和 SKILL 里的分析维度恰好暴露了回测解读中最常见的几个误区。误区一胜率高 策略好percent_profitable胜率是最常被误读的指标。SKILL 明确给出了判断组合胜率低于 50% 但盈利因子大于 1反而是健康趋势策略的典型特征——它靠少数大盈利覆盖多数小亏损盈亏比大于 1 才是关键。反过来高胜率 微薄盈利平均盈利远小于平均亏损意味着策略可能在「捡硬币」一次大亏就能抹掉几十次小胜。解读时一定要把胜率和盈亏比放在一起看而不是单看胜率。误区二最大回撤只看绝对值max_drawdown与max_drawdown_percent是两个量纲前者是账面最大回撤金额后者是相对净值峰值的百分比。跨品种、跨资金规模比较时金额毫无意义必须看百分比。同时回撤的定义是「从净值峰值到随后谷底的落差」——一个权益曲线一路创新高、只在末期出现一次回撤的策略和一个全程反复深蹲的策略即使最大回撤百分比相同交易体验和风险特征也完全不同。这就是 SKILL 要求评估「权益曲线是否平滑向上、有无长期回撤段」的原因。误区三拿平均交易衡量单笔风险avg_trade平均每笔盈亏掩盖了分布。仓库特意单独抽出largest_win最大盈利笔和largest_loss最大亏损笔并在 SKILL 的交易分析环节要求比较「平均盈利 vs 平均亏损」的盈亏比——因为一只策略的平均值可能被某笔极端交易拉高单看平均值会高估稳定性。最大亏损笔尤其重要它直接决定单笔风险是否在可承受范围。误区四忽视基准线buy_hold_return买入持有收益是仓库里一个常被忽略的字段。回测净值翻倍不一定是策略的功劳——如果同期买入持有也涨了 80%超额收益只有 20%。不把策略收益和买入持有基准对齐就无法判断「赚的是策略的钱还是市场的钱」。SKILL 的权益曲线评估要求检查「盈利是均匀分布还是集中在前后段」本质也是在排查这种幸存者偏差。误区五交易样本太少就下结论SKILL 的建议规则里有一条经常被跳过的交易次数太少时建议扩大回测区间或放宽入场标准。几十笔交易的样本胜率、盈利因子都谈不上统计显著性任何结论都可能是噪声。仓库把data_get_trades默认限制在 20 笔MAX_TRADES 20是为了控制上下文体积但这也提醒使用者20 笔只能看「最近的交易行为」不能当总体样本。指标口径的最后一道保险还有一类坑来自数据来源本身面板没开、策略被隐藏、报告未计算完成都会让取数工具返回空结果或错误。仓库的处理方式是「自动打开面板 自动取消隐藏 轮询等待 返回unhidden_strategies提示」而getStrategyResults()的error字段会明确告诉你当前是「图上没有策略」「报告未计算」还是其他失败原因src/core/data.js。e2e 测试tests/e2e.test.js也把这三个工具的用例标注为panel-dependent——读取回测数据前面板状态本身就是数据链路的一部分。小结把 Strategy Tester 从「看完手动抄」变成「AI 自动读 自动分析」靠的是三层设计CDP 层读取 TradingView 内部运行时含自动开面板、取消隐藏、轮询就绪等反脆弱处理、MCP 层暴露三个结构化取数工具、技能层把指标口径和分析规则固化进 SKILL 模板。数据链路诚实取不到就说取不到不拿基准线冒充策略曲线解读框架有规则可循胜率与盈亏比联动、回撤看百分比、对照买入持有基准、样本量决定结论强度。下次回测完直接让 AI「读取策略绩效并生成报告」剩下的事情——取数、算指标、画权益曲线评估、给改进建议——都交给这条已经打通的数据管线。【免费下载链接】tradingview-mcpAI-assisted TradingView chart analysis — connect Claude Code to your TradingView Desktop for personal workflow automation项目地址: https://gitcode.com/GitHub_Trending/tra/tradingview-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。