ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

TradingView MCP实战:让AI助手获取实时行情与技术指标

TradingView MCP实战:让AI助手获取实时行情与技术指标 先说一下我为什么会对 tradingview-mcp 这个项目上瘾。过去一年我搭过不少 AI Agent最头痛的问题不是模型能力不够而是模型拿不到实时、准确的外部数据。你想让大模型分析一段行情它就只会盯着静态文本说空话。后来 MCPModel Context Protocol出来后这个局面被彻底改变了。MCP 相当于给大模型配了一套工具箱而 tradingview-mcp 就是其中专门对接 TradingView 数据能力的那只箱子。它可以把行情报价、K 线历史、技术指标、甚至带图表的分析结果直接喂给 Claude、Cursor、Codex 这些 AI 客户端。这篇文章我会把整个项目从架构设计到代码落地再到常见的坑完整梳理一遍写给自己复盘也写给准备开工的朋友。1. 背景与定位为什么需要 tradingview-mcp1.1 MCP 是什么以及它解决了什么问题MCP 是 Anthropic 在 2024 年提出的模型上下文协议名字听着很抽象但你把它类比成 AI 世界的 USB-C 接口就很好理解了。以前的 AI 工具链是“每个模型私有插件”你要用 OpenAI 的插件就得二次开发要用 LangChain 的工具又得包一层生态割裂。MCP 定了统一标准一边是 MCP Host就是 Claude Desktop、Cursor、Codex CLI 这类能跑大模型的应用另一边是 MCP Server提供数据/工具能力的独立服务两边通过 JSON-RPC 通信。Host 去调用 Server 暴露出来的工具就像你往电脑上插一个 U 盘就能直接读数据不用管里面是什么文件系统。我实际跑通一遍的核心感受是MCP 的价值不是“能调工具”而是把工具从“写死在代码里”变成了“运行时动态发现”。模型先请求服务端的工具列表再根据任务自动选择合适的工具和参数完全由模型自主编排。这意味着只要把 tradingview-mcp 加进任意支持 MCP 的客户端模型自然就拥有了访问 TradingView 行情的能力不需要为每个客户端各写一套集成代码。1.2 TradingView 接入 MCP 的三个高频痛点在动手之前我先回答一个最朴素的问题直接用浏览器看 TradingView 不行吗为什么非要绕一圈。我的结论是日常手工看盘可以但一旦涉及 AI 分析、策略复现、批量数据处理手动操作就有几个绕不开的痛点。第一个痛点是数据获取不连续。你在浏览器里看到的价格是一个静态数字模型读不到背后的历史序列想要算 20 日均线还得自己复制好几个时间点的数据错一步就对不上。第二个痛点是工具切换成本高。你在 TradingView 里画好图表再切到 ChatGPT 去问分析结论等于把上下文硬生生截断。第三个痛点是自动化能力缺失。当我想做一个定时监控脚本让 AI 在某个指标触发时自动提醒用人工盯盘根本做不到。把 TradingView 封装成一个 MCP Server 后这些痛点全部归位数据以标准 JSON 进入模型上下文指标计算交给独立服务层AI 可以按调度任务自主拉取和处理行情。1.3 这个项目适合谁来参考我把话撂在前面tradingview-mcp 不适合所有人。如果你是刚接触编程、还不理解 HTTP 和 JSON 的新手我建议你先补一点基础否则下面的代码可能会看晕。但如果你属于下面任何一类这个项目会很值得你花一晚上跑通已经在用 Claude Desktop、Cursor、Codex 等 AI 编程工具想给它们增加行情分析能力的人。经常需要批量分析多品种走势但不想手动打开 TradingView 网页的人。想搭建“AI 量化助手”或“行情监控机器人”需要一个稳定数据源的人。对 MCP 协议本身感兴趣想找一个能落地的业务示例来学习的开发者。我下面分享的实现方案不依赖任何收费 API也不是爬虫硬刚网页而是走 TradingView Charting Library 的标准数据接口 UDF。这一层是给开发者做集成用的返回的是干净 JSON稳定性和可维护性都靠谱得多。2. 整体设计TradingView 数据能力如何映射到 MCP2.1 架构拆解与模块边界一个完整的 tradingview-mcp 项目我习惯分成四个模块数据适配层、指标计算层、MCP 服务层、客户端接入层。它们各自职责明确边界清晰出了问题也好排查。数据适配层负责从 TradingView 的 UDF 接口获取行情数据并统一成我们内部的数据结构。这个模块是整个项目的底层依赖我会单独用一个类来处理避免把 HTTP 请求逻辑散落在各个工具函数里。指标计算层接收适配层吐出来的 DataFrame计算 MA、RSI、MACD、布林带等常用技术指标。MCP 服务层是核心负责用 FastMCP 定义工具把上面两层的能力暴露成可供模型调用的函数。客户端接入层则是 Claude Desktop、Cursor 等具体程序里的配置文件。我之所以坚持分层是因为实际开发中遇到过一个很尴尬的问题一开始图省事直接在工具函数里写了几个 HTTP 请求结果后面想增加缓存、重采样、错误重试每个函数都要改一遍代码冗余到想重写。分层之后改动数据源只需动适配层切换客户端只需动配置文件互不影响。2.2 为什么选 UDF 协议而不是其他方案做 TradingView 数据接入摆在我面前有三条路线我最终选了 UDF咱们来对比一下。第一是 TradingView 官方 REST API。这个门槛比较高主要面向合作伙伴申请流程长而且接口权限需要商务对接个人开发者如果只是自己用很难拿到。第二是浏览器自动化用 Playwright 这类工具模拟登录、抓取网页。可行但你会被验证码和前端反爬折磨到怀疑人生而且脚本一更新就得跟着调。第三就是 UDFUniversal Data Feed协议它是 TradingView 图表库内置的标准数据交换协议专门给第三方数据源喂数据用接口定义公开返回 JSON。你做本地分析、接自己的行情源完全够用了。用 UDF 还有一个额外的好处它天然面向历史 K 线和时间序列每个接口都有明确的参数约定。比如 history 接口返回的 bars 包含 time、open、high、low、close、volume 字段格式统一解析起来非常省事。相比另起炉灶自己爬页面UDF 是“官方通道”合规性和稳定性都高了不止一个档次。2.3 需要暴露哪些 MCP 工具MCP 层的核心是工具设计工具就是给 AI 的“技能按钮”。我把 tradingview-mcp 的能力抽象成下面五个工具大家可以根据自己场景增删search_symbol搜索交易对返回代码、交易所、类型等基础信息帮模型确认用户输入的是什么品种。get_quote获取当前实时报价包括最新价、涨跌幅、成交量、最高最低价等适合快问快答。get_klines获取某个交易对的历史 K 线支持调整时间周期和拉取数量是技术分析的基础设施。get_technical_indicators在指定 K 线上计算技术指标输出指标值序列模型可以直接拿来分析。get_chart_snapshot把 K 线和指标渲染成图表图片保存为本地文件并返回可读取路径方便在客户端里展示给用户看。安排这五类工具是我跑了好多场景后总结出来的最小集合。搜索是入口报价是实时状态K 线是历史事实指标是分析逻辑图表是可视化表达。少了任何一个模型说想“看看走势”都会变扭。3. 环境准备与依赖安装3.1 Python 版本与虚拟环境我推荐 Python 3.10 及以上版本因为 FastMCP 和 Pydantic v2 对 3.10 的支持最稳定类型注解写起来也舒服。我自己开发时用的是 uv 管理器命令简单速度也快。如果你不熟悉 uv用 python -m venv 创建虚拟环境也一样但后面装依赖时记得先激活虚拟环境避免污染全局环境。python -m venv .venv source .venv/bin/activate激活以后用 pip 安装下面这些核心库pip install fastmcp httpx pandas numpy ta matplotlib解释一下每个库的用途。fastmcp 是 MCP Server 的 Python 框架装饰器一写就能暴露工具比自己手写 JSON-RPC 省太多事。httpx 负责异步 HTTP 请求用来访问 UDF 接口。pandas 和 numpy 处理时间序列数据ta 负责技术指标计算matplotlib 用于把图表渲染成 png。没有一项是多余的。3.2 准备一个可用的 UDF 数据源这一步是整个项目最容易让人卡住的地方。TradingView 官方图表库里的 UDF 地址通常是 https://demo_feed_data.tradingview.com/ 这种在线 demo但公共 demo 并发有限而且不稳定。更靠谱的方式是找支持 UDF 协议的行情服务商或者自己用本地数据文件模拟一个数据源。为了让你能完整体验流程我建议前期先用一个可以充当 UDF 的公共数据源或者自己写一个简单的 HTTP 服务做 mock。下面是一个极简的 UDF mock 服务返回真实 K 线生成逻辑方便你先把 MCP 流程跑通from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware import random, time, ujson app FastAPI() app.add_middleware(CORSMiddleware, allow_origins[*], allow_methods[*], allow_headers[*]) def make_bars(symbol: str, resolution: str, count: int 500): base_price random.uniform(50, 150) bars [] now int(time.time()) // 60 * 60 step int(resolution) * 60 for i in range(count, 0, -1): price base_price random.uniform(-3, 3) bars.append({ time: now - i * step, open: round(price, 2), high: round(price * 1.02, 2), low: round(price * 0.98, 2), close: round(price * 1.01, 2), volume: random.randint(100, 10000) }) return bars app.get(/config) def config(): return {supports_search: True, supports_group_request: False, supports_marks: False} app.get(/symbols) def symbols(symbol: str): return {symbol: symbol, description: symbol, type: stock, exchange: MOCK} app.get(/history) def history(symbol: str, resolution: str, from_: int 0, to: int 0): return {status: ok, bars: make_bars(symbol, resolution)} app.get(/quotes) def quotes(symbols: str): syms symbols.split(,) data {} for s in syms: price random.uniform(50, 150) data[s] {v: {lp: price, ch: round(price * 0.01, 2), chp: 1.0, volume: 1000}} return {status: ok, d: data}这个 mock 的数据是随机的但格式完全符合 UDF 规范。这样做的意义是先把协议链路验证通后面只要换成真实数据源代码几乎不用改。你如果已经有靠谱的 UDF 地址把它配到环境变量 DATA_FEED_URL 里就行。4. 核心代码实现从 UDF 到 MCP 工具4.1 数据适配层实现我先写数据适配层的核心类它负责与 UDF 服务通信并把返回结果规范化。一个地方需要注意UDF 的 history 接口返回的时间戳是秒级pandas 默认用纳秒我在解析时直接除以 1000 统一成秒后面做图表就会省很多脑子。import httpx import pandas as pd class TradingViewFeed: def __init__(self, base_url: str http://localhost:8000): self.base_url base_url.rstrip(/) async def fetch_symbols(self, query: str): async with httpx.AsyncClient() as client: resp await client.get(f{self.base_url}/symbols, params{symbol: query}) resp.raise_for_status() return resp.json() async def fetch_history(self, symbol: str, resolution: str, limit: int 500): async with httpx.AsyncClient() as client: to int(pd.Timestamp.now().timestamp()) from_ int(to - limit * 60 * int(resolution)) resp await client.get( f{self.base_url}/history, params{symbol: symbol, resolution: resolution, from: from_, to: to} ) resp.raise_for_status() payload resp.json() if payload.get(status) ! ok: raise ValueError(fUDF history error: {payload}) bars payload.get(bars, []) df pd.DataFrame(bars) if df.empty: return df df[time] pd.to_datetime(df[time], units, utcTrue) df df.set_index(time) return df[[open, high, low, close, volume]]为什么要写成异步因为 MCP Server 同时可能被多个客户端调用如果同步阻塞一个品种的数据拉慢了其他请求都得排队。异步配合 httpx 的 AsyncClient能让吞吐量明显提升。接下来是指标计算层。我基于 ta 库封装了一个统一入口接收 DataFrame 和指标名称返回每个指标的键值序列。这里的“序列”不直接返回全部历史而是计算一个“当前值”加“最近几期趋势”因为大模型的上下文有限塞 500 根 K 线它消化不了但 20 期趋势它一眼就能看出意义。import ta INDICATOR_ALIAS { ma5: lambda df: ta.trend.sma_indicator(df[close], window5), ma20: lambda df: ta.trend.sma_indicator(df[close], window20), rsi14: lambda df: ta.momentum.rsi(df[close], window14), macd: lambda df: ta.trend.macd_diff(df[close]), boll_upper: lambda df: ta.volatility.bollinger_hband(df[close]), boll_lower: lambda df: ta.volatility.bollinger_lband(df[close]), } def compute_indicator(df: pd.DataFrame, name: str, limit: int 30): if name not in INDICATOR_ALIAS: raise ValueError(funsupported indicator: {name}) series INDICATOR_ALIAS[name](df).dropna() if series.empty: return {indicator: name, data: [], note: 数据不足} recent series.tail(limit) return { indicator: name, data: [ {time: ts.strftime(%Y-%m-%d %H:%M), value: round(float(v), 4)} for ts, v in recent.items() ] }4.2 用 FastMCP 暴露工具给 AI数据适配层和指标计算层都准备好了接下来就是高光时刻用 FastMCP 把它们包装成 MCP 工具。这部分是项目能否跑起来的关键装饰器里的描述信息要尽可能写细因为模型是靠这些描述来理解工具用途的描述写得模糊模型就不敢乱调。from fastmcp import FastMCP mcp FastMCP(tradingview-mcp) feed TradingViewFeed() mcp.tool() async def search_symbol(query: str) - dict: 搜索TradingView中的交易品种返回代码、交易所和基础信息。 参数query支持股票代码、商品名称或英文关键词。 try: return await feed.fetch_symbols(query) except Exception as e: return {error: str(e)} mcp.tool() async def get_klines(symbol: str, resolution: str 1D, limit: int 200) - dict: 获取指定交易品种的历史K线。 resolution支持1,5,15,30,60,240,1D,1W等单位limit控制返回根数。 df await feed.fetch_history(symbol, resolution, limit) if df.empty: return {symbol: symbol, bars: []} bars [ { time: ts.strftime(%Y-%m-%d %H:%M), open: round(float(row[open]), 4), high: round(float(row[high]), 4), low: round(float(row[low]), 4), close: round(float(row[close]), 4), volume: int(row[volume]), } for ts, row in df.iterrows() ] return {symbol: symbol, resolution: resolution, count: len(bars), bars: bars} mcp.tool() async def get_technical_indicators(symbol: str, resolution: str 1D, indicators: list[str] None) - dict: 计算指定品种的技术指标indicators为指标名称列表。 支持ma5, ma20, rsi14, macd, boll_upper, boll_lower。 indicators indicators or [ma20] df await feed.fetch_history(symbol, resolution, limit300) result {symbol: symbol, resolution: resolution, indicators: {}} for name in indicators: result[indicators][name] compute_indicator(df, name) return result mcp.tool() async def get_quote(symbol: str) - dict: 获取最新报价包含最新价、涨跌幅、成交量。响应快适合实时问答。 async with httpx.AsyncClient() as client: resp await client.get(f{feed.base_url}/quotes, params{symbols: symbol}) resp.raise_for_status() payload resp.json() quote payload.get(d, {}).get(symbol, {}) return {symbol: symbol, quote: quote.get(v, {})}这一步跑通后你可以在终端执行 fastmcp run tradingview_mcp.py 来做测试FastMCP 会启动一个标准输入输出的 MCP Server等待客户端连接。别小看这一步很多人卡在“客户端找不到服务”上多半就是 Server 没有正常启动或者没有以 stdio 模式运行。4.3 图表快照生成图表能力是最容易出效果的一个工具我单独拎出来讲。它的原理不复杂用 matplotlib 把 K 线和指标画成一张 png保存到本地临时目录然后返回文件路径。MCP 客户端拿到路径后可以直接用 markdown 图片语法展示给用户。import matplotlib matplotlib.use(Agg) import matplotlib.pyplot as plt import matplotlib.dates as mdates mcp.tool() async def get_chart_snapshot(symbol: str, resolution: str 1D, limit: int 180) - dict: 生成K线成交量的图表快照返回本地图片路径。 df await feed.fetch_history(symbol, resolution, limit) if df.empty or len(df) 10: return {error: K线数据不足无法绘图} fig, ax plt.subplots(figsize(12, 6)) close df[close] ax.plot(df.index, close, color#1E90FF, linewidth1.5, labelClose) ma20 ta.trend.sma_indicator(close, window20) ax.plot(df.index, ma20, color#FF8C00, linewidth1.2, labelMA20) ax.legend() ax.set_title(f{symbol} {resolution} Chart) ax.xaxis.set_major_formatter(mdates.DateFormatter(%m-%d)) ax.grid(True, alpha0.3) out_path f/tmp/tradingview_mcp_{symbol}_{resolution}.png fig.savefig(out_path, dpi120, bbox_inchestight) plt.close(fig) return {image_path: out_path, note: 可以使用 markdown 图片语法展示该文件}这里有几个月的教训想分享matplotlib 默认后端是 GUI 界面在服务器或无显示器环境会直接抛错所以必须设置 matplotlib.use(Agg)。图片保存路径最好是绝对路径并且要确保 MCP 客户端进程有权限读取这个目录。如果你在 Windows 上用 Cursor路径可能要用文件协议格式 file:///C:/... 才能正确显示。5. 客户端接入与实测效果5.1 在 Cursor 和 Claude Desktop 中配置 MCP服务端跑通以后接入客户端往往才是大家最容易卡住的地方。以 Cursor 为例它支持项目级别的 MCP 配置文件。打开项目根目录的 .cursor/mcp.json把下面这段放进去{ mcpServers: { tradingview-mcp: { command: python, args: [tradingview_mcp.py], env: { DATA_FEED_URL: http://localhost:8000 } } } }注意 command 字段建议填写绝对路径我遇到过因为 shell 环境变量不同导致 Cursor 找不到 python 的情况。args 里的脚本路径同理也不要写成相对路径否则启动时容易定位失败。配置好以后在 Cursor 的命令面板里找 MCP 相关按钮重新加载服务然后在对话里直接输入“帮我拉取 AAPL 最近一天的 K 线算一下 RSI 和 20 日均线”如果一切正常你会看到模型调用了 tradingview-mcp 的一系列工具然后给你输出一段分析。Claude Desktop 的配置方式也类似编辑 claude_desktop_config.json把同样的 server 配置填进去重启桌面应用即可。FastMCP 通过标准输入输出与宿主通信宿主启动时会自动拉起子进程不需要额外手工启动服务。5.2 实测 Prompt 与返回效果展示我实测下来最顺手的用法是让 AI 做“数据拉取-指标计算-结论输出”三步走。比如我输入“BTCUSDT 最近 30 天日线算 MA20 和 RSI14然后根据趋势判断当前偏多还是偏空。”模型会自动完成以下步骤先 get_klines 拉数据再 get_technical_indicators 计算最后基于返回值回顾。它的输出会比较有条理比如“当前价格低于 MA20且 RSI 处于 45 附近短期动能偏弱需要进一步观察”。虽然我不建议完全听 AI 的结论做交易但作为信息整合工具它确实比手动翻网页快得多。另一个让我觉得值回票价的功能是图表快照。我把“给 BTCUSDT 画一张包含 MA20 的日线图并标出最近高点”这个指令丢给它模型依次调用 get_klines、get_chart_snapshot最后在对话里直接返回了一张 png 图片。对于写投资复盘文章或者做路演材料的人来说这个能力能省掉不少重复劳动。5.3 多品种对比分析场景MCP 的多工具编排能力还有一个非常实用的场景多品种横向对比。你可以让 AI 同时拉取几个品种的行情指标然后整理成对比表。做法并不复杂直接描述你的需求“请分别拉取 AAPL、MSFT、GOOGL 最近的日线数据计算 MA20 和 RSI14生成一张对比表标注每个品种当前趋势强弱。”模型会按照参数命名规则循环调用 get_ta_indicator 三次。为了不让同一个大品种的多个请求把数据源压垮我在服务端加了一个简单的 TTLCache 缓存5 秒内同一个 symbolresolution 直接命中缓存实测下来重复请求的响应时间从秒级降到了毫秒级。这个优化非常关键模型有时候会“重复调用同一个函数两次”有缓存兜底用户体验不会太糟糕。6. 常见问题与排查技巧实录6.1 MCP 连接超时这个问题我几乎每天都能在几个交流群里看到报错类似 “MCP client for codex_apps timed out after 30 seconds”。原因常见有三种一是 MCP Server 启动太慢Python 首次导入 pandas、ta 库可能要几秒钟如果机器性能差30 秒超时会不够。二是服务端在首次启动时尝试联网访问 UDF 数据源而数据源响应慢导致整个初始化过程超过客户端阈值。三是 stdio 模式下子进程的输出内容不规范把调试日志 print 到了 stdout干扰了协议通信。我的排查思路是先用命令行直接运行 python tradingview_mcp.py观察进程是否能稳定常驻。然后在 server 入口用 logging 把日志输出到文件别打 stdout。最后在客户端把超时时间从 30 秒调到 60 秒如果确实是因为冷启动慢这样能立竿见影。如果你用的是 FastMCP它自带 health 指令可以在客户端配置里加一个验证步骤确保工具列表能被正确枚举。6.2 UDF 数据源返回空 K 线这个问题在真实数据源上更常见。你检查 /history 接口发现返回了 status: ok 但 bars 是空数组多半是因为时间参数的问题。UDF 协议要求用 Unix 秒级时间戳而且 from 必须小于 to。如果数据源对历史区间有限制比如只保留最近 30 天而你请求了 500 根日 Kfrom 已经超出数据源的支持范围它就返回空。解决方案是在 fetch_history 里对 limit 做一次合理性限制。我默认把日线 limit 限制在 365 以内分钟线限制在 1000 以内。同时在代码里记录请求的 from/to 范围排查时一眼能看出来是否越界。还有一个容易踩的坑是时区时间戳是 UTC如果你换算成本地时间再传给数据源很可能整天数据都错位。6.3 技术指标结果对不上 TradingView 网页很多朋友刚跑通时都会遇到一个问题本地用 RSI 算出来的值跟 TradingView 网页上显示的数值不一样。这太正常了。根因主要是参数差异。TradingView 默认 RSI 用 Wilder 平滑ta 库很多版本默认用 Simple Moving Average 平滑两者结果会有差异。MACD 也有 fast/slow/signal 三组参数跟网页默认(12,26,9)不一致就会偏离。解决办法是查阅 ta 库文档明确指定平滑方法和窗口。RSI 用 ta.momentum.rsi(close, window14, fillnaFalse) 基本能对上。如果还差一点点检查你取的 K 线根数指标前几根会有 warmup 效应要确保满足最少计算长度。我一直建议后续做策略分析时不要苛求指标数值跟网页完全一致而是关注变化趋势和信号方向毕竟不同数据源之间本来就有细微差异。6.4 常见问题速查表我把实际遇到的高频问题和对应解法整理成一个表格方便你之后快速定位。表格里的问题顺序也是我开发功能的自然顺序。现象可能原因处理建议MCP 连接超时服务冷启动慢或客户端超时短增大超时冷启动后可加预加载server 启动无响应Python 解释器找不到或路径错误使用绝对路径并检查环境变量数据源报 404UDF 接口地址配置错误检查 base_url 和 /history 路径返回 K 线为空from/to 越界或 data range 限制调整 limit并确认时间戳为 UTC指标值与网页不符平滑方式或窗口参数不同统一指标参数参考文档设置图表无法显示matplotlib 非 Agg 后端在导入 pyplot 前设置 use(Agg)中文乱码字体不支持中文设置 matplotlib 中文字体或使用英文标题stdout 日志干扰调试 print 输出了协议数据把日志写入文件不要 print6.5 调试小技巧用 MCP Inspector 验证如果你觉得客户端配置太黑盒可以用 FastMCP 自带的 Inspector 来做可视化调试。启动命令很简单fastmcp run tradingview_mcp.py --transport stdio它会自动打开一个本地网页左侧是 MCP Server 暴露的工具列表右侧可以直接传参数调用工具返回结果都看得清清楚楚。我平时开发新工具时一定会先用 Inspector 跑一遍确认输入输出都没问题再去接 Cursor 或 Claude Desktop。这样能把“客户端集成问题”和“服务端逻辑问题”彻底隔离开排查效率高很多。7. 写在最后一点个人扩展心得这个项目做到后面我最大的体会是MCP 真正改变的不是代码架构而是人跟 AI 协作的方式。以前我想让 AI 分析行情需要先写脚本导出数据再贴到对话里反复调 prompt。现在只要把 tradingview-mcp 挂在客户端模型自己就知道什么时候该去拉数据、拉哪个周期的数据、算哪几个指标。这种“数据随叫随到”的感觉才是 AI Agent 该有的样子。如果你想继续扩展我个人建议优先考虑两个方向。一是把实时推送能力加进去UDF 有 quotes 轮询接口可以做成一个定时任务让模型在达到某个条件时主动发通知。二是接入回测引擎把 get_klines 拉到的历史数据直接灌进 backtesting.py 或 vectorbt让 AI 不仅能分析现状还能粗略回测策略。当然金融数据和分析工具都存在误差和延迟任何结论都要自己二次确认不要盲目相信 AI 输出。技术上踩稳每一步业务上留一分余地这个项目就能越用越顺手。
返回列表