低代码量化:用 AI Agent + SKILL 协议实现自然语言行情查询

"给我查一下英伟达最近一个月的走势,顺便告诉我波动率有没有异常。"

这句话,你说出口用不了 5 秒。但在传统量化流程里,从写代码到跑数据再到出结果,没有两个小时下不来。

这不是在抱怨。传统量化工具链的本质是"给程序员用的",而真正需要量化能力的人——券商研究员、财经自媒体作者、主动型基金经理、甚至是一名认真做资产配置的散户——往往既没有精力从头学 Python,也不愿意在每次想验证一个想法时都要写一堆代码。

问题的根源不在于"量化太难",而在于门槛被错误地设置在了错误的位置。你本该专注于"这个策略有没有效",却被逼着先去搞定"怎么连接数据源、怎么处理时区、怎么解析 JSON"。

AI Agent 的出现改变了这道数学题。

当大模型可以理解自然语言,当 Agent 可以调用工具,当 SKILL 协议把专业能力封装成可组合的模块——低代码量化从概念变成了现实。

本文的目标很明确:让任何能用大白话描述需求的人,都能完成行情查询、异常检测、信号生成这一整个链条。而你不需要写一行代码,或者只需要写很少的代码。


一、传统量化的门槛到底有多高

在展开 AI Agent 的解法之前,我们先拆解一下传统量化的实际成本。

一个典型的量化研究流程长这样:

想法 → 数据获取 → 数据清洗 → 特征工程 → 策略回测 → 优化迭代 → 实盘对接

每个环节都是一道坎。

数据获取。你要找数据源,要写 API 调用代码,要处理认证鉴权,要处理频率限制(Rate Limit),要处理断线重连。美股数据还要考虑时区转换、前复权/后复权、财报发布后的跳空对齐。每一步都可能踩坑。

特征工程。拿到数据只是开始。你要算均线、算波动率、算订单簿特征。NumPy 和 Pandas 你得熟练,内存占用要考虑,大数据集跑起来要优化。

策略回测。你要选回测框架(Backtrader?Zipline?自研?),要处理前视偏差(Look-ahead Bias),要模拟交易成本,要处理停牌和流动性枯竭。

实盘对接。你终于验证了策略有效,然后发现实盘的行情源和回测不一样,延迟不一样,订单簿深度不一样,一切都要重新适配。

整个链条看下来,一个有 3 年经验的 Python 开发者,从零开始搭一套能跑的生产级量化系统,顺利的话也要 3-6 个月。

这就是为什么"量化"在大众认知里一直是"专业人士的专属游戏"。

但问题的本质不是"量化本身有多难",而是门槛被设置在了基础设施层,而不是认知层。你为了验证一个关于"财报后波动率是否会均值回归"的想法,要先花 80% 的时间解决"怎么拿到干净的行情数据"。

AI Agent 的思路是:让基础设施消失,让认知浮现出来。


二、AI Agent 如何重构量化流程

2.1 从"写代码调用工具"到"说需求触发工具"

传统编程模式是指令式的:你写代码,代码调用 API,API 返回数据,你处理数据。

AI Agent 的模式是意图式的:你说"查一下英伟达最近的走势",Agent 理解你的意图,Agent 决定调用什么工具、传什么参数、怎么聚合结果。

这两种模式的本质区别是什么?

指令式要求你具备"翻译能力"——把你的想法翻译成机器能理解的指令。你得知道用哪个 API、参数怎么传、返回格式怎么解析。

意图式只需要你具备"表达能力"——用自然语言描述你的需求,剩下的交给 Agent。

以一个具体场景为例:

指令式(传统)

import requests
import pandas as pd
from datetime import datetime, timedelta

# 获取 30 天前到现在的数据
end_date = datetime.now()
start_date = end_date - timedelta(days=30)

response = requests.get(
    "https://api.tickdb.ai/v1/market/kline",
    headers={"X-API-Key": os.environ.get("TICKDB_API_KEY")},
    params={
        "symbol": "NVDA.US",
        "interval": "1d",
        "start_time": int(start_date.timestamp()),
        "end_time": int(end_date.timestamp()),
        "limit": 100
    },
    timeout=(3.05, 10)
)

df = pd.DataFrame(response.json()["data"])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

意图式(Agent 模式)

用户:"查一下英伟达最近一个月的日线走势"
Agent → 识别意图:行情查询
Agent → 选择工具:TickDB kline 接口
Agent → 构造参数:symbol=NVDA.US, interval=1d, limit=30
Agent → 返回结果:图表 + 统计摘要

你只说了一句话,Agent 完成了从意图识别到工具调用到结果聚合的全部工作。

2.2 Agent 的核心能力:Function Calling

Function Calling(函数调用)是 AI Agent 实现意图式交互的技术基础。

它的原理并不复杂:大模型在理解用户输入后,不是直接生成文本回复,而是生成一个结构化的"函数调用请求"。这个请求包含函数名和参数,外部执行器负责调用真实函数,将结果返回给 Agent,Agent 再组织成自然语言回复给用户。

一个典型的 Function Calling 流程:

用户输入 → 大模型解析意图 → 生成 function_call { name: "get_kline", args: {...} }
     ↓
执行器调用真实 API
     ↓
返回原始数据
     ↓
大模型组织成自然语言回复
     ↓
用户看到:"英伟达过去一个月上涨了 18.3%,近期在 130 美元附近震荡……"

这个模式的关键价值在于:用户始终在自然语言的层面操作,而底层是精确的结构化调用。

你不需要知道用的是 TickDB 还是 Polygon,不需要知道参数是 symbol 还是 stock_code,甚至不需要知道有个叫"API"的东西存在。你的需求被 Agent 翻译成了精确的技术动作。

2.3 为什么需要 SKILL 协议

Function Calling 已经解决了"自然语言 → 函数调用"的问题,但还有一个关键问题没解决:

当你想做复杂任务时,一个函数不够用。

比如用户说:"查一下英伟达的走势,然后和道琼斯做个对比,看看这段时间谁的波动更大。"

这个需求涉及:

  1. 查询英伟达日线数据
  2. 查询道琼斯指数日线数据
  3. 计算两者的波动率指标
  4. 生成对比结论

一个 Function 不可能完成这个任务。你需要的是一个工作流编排能力:让 Agent 能够调用多个 SKILL,按顺序或并行执行,然后把结果聚合起来。

SKILL 协议就是为这个场景设计的。

SKILL 本质上是一个标准化的工具封装规范。它定义了:

  • 接口规范:输入什么、输出什么、错误怎么处理
  • 能力描述:Agent 怎么知道这个 SKILL 能干什么
  • 组合协议:多个 SKILL 之间怎么传递数据、怎么编排执行顺序

类比一下:如果 Function Calling 是"单个 API 调用",那么 SKILL 协议就是"API 的 SDK + 工作流编排协议"。它把一堆松散的函数调用,组织成了一个可复用、可组合、可被 Agent 理解的能力单元。

TickDB-market-data SKILL 就是这个协议的一个具体实现。 它把 TickDB 的行情数据能力封装成了 Agent 可以直接调用的 SKILL,包括:

  • get_kline:获取 K 线数据(支持多周期:1m/5m/15m/1h/4h/1d)
  • get_depth:获取订单簿深度(美股 1 档、港股/数字货币 10 档)
  • get_trades:获取逐笔成交(港股、数字货币)
  • get_available_symbols:查询可用的交易品种

当你安装这个 SKILL 后,Agent 就能理解"行情数据"相关的自然语言请求,并自动调用相应的接口。


三、技术实现:从自然语言到行情查询

3.1 SKILL 的安装与配置

使用 TickDB-market-data SKILL 的第一步,是在你的 AI 助手中完成安装。

不同 AI 平台的安装方式略有差异,但核心步骤一致:

  1. 在 AI 助手的插件市场或 SKILL 商店中搜索 tickdb-market-data
  2. 点击安装
  3. 配置 API Key(在 TickDB 控制台生成,存放在环境变量或 SKILL 配置中)

安装完成后,Agent 就具备了"理解行情数据请求"的能力。

这里有一个工程细节需要说明。SKILL 的配置中通常包含 API Key 的存放方式。常见的做法是:

  • 环境变量:API Key 存放在系统环境变量中,SKILL 运行时读取。这种方式安全性最高,API Key 不会出现在代码或配置文件中。
  • 加密配置:API Key 存放在 SKILL 的加密配置区,运行时解密使用。安全性次之,但配置更方便。
  • 手动输入:每次使用前手动输入 API Key。不推荐,仅用于测试。

无论哪种方式,API Key 都不应该硬编码在代码或配置文件的明文中。这是一个基本的安全工程常识。

3.2 自然语言查询的技术链路

当用户说"查一下英伟达最近一个月的走势"时,背后发生了什么?

第一步:意图识别(Intent Recognition)

Agent 的大模型部分分析用户输入,判断用户的真实意图。在 TickDB-market-data SKILL 的场景下,意图通常是:

  • get_kline:查询 K 线数据(走势)
  • get_depth:查询订单簿深度(买卖盘力量)
  • get_trades:查询逐笔成交(订单流)
  • get_available_symbols:查询可用品种

"查走势"明显属于 get_kline 意图。

第二步:实体提取(Entity Extraction)

从用户输入中提取关键实体:

  • 标的:NVDANVDA.US(需要映射到 TickDB 的品种格式)
  • 时间范围:最近一个月 → 计算起止时间戳
  • 周期:日线(未指定时默认)

第三步:参数构造(Parameter Construction)

根据提取的实体,构造 SKILL 的调用参数:

{
  "symbol": "NVDA.US",
  "interval": "1d",
  "start_time": "2024-01-15T00:00:00Z",
  "end_time": "2024-02-15T23:59:59Z",
  "limit": 35
}

第四步:API 调用(API Invocation)

Agent 调用 TickDB 的 K 线接口:

GET /v1/market/kline?symbol=NVDA.US&interval=1d&start_time=...&end_time=...&limit=35

这里涉及到一个关键技术细节:API 的可靠性保障。

生产级 API 调用必须处理以下边界情况:

边界情况 危害 正确处理方式
网络超时 请求卡死 设置 timeout(推荐 3.05s 连接超时 + 10s 读取超时)
频率超限 返回 3001 错误 读取 Retry-After 头,等待指定时间后重试
连接中断 数据获取失败 指数退避重连(delay = min(base * 2^n, max_delay))
API Key 无效 返回 1001/1002 检查环境变量或配置
品种不存在 返回 2002 调用 /available_symbols 确认品种代码

第五步:结果聚合(Result Aggregation)

API 返回原始 K 线数据,Agent 将其组织成自然语言:

"英伟达(NVDA.US)过去一个月的走势如下:

  • 起始价格:$118.50(1月15日)
  • 结束价格:$139.80(2月15日)
  • 累计涨幅:+18.0%
  • 期间最高价:$142.30(2月9日)
  • 期间最低价:$116.20(1月22日)
  • 日均振幅:2.8%

从图表看,股价在 $120-$130 区间震荡整理后,于 2 月初突破上行,成交量配合放大。"

整个过程,用户只说了一句话。

3.3 进阶查询:组合多个能力

自然语言的优势在于表达灵活。一个复杂的查询可以一次性表达:

用户:"对比一下英伟达、AMD 和英特尔最近三个月的走势,看看谁波动最大,谁收益最高。"

这个需求涉及三个标的、三项统计指标。传统方式你需要写三段代码、做三次 API 调用、写一段聚合逻辑。

在 Agent + SKILL 模式下:

用户输入
    ↓
Agent 解析意图:多标的 K 线查询 + 统计分析
    ↓
Agent 拆解为三个并行的 get_kline 调用
    ↓
并行执行,聚合结果
    ↓
计算波动率(标准差)和收益率
    ↓
生成对比报告

输出示例

标的 3个月收益率 年化波动率 夏普比率(简化)
NVDA.US +24.5% 38.2% 0.64
AMD.US +12.3% 32.1% 0.38
INTC.US -8.7% 28.5% -0.31

英伟达收益最高但波动也最大;AMD 表现稳健;英特尔表现落后,负收益且波动率未相应放大,可能是趋势性走弱。


四、生产级 SKILL 调用的工程规范

虽然 Agent 封装了技术细节,但作为 SKILL 的使用者,你仍然需要了解一些工程规范,以确保系统稳定运行。

4.1 API 调用可靠性清单

即使是通过 Agent 调用 SKILL,以下工程原则仍然适用:

1. 超时设置

所有 HTTP 请求必须设置合理的超时。推荐配置:

# 推荐:分别设置连接超时和读取超时
response = requests.get(
    url,
    headers=headers,
    timeout=(3.05, 10)  # 连接超时 3.05s,读取超时 10s
)

# 不推荐:使用默认值或无限等待
# response = requests.get(url, headers=headers)  # 危险!

为什么是 3.05 秒?RFC 7231 建议超时时间略大于 3 秒,以区分"真正的慢响应"和"网络抖动"。

2. 频率限制处理

TickDB API 有请求频率限制(Rate Limit)。当触发限制时,返回 3001 错误码,并携带 Retry-After 头:

if response.status_code == 429:
    retry_after = int(response.headers.get("Retry-After", 5))
    time.sleep(retry_after)
    # 重试请求

3. 错误处理与降级

API 可能因为各种原因失败。完善的错误处理应该:

def handle_tickdb_error(response, symbol=None):
    """TickDB 标准错误处理"""
    code = response.get("code", 0)
    
    if code == 0:
        return response.get("data")
    
    error_map = {
        1001: "API Key 无效,请检查环境变量 TICKDB_API_KEY",
        1002: "API Key 缺失,请在环境中设置 TICKDB_API_KEY",
        2002: f"交易品种 {symbol} 不存在,请确认品种代码",
        3001: "请求频率超限,请降低调用频率",
    }
    
    if code in error_map:
        raise ValueError(error_map[code])
    
    raise RuntimeError(f"未知错误 {code}: {response.get('message')}")

4.2 数据清洗的必要性

TickDB 返回的 K 线数据是清洗过的,但在使用时仍需注意:

注意事项 处理方式
时间戳时区 TickDB 返回 UTC 时间戳(毫秒),使用时需转换为本地时区
前复权 vs 后复权 根据策略需求选择,趋势策略通常用前复权
停牌日 跳过或填充(根据策略需求)
财报跳空 保留原始数据,标记事件日期

4.3 常见陷阱与避坑指南

陷阱一:用 /kline/latest 做历史回测

/kline/latest 返回当前周期的 K 线(未结束),不适合做历史回测。正确做法是使用 /kline 并传入 start_timeend_time

陷阱二:忽略美股交易时间

美股盘前(04:00-09:30 ET)和盘后(16:00-20:00 ET)有独立交易时段,数据和盘中高低价可能不同。实盘策略需要考虑这一点。

陷阱三:品种代码格式错误

TickDB 使用统一格式:标的.交易所。美股是 .US(如 AAPL.US),港股是 .HK(如 0700.HK),数字货币是 .BINANCE(如 BTC.USDT.BINANCE)。


五、低代码量化的实际价值

5.1 场景一:财经自媒体快速核实数据

财经自媒体的痛点不是"没有观点",而是"核实数据太慢"。

你写了一篇分析英伟达财报的文章,需要核实几个数据:"Q4 营收同比增长了多少""毛利率是多少""管理层指引是什么"。传统方式你要去 SEC 扒 10-K,去财报电话会记录里找引语,去多个数据源交叉验证。

有了 Agent + SKILL:

用户:"帮我核实一下英伟达最新财报的关键数据:营收增长、毛利率、管理层指引"
Agent → 调取 K 线数据(观察财报后走势)→ 调取基本面数据(如果有)→ 返回摘要

你从"到处找数据"变成了"说一句话,Agent 帮你找"。

5.2 场景二:券商研究员快速验证想法

券商研究员的痛点是"想法太多,验证太慢"。

你有一个关于"财报后隐含波动率变化"的假设,想快速看看过去几次财报的实际数据是否符合你的预期。传统方式你要找期权数据、算隐含波动率、画图、做统计。

有了 Agent + SKILL:

用户:"分析一下过去一年英伟达、苹果、微软每次财报后5天内波动率的变化规律"
Agent → 识别财报日期 → 调取财报前后K线 → 计算历史波动率变化 → 生成报告

你的时间从"几天"压缩到"几分钟"。

5.3 场景三:个人投资者建立自己的分析框架

个人投资者的痛点是"没有工具,没有数据"。

你想建立一套自己的选股逻辑:每天早上看一眼自选股的夜间期货走势、盘前异动、关键支撑阻力位。传统方式你要盯盘、要手动查数据、要自己做记录。

有了 Agent + SKILL:

用户:"我的自选股是 AAPL TSLA NVDA MSFT,帮我生成每只股票今天的早间简报"
Agent → 批量调取数据 → 生成结构化简报

你从"手忙脚乱盯盘"变成了"每天花 2 分钟看 Agent 生成的简报"。


六、价值对比:不同方案的门槛差异

维度 传统量化(自研) 使用通用 AI Agent + SKILL
技术门槛 需熟练 Python + 金融知识 需写 Prompt 仅需自然语言
数据获取 自行对接多个数据源 AI 可能编造数据 实时结构化数据
分析深度 可定制所有细节 受限于 AI 能力 可调用专业工具
稳定性 依赖个人代码质量 受限于 AI 幻觉率 SKILL 提供确定性
学习曲线 3-6 个月 1-2 周 1 天
适用场景 专业量化团队 快速概念验证 低代码量化分析

Agent + SKILL 的核心价值不是"替代专业量化",而是"让量化能力民主化"。它把原本需要专业团队才能完成的事情,下放给每个有想法的人。


七、快速上手指南

7.1 安装步骤

  1. 注册 TickDB 账号:访问 tickdb.ai,完成注册
  2. 生成 API Key:在控制台生成,妥善保存
  3. 安装 SKILL:在你的 AI 助手中搜索并安装 tickdb-market-data
  4. 配置 API Key:将 API Key 存入环境变量或 SKILL 配置

7.2 快速验证

安装完成后,用以下问题测试 SKILL 是否正常工作:

"查一下苹果公司(AAPL.US)最近5天的日线走势"

正常返回应该是:5 天的 OHLCV 数据 + 简要统计。

如果返回错误,检查:

  • API Key 是否正确配置
  • 品种代码是否正确(美股需要 .US 后缀)
  • 是否触发频率限制(等待后重试)

7.3 进阶用法

多标的对比

"帮我对比特斯拉、比亚迪、蔚来的最近一个月走势和成交量变化"

异动监控

"设置一个监控:如果英伟达单日涨跌幅超过5%,立即通知我"

技术指标

"在英伟达的日线图上标注出最近一次MACD金叉和死叉的位置"

结语

量化的本质不是"写代码",而是"处理信息、形成观点、做出决策"。

代码只是工具,不是目的。

当 AI Agent + SKILL 协议把技术门槛降到足够低,你终于可以把注意力放回真正重要的事情上:你的想法、你的逻辑、你的判断

至于数据怎么获取、API 怎么调用、格式怎么解析——那些是 Agent 和 SKILL 的工作,不是你的。


下一步行动

如果你想亲手体验低代码量化

  1. 访问 tickdb.ai 注册(免费,无需信用卡)
  2. 在 AI 助手中安装 tickdb-market-data SKILL
  3. 用自然语言问一个问题,开始你的第一次查询

如果你想了解更多 SKILL 能力

  • 查看 TickDB 文档中心,了解完整的 API 能力
  • 关注 TickDB 公众号,获取 SKILL 使用案例和最佳实践

如果你是有开发能力的用户

  • 访问 tickdb.ai/developers 了解 API 文档
  • 参考 GitHub 上的示例代码,快速集成 TickDB 数据

本文不构成任何投资建议。市场有风险,投资需谨慎。