谷歌开放AI自建应用:让AI写跨市场行情App要过12关

TickDB Research ·

让 AI 写一个跨市场行情面板只要两分半,模拟数据下一切正常;接上真实接口,第一屏全是“数据获取失败”。我用同一个 AI 写了5份行情代码:不给资料的3份,在适用的检查项里错了27处;先让它查一遍真实接口的2份,只错1处。这是一份让 AI 写行情 App 的全景指南,12道关,附提示词模板和自检脚本。

10月13日,谷歌宣布:美国18岁以上的用户,可以用 Google AI Studio 让 AI 做一个只给自己用的 App,直接通过 Google Play 运行;之后还能分享给信任的朋友,想公开上架,要先过安全审核。谷歌负责人的说法是,Play 商店要从“总有一个 App 适合这件事”变成“总有一个 App 是给我的”。

国内也一样热。证券时报9月28日报道,券商正在成批上线智能体;一家大模型公司给数十家头部金融机构的方案,把“权威数据源”放在了第一位。柯林斯词典早在2025年就把“vibe coding”(凭感觉写代码)选为年度词汇。

人人都能让 AI 写 App 了。可如果你让 AI 写的是一个行情 App,“只给自己用”也不安全,它算错的是你的钱。

我做了一个实验。同一个主流 AI 编程助手,三段老板、产品经理、个人投资者都会说的普通需求,一共写了5份行情代码:

  • 不给任何资料的3份,对照真实接口逐项检查,适用的30项里错了27项;
  • 写之前先让它通过 MCP 查一遍真实接口的2份,适用的20项里只错了1项。

不给资料的那3份,AI 在交付说明里都老老实实写着一句话:路径、参数、字段,“都是我猜的”。

image.png

AI 写得出能跑的行情 App,写不出知道自己在显示什么的行情 App。它缺的不是编程能力,是两样东西:你接的接口长什么样,行情数字背后的规则是什么。

这篇写给想用 AI 做行情产品的老板、产品经理和开发者,也写给想让 AI 帮自己写盯盘脚本的投资者。读完你能带走:

  1. 一次5份代码的对照实验,和三张没修饰过的截图
  2. 让 AI 写行情 App 要过的12道关:每一关 AI 会怎么写错、代价多大、提示词里该怎么写
  3. 一段复制即用的提示词模板
  4. 一段“接口事实卡”脚本:写代码前先把真实接口的事实取出来,贴给 AI
  5. 6件 AI 替你决定不了、必须人来拍板的事

一、一次实验:同一个AI,5份行情代码

不给资料,AI 靠“常见写法”猜接口;先查一遍真实接口,它几乎不犯低级错。

实验怎么做

我准备了三段需求,都是现实里最常见的说法:

编号需求原话(节选)谁会这么说
A“帮我写一个跨市场行情面板,3小时内要能上线给老板看……React 单文件,后端用 Flask 做个转发,能跑就行”产品经理、外包团队
B“只要一个 HTML 文件,不要后端,双击打开就能看,今天下午要给老板演示”赶时间的任何人
C“我是个人投资者,帮我用 Python 写一个盯盘脚本……算一下持仓市值和今日盈亏,统一换算成人民币”个人投资者

六个品种和系列前两篇一致:A股寒武纪、港股腾讯、美股苹果、黄金、比特币、标普500。

每段需求先在“不给资料”的条件下写一遍(A0、B0、C0)。A 和 C 再在“先查接口”的条件下各写一遍(A1、C1):动笔前,让 AI 用 MCP 工具对每个品种实际调一次接口,同时给它一份官方接口要点。B 的场景是“双击就能看的单文件”,没有做第二轮。

结果:先查接口,错误从27处降到1处

我把每份代码对照2026年10月14日上午实测的真实接口返回,按12个检查项逐项判定:

image.png

几个数字:

  • 不给资料:三份代码分别用了81、104、154秒写完,最长的778行。适用的检查项 A0 错10/12,B0 错10/10,C0 错7/8。
  • 先查接口:两份代码用了237秒和319秒,只多花2到3分钟。A1 错1/12(价格转成了浮点数),C1 全对。
  • 先查接口的两份代码,交付时各列了一串“需要你确认”的问题,比如“今日”按北京时间0点还是 UTC 0点算、美股夜盘算不算进盈亏。这些问题本来就该人来回答,第四部分细说。

三张截图:演示、接真接口、改对路径

我把 A0 的代码原样跑起来,分三步截图。真实数据是10月14日09:56通过接口取得的单次返回,按官方路径回放给它:

image.png

  1. 给老板演示时:一切正常。可价格是 AI 编的,寒武纪1,277元、比特币10.9万;右上角还弹出一条“黄金大跌2.79%”的提醒,同样是编的。
  2. 接上真实接口:每一行都是“数据获取失败”,AI 猜的快照路径根本不存在。这时页面左上角挂着一个“实时”标签。
  3. 只把路径和参数改对:价格出来了,问题也露出来了。成交量、成交额整列是“—”,买一卖一几乎全空;涨幅榜第一名是比特币,用的是滚动24小时的涨幅;苹果显示341.27美元,那是几个小时前的美股收盘价,页面上没有时间。

AI的行情常识停在哪一天

三份“不给资料”的代码都带了一套演示数据。AI 自己说这些数是随手编的,但它编出来的数,暴露了它的“常识”停在哪一天:

image.png

演示价格编错了,标个“模拟数据”就算了。真正危险的是 C0 写死的汇率:美元兑人民币7.10、港元兑人民币0.91,取不到实时汇率时就用它兜底。而当天真实的是6.6927和0.8527。

它猜的港元汇率代码在接口里不存在,所以港元会直接退回0.91,仅腾讯500股一项,持仓市值就多算约1.2万元。如果两个汇率都退回写死值,整个持仓(真实约115.99万元)会被高估约5.98万元,高5.2%。脚本不会报错,只会安静地显示一个更好看的数字。


二、全景地图:让AI写行情App要过的12关

12道关分三层:接得上、显示对、上得了线。AI 不给资料时,几乎每一关都会栽。

第一层决定代码能不能跑,第二层决定显示的数对不对,第三层决定敢不敢上线。第二层的8关,正好对应系列第一篇讲的“价格身份证”五格:品种、时段、算法、时间、状态。

下面每一关都按同一个顺序写:AI 不给资料时怎么写 → 真实接口是什么样 → 代价 → 提示词里怎么写。

第一层 接得上:接口路径、字段名、数字精度

① 接口路径和参数

  • AI 怎么写:三份代码猜了三种路径,/quote、/quotes,还有直接请求根地址;A0 把参数写成单数 symbol,三份都没传资产类型。
  • 真实接口:快照是 /ticker,参数是 symbols(逗号分隔,可批量)加 type。
  • 代价:第一屏全部报错。更隐蔽的是不传资产类型:系列第一篇实测过,“000001”同时是平安银行和上证指数,接口会报歧义错误;换一家会替你猜的接口,你的自选里就会出现一个3,808元的“平安银行”。
  • 提示词:“先调用真实接口,以返回为准,不要按常见写法猜路径和参数;每个品种写明资产类型。”

② 字段名

  • AI 怎么写:成交量按 volume、vol 取,成交额按 amount、turnover、quote_volume 取,涨跌幅按 change_pct 一类取。B0 和 C0 一口气列了七八个候选名,挨个试。
  • 真实接口:volume_24h、quote_volume_24h、price_change_percent_24h。最新价 last_price 猜中了,这三个一个都没猜中。
  • 代价:路径改对以后,这三列依然是“—”;涨跌幅取不到,AI 就自己拿前收重算,算法问题被藏得更深(见第⑤关)。
  • 提示词:“字段名以真实返回为准;取不到的字段报错,不要用候选名挨个试。”

③ 数字精度

  • AI 怎么写:三份代码都把价格转成浮点数再算。
  • 真实接口:价格、成交额都以字符串返回,比如 "4155.87000"、"83400.01000000",保留了数据源给的精度。
  • 代价:显示一个价格时看不出来,一旦算持仓市值、累计成交额,浮点误差会一路带进报表和对账。先查接口的 A1 也栽在这一关,C1 用了十进制计算。
  • 提示词:“价格和金额保留字符串,计算用十进制,不要直接转浮点数。”

第二层 显示对:单位、窗口、时段、时间、零值、盘口、K线、币种

④ 成交量单位

  • AI 怎么写:成交量不带单位,统一按“万、亿”格式化。
  • 真实接口:寒武纪的成交额÷成交量÷价格约等于100,成交量按手(100股)计;腾讯约等于1,按股计。先查接口的 A1 自己算出了这个比值,把A股成交量乘了100。
  • 代价:A股成交额、换手率、大单筛选全部差100倍(系列第一篇返工点②)。
  • 提示词:“每个市场的成交量写明单位;用成交额÷成交量÷价格自检。”

⑤ 涨跌幅窗口

  • AI 怎么写:用(现价−前收)÷前收自己算,涨幅榜直接混排,超过±2%就提醒。
  • 真实接口:股票按当个交易日;比特币是滚动24小时;黄金没有官方收盘价,前收落在哪根K线要看数据源怎么切日。
  • 代价:截图里涨幅榜第一名是比特币,它比的是“过去24小时”,其他品种比的是“今天”,名次没有可比性。系列第二篇实测过,同一刻同一个金价,涨跌可以是−0.69%,也可以是+0.24%,提醒一家响一家不响。
  • 提示词:“每个涨跌幅标明窗口;跨市场排序或提醒前,先按同一个窗口重算。”

⑥ 美股时段

  • AI 怎么写:只读主快照的价格,忽略接口里的盘前、盘后、夜盘对象。
  • 真实接口:北京时间上午,苹果主快照341.27美元,时间戳是凌晨4:00(美股收盘);同一份返回里还有夜盘价341美元,时间是一分钟前。
  • 代价:用户把几个小时前的收盘价当成现价;首页和详情页对不上(系列第二篇场景④)。
  • 提示词:“美股主快照与盘前、盘后、夜盘分开显示,各标时段。”

⑦ 数据时间

  • AI 怎么写:A0 的列表不显示行情时间;更危险的是一行兜底代码,返回里没有时间戳时,就用“现在”补上。
  • 真实接口:每个快照都带毫秒时间戳,不同品种的时间可以差好几个小时。
  • 代价:一条旧数据会被显示成刚刚更新。盯盘最怕的不是数据慢,是不知道它慢。
  • 提示词:“界面显示每个数字的数据时间;没有时间戳就标‘时间未知’,不要用当前时间代替。”

⑧ 零和没有

  • AI 怎么写:B0 只过滤空值,标普500的买一卖一会显示成“0.0000”。A0 碰巧没出错:它的写法把“0”当成了空值,这是运气,不是设计。
  • 真实接口:标普500的买价、卖价返回 "0.00000",成交量返回 "0.00"。指数没有买卖盘,这里的0意思是“没有”。
  • 代价:中间价按(0+0)÷2算成0,指数估值归零;用价差做风控,价差变成0(系列第一篇返工点⑤)。
  • 提示词:“对该品种不适用的字段,即使返回0也显示‘—’。”

⑨ 盘口档数

  • AI 怎么写:A0 请求盘口时写死 limit=5,前端最多画5档;它的演示数据里,标普500也有5档买卖盘。
  • 真实接口:同一时刻,寒武纪5档、腾讯10档、苹果夜盘只有1档,指数没有盘口。
  • 代价:港股深度丢一半;演示给老板看的,是一份根本不存在的指数盘口。用户照着假深度下单,是最贵的一种错(系列第一篇返工点⑦)。
  • 提示词:“盘口按接口实际返回的档数画,不截断、不补档;不支持的市场写‘不支持’。”

⑩ K线时间戳

  • AI 怎么写:K线时间戳统一处理,最后一根不做标记。
  • 真实接口:09:56查寒武纪5分钟K线,最后一根标着10:00,它还在走;A股K线标的是每根的结束时刻,港股标的是开始时刻(由返回结果推断)。先查接口的 A1 发现了这一点,把A股统一减了5分钟。
  • 代价:A股和港股叠在一张图上错开一根;回测会提前用到5分钟后才有的数据。
  • 提示词:“写明K线时间戳是开始还是结束,最后一根标‘未结束’。”

⑪ 币种与汇率

  • AI 怎么写:A0、B0 把人民币、港元、美元的成交额都格式化成“万、亿”,不标币种;C0 汇率取不到时用写死的7.10和0.91。
  • 真实接口:当天美元兑人民币6.6927,港元兑人民币0.8527。先查接口的 C1 从接口取汇率,还发现港元汇率要换一个代码才取得到。
  • 代价:前面算过,同一组持仓最多高估约5.98万元。
  • 提示词:“不同币种不直接相加;汇率从接口取,取不到就报错,不用写死的数。”

第三层 上得了线:密钥、模拟数据、刷新频率

⑫ 密钥与模拟数据

  • AI 怎么写:B0 按需求把 API Key 明文写进了 HTML(它自己提醒了:“把这个文件发给别人,就等于把 key 也给了别人”);接口连续失败3次,页面会自动切到模拟数据,只挂一条黄色横幅。A0 把 Key 放在服务端,模拟数据也挂了醒目标签,这一关做得对。
  • 真实情况:GitGuardian 2026年的报告统计,2025年公开 GitHub 上新泄露的密钥约2,865万个,同比增长34%;带 AI 编程助手署名的提交,泄露比例约是平均水平的2倍。
  • 代价:Key 被盗刷、额度被用光;更难发现的是“自动切到模拟数据”,演示时数字一直在跳,没人会想到它是假的。
  • 提示词:“API Key 只放服务端或环境变量;没有真实数据时页面醒目标出‘模拟数据’,不自动切换。”

上线前还有两件事 AI 一般不会主动问:刷新频率和失败处理。B0 按需求每秒刷新一次;A0、B0 都提醒了要注意调用频率限制,但都说不清额度是多少。一个页面每秒打一次接口,多开几个标签页就可能触发限流,限流以后整页空白。请求频率、限额、失败后显示什么,要在上线前问清楚。

12关一张表

关AI 不给资料时的典型写法正确做法对应前文
① 接口路径和参数猜 /quote,不传资产类型先查真实接口,写明类型系列第一篇①
② 字段名七八个候选名挨个试以真实返回为准,取不到就报错
③ 数字精度转浮点数字符串保留,十进制计算
④ 成交量单位不带单位按市场写单位,比值自检系列第一篇②
⑤ 涨跌幅窗口自己重算,直接混排标窗口,同窗口重算再排系列第二篇
⑥ 美股时段只读主快照各时段分开显示系列第一篇③
⑦ 数据时间不显示,缺了用“现在”补每个数字带时间
⑧ “0”和“没有”0照常显示不适用显示“—”系列第一篇⑤
⑨ 盘口档数写死5档,演示造档按实际返回画系列第一篇⑦
⑩ K线时间戳统一处理标开始或结束,末根标未结束系列第一篇⑥
⑪ 币种与汇率混币种、写死汇率分币种,汇率从接口取
⑫ 密钥与模拟数据Key 写进前端,失败自动切模拟Key 放服务端,模拟数据醒目标注

这张表就是上线前的体检清单:12项逐项打勾,打不上勾的那一项,就是上线后的第一个工单。


三、为什么AI会这样:它缺的是事实,不是能力

AI 没见过你的接口,只能按“常见写法”补全;行情规则不在任何通用知识里,它不知道要问。

它在猜,而且猜得很自信。这不是行情接口独有的毛病。美国三所大学的研究人员测试了16个代码生成模型,模型推荐的软件包里约19.7%根本不存在;商用模型约5.2%,开源模型约21.7%。AI 编出一个不存在的接口路径,和编出一个不存在的软件包,是同一种行为。

它的常识停在学习的那一天。价格、汇率、交易规则都在变。今年7月6日起A股多了一段15:05到15:30的盘后固定价格交易,11月1日美国结束夏令时,11月16日起港股开始统一每手股数。这些 AI 都可能不知道,前面那张“行情常识”表就是证据。

行情规则不在通用知识里。成交量按手还是按股、涨跌幅按哪个窗口、K线时间戳标开始还是结束,每个市场、每家数据源都不一样。AI 不知道这里有坑,也就不会问。

差一点就对最贵。Stack Overflow 2025年开发者调查:80%的开发者在工作中用 AI 工具,但信任 AI 准确性的只有29%;45%的人把“差一点就对的 AI 代码”列为头号烦恼,66%的人说花在修这类代码上的时间变多了。行情 App 恰恰是“差一点”的重灾区:页面能跑,数字看着合理,错在单位和窗口里。

安全问题不会自己消失。Veracode 2025年测试了100多个大模型、80个编程任务,45%的情况下 AI 写出的代码引入了安全漏洞,Java 的失败率超过70%。

这五条加起来,结论很简单:AI 缺的是事实,补上就好。补事实的办法也很简单:让它先查真实接口,再动笔。


四、正确姿势:先查、再写、人拍板

先让 AI 看到真实接口,再把行情规则写进提示词,最后用12项清单验收。定义类的问题,留给人。

image.png

1. 先查:让AI看到真实接口

两种做法,选一种:

  • 你的 AI 工具支持 MCP:像实验里的 A1、C1 一样,在需求前加一句“先调用真实接口,看到返回再写代码”。AI 会自己调几次接口,把字段、单位、时段看一遍。
  • 不支持 MCP:先跑一遍下面这段“接口事实卡”脚本,把输出贴进对话框。它只做一件事:把真实返回里和“价格身份证”有关的事实整理成 AI 能读的说明。
# 测试环境:Python 3.11
# 用途:写代码之前,先把真实接口的“事实”取一遍,生成一段可以直接贴给 AI 的说明
import os
import sys
import time
from decimal import Decimal

import requests

API_KEY = os.getenv("TICKDB_API_KEY")          # 只放在环境变量或服务端
BASE_URL = "https://api.tickdb.ai/v1/market"
WATCHLIST = {                                  # 资产类型逐个写明,不靠代码后缀猜
    "688256.SH": "stock", "700.HK": "stock", "AAPL.US": "stock",
    "XAUUSD": "forex", "BTCUSDT": "crypto", "SPX": "indices",
}
WINDOW = {"stock": "当个交易日(美股为常规盘)", "forex": "按数据源切日,需确认切日时刻",
          "indices": "上一交易日收盘", "crypto": "滚动24小时"}

def get_tickers(type_, symbols):
    resp = requests.get(f"{BASE_URL}/ticker", params={"symbols": ",".join(symbols), "type": type_},
                        headers={"X-API-Key": API_KEY}, timeout=10)
    body = resp.json()
    if resp.status_code != 200 or body.get("code") != 0:
        raise RuntimeError(f"{type_}: HTTP {resp.status_code}, code={body.get('code')}, {body.get('message')}")
    return body["data"]

def is_zero(v):
    try:
        return Decimal(str(v)) == 0
    except Exception:
        return False

def facts(q, type_, now_ms):
    lines = [f"- {q['symbol']}(type={type_})"]
    lines.append(f"  返回字段:{', '.join(sorted(k for k in q if not isinstance(q[k], dict)))}")
    lines.append(f"  数值是字符串(如 last_price=\"{q.get('last_price')}\"),计算请用十进制,不要直接转浮点")
    lines.append(f"  涨跌幅字段 price_change_percent_24h=\"{q.get('price_change_percent_24h')}\"(已是百分数),窗口:{WINDOW[type_]}")
    age_h = (now_ms - q["timestamp"]) / 3_600_000
    lines.append(f"  数据时间距现在 {age_h:.1f} 小时;界面必须显示数据时间,不要用当前时间代替")
    vol, amt, last = q.get("volume_24h"), q.get("quote_volume_24h"), q.get("last_price")
    if vol and amt and not is_zero(vol):
        ratio = Decimal(amt) / Decimal(vol) / Decimal(last)
        unit = "手(100股)" if ratio > 50 else "股或币"
        lines.append(f"  成交额÷成交量÷价格 ≈ {ratio:.1f} → 成交量单位推断为:{unit}(接入前以文档确认)")
    elif amt is None:
        lines.append("  没有成交额字段:显示“—”,不要补0,也不要自己算")
    for k in ("bid_price", "ask_price", "volume_24h"):
        if k in q and is_zero(q[k]):
            lines.append(f"  {k} 返回 \"{q[k]}\":对这个品种表示“没有”,显示“—”,不要显示0")
    if type_ == "stock" and "bid_price" not in q:
        lines.append("  快照里没有买一卖一:需要另调盘口接口,或在界面上写明“无”")
    for k in ("pre_market_quote", "post_market_quote", "overnight_quote"):
        if k in q:
            sub = q[k]
            lines.append(f"  {k}:last_done={sub.get('last_done')},前收={sub.get('prev_close')},"
                         f"距现在 {(now_ms - sub['timestamp']) / 3_600_000:.1f} 小时;与主快照分开显示,各标时段")
    return lines

def main():
    if not API_KEY:
        sys.exit("请先设置环境变量 TICKDB_API_KEY")
    now_ms = int(time.time() * 1000)
    by_type = {}
    for sym, t in WATCHLIST.items():
        by_type.setdefault(t, []).append(sym)
    print("【接口事实卡】以下内容来自真实接口返回,写代码时以此为准:")
    for t, syms in by_type.items():
        got = {q["symbol"]: q for q in get_tickers(t, syms)}
        for sym in syms:
            if sym not in got:
                print(f"- {sym}:接口没有返回这个代码,先确认代码写法和资产类型")
                continue
            print("\n".join(facts(got[sym], t, now_ms)))

if __name__ == "__main__":
    main()

用10月14日09:56的实测数据跑出来的结果(节选三个品种):

【接口事实卡】以下内容来自真实接口返回,写代码时以此为准:
- 688256.SH(type=stock)
  返回字段:category, high_24h, last_price, low_24h, name, open, prev_close, price_change_24h, price_change_percent_24h, quote_volume_24h, symbol, timestamp, type, volume_24h
  数值是字符串(如 last_price="976.8"),计算请用十进制,不要直接转浮点
  涨跌幅字段 price_change_percent_24h="0.03"(已是百分数),窗口:当个交易日(美股为常规盘)
  数据时间距现在 0.0 小时;界面必须显示数据时间,不要用当前时间代替
  成交额÷成交量÷价格 ≈ 99.5 → 成交量单位推断为:手(100股)(接入前以文档确认)
  快照里没有买一卖一:需要另调盘口接口,或在界面上写明“无”
- AAPL.US(type=stock)
  返回字段:high_24h, last_price, low_24h, name, open, prev_close, price_change_24h, price_change_percent_24h, quote_volume_24h, symbol, timestamp, type, volume_24h
  数值是字符串(如 last_price="341.27"),计算请用十进制,不要直接转浮点
  涨跌幅字段 price_change_percent_24h="0.09"(已是百分数),窗口:当个交易日(美股为常规盘)
  数据时间距现在 5.9 小时;界面必须显示数据时间,不要用当前时间代替
  成交额÷成交量÷价格 ≈ 1.0 → 成交量单位推断为:股或币(接入前以文档确认)
  快照里没有买一卖一:需要另调盘口接口,或在界面上写明“无”
  pre_market_quote:last_done=345.27,前收=340.97,距现在 12.4 小时;与主快照分开显示,各标时段
  post_market_quote:last_done=340.311,前收=341.27,距现在 1.9 小时;与主快照分开显示,各标时段
  overnight_quote:last_done=341,前收=341.27,距现在 0.0 小时;与主快照分开显示,各标时段
- SPX(type=indices)
  返回字段:ask_price, bid_price, high_24h, last_price, low_24h, name, open, prev_close, price_change_24h, price_change_percent_24h, symbol, timestamp, type, volume_24h
  数值是字符串(如 last_price="7805.45000"),计算请用十进制,不要直接转浮点
  涨跌幅字段 price_change_percent_24h="-0.02"(已是百分数),窗口:上一交易日收盘
  数据时间距现在 0.0 小时;界面必须显示数据时间,不要用当前时间代替
  没有成交额字段:显示“—”,不要补0,也不要自己算
  bid_price 返回 "0.00000":对这个品种表示“没有”,显示“—”,不要显示0
  ask_price 返回 "0.00000":对这个品种表示“没有”,显示“—”,不要显示0
  volume_24h 返回 "0.00":对这个品种表示“没有”,显示“—”,不要显示0

这几行就是 AI 最缺的东西:成交量单位、数据时间、哪些0其实是“没有”、美股的时段对象。把它贴在需求前面,第一层的三关和第二层的大半关卡,AI 就有了依据。

2. 写规则:复制即用的提示词模板

查到的是事实,规则还得你告诉它。下面这段模板,每一条都对应实验里 AI 实际犯过的一个错,放在需求前面一起发:

你要写一个跨市场行情应用。动手前先做两件事:
1. 先调用真实接口(MCP 工具,或我贴给你的“接口事实卡”),以真实返回为准,不要按常见写法猜路径、参数和字段名。
2. 不确定的定义先列出来问我,不要自己编。

写代码时遵守:
- 每个数字同时带上单位、涨跌窗口(当日 / 滚动24小时 / 切日时刻)和数据时间。
- 价格和金额保留字符串或用十进制计算,不要直接转成浮点数。
- 接口没返回、或返回0但对该品种不适用的字段,显示“—”,不补0,不编造。
- 美股主快照与盘前、盘后、夜盘分开显示,各标时段。
- 盘口按接口实际返回的档数画,不截断、不补档;不支持的市场写“不支持”。
- K线写明时间戳是开始还是结束,最后一根标“未结束”。
- 不同币种不直接相加;汇率从接口取,取不到就报错,不用写死的数。
- 跨市场排序或提醒前,先把涨跌幅按同一个窗口重算。
- API Key 只放服务端或环境变量;没有真实数据时页面必须醒目标出“模拟数据”,不自动切换。

image.png

3. 验收:12项体检,6件事人来拍板

代码写完,按第二部分那张表逐项打勾。还有6件事,AI 查了接口也替你决定不了。先查接口的两份代码,交付时都主动列出了这些问题:

  1. 今日怎么算:北京时间0点、UTC 0点、纽约17:00,还是滚动24小时?
  2. 美股盘后和夜盘算不算:涨跌、市值和提醒用常规盘,还是用最新的延长时段价格?
  3. 稳定币怎么换算:USDT 是否按1美元算?
  4. 提醒规则:跨过阈值提醒一次,还是每次刷新都提醒?用哪个窗口的涨跌幅?
  5. 汇率怎么取:多币种汇总用哪个汇率、哪个时点?
  6. A股除权日:前收用不用除权参考价(系列第二篇场景③)?

这6件事没有标准答案,但必须有人定、写进文档、显示在界面上。

4. 跨市场为什么更需要统一接口

只做A股,AI 要猜一套字段;做跨市场,如果每个市场各接一家数据源,AI 要猜的是好几套:路径不同、字段名不同、时间戳格式不同、前收的定义不同。实验里不给资料的 AI,光是成交额一个字段就列了七八个候选名,这还只是假设只有一家数据源。

数据源越多,AI 越容易猜错,你要写的“接口事实卡”也越长。规则还在变,每变一次,每一家都得重新核对。所以用 AI 做跨市场行情 App,省事的做法是一套接口覆盖所有市场:AI 只需要学一套字段,事实卡只需要一份,提示词里的规则只需要写一次。

5. 本文实验怎么用的数据接口

TickDB 通过 Skill、MCP、CLI 和 API 为 AI 工具提供结构化市场数据,让模型先取得带标的、字段和时间的事实,再进行分析与表达。

本文“先查接口”那一轮,AI 就是通过 MCP 直接调用它的接口,在写代码前看到了6个品种的真实返回:

能做到要你自己定
支持 MCP 的 AI 工具可以直接调用接口,写代码前先看到真实字段和数值上面6件需要拍板的事,接口给不了答案
A股、港股、美股、外汇贵金属、指数、加密资产的快照用同一组字段返回现价、前收和时间戳,AI 只需要学一套成交量单位、K线时间戳含义,本文由返回结果推断,接入前以文档确认
美股快照里盘前、盘后、夜盘分成独立对象,各带价格和时间;代码有歧义时返回错误,不替你猜不同套餐的能力不同,盘口、逐笔等以账户权限为准

左边是这次实验能证明的,右边是任何数据源都替代不了的判断。(作者实测,2026年10月13日至14日。)


常见问题

AI写的行情App能直接上线吗?

不建议。本文实验里,不给资料的3份 AI 代码在模拟数据下都能跑,但对照真实接口,适用的30个检查项错了27个,错在接口路径、字段名、成交量单位、涨跌窗口、美股时段等地方。上线前至少做两件事:让 AI 先查真实接口再写,写完按12项清单逐项检查。

让AI写行情代码的提示词怎么写?

最重要的一句是“先调用真实接口,以返回为准,不要按常见写法猜”。然后把行情规则写成约束:每个数字带单位、涨跌窗口和数据时间;不适用的字段显示“—”不补0;美股各时段分开显示;盘口按实际档数画;汇率从接口取;Key 只放服务端。完整模板见第四部分。

AI为什么会编造接口路径和字段名?

因为它没见过你用的接口,只能按训练时见过的“常见写法”补全。学术研究发现,代码模型推荐的软件包里约两成根本不存在,编造接口是同一类问题。解决办法是写代码前先让它看到真实返回:用支持 MCP 的工具直接调接口,或者把接口的真实返回贴给它。

用AI写行情App时API Key放在哪里?

放在服务端或环境变量里,不要写进前端页面。本文实验中,需求要求“只要一个 HTML 文件、不要后端”时,AI 把 Key 明文写进了页面,只附了一句提醒。GitGuardian 的统计显示,带 AI 编程助手署名的代码提交,泄露密钥的比例约是平均水平的2倍。

跨市场行情App用几家数据源合适?

能用一家覆盖就用一家。每多一家数据源,AI 就要多猜一套路径、字段和时间格式,你要核对的规则也多一套;规则变化时,每一家都要重新检查。用一套接口覆盖多个市场,AI 的事实卡和提示词都只需要写一份。


最后一个问题

你们现在用 AI 写的那个行情页面,能说出每个数字的单位、窗口和时间吗?

今天就能做的一件事:把你的需求原封不动发给 AI 之前,先加一句“先调用真实接口,看到返回再写代码”。实验里,这一句只多花了2到3分钟,省掉的是第一屏的全部报错。

AI 写得出能跑的行情 App。让它知道自己在显示什么,是你的事。


参考资料

  1. TechCrunch,[Google Play now lets anyone build private, vibe-coded apps that run on Android],2026-10-13
  2. 证券时报(中证网转载),[智能体浪潮席卷证券业 券商AI转型从单点增效迈向体系重构],2026-09-28
  3. CNN(经 KRDO 转载),[“Vibe coding” named Collins Dictionary’s word of the year],2025-11-06
  4. GitGuardian,[The State of Secrets Sprawl Report 2026]
  5. Stack Overflow,[2025 Developer Survey results],2025-07-29
  6. Veracode,[2025 GenAI Code Security Report 新闻稿],2025-07-30
  7. Spracklen 等,[We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs];CSO Online 相关报道

相关文章

跨市场行情应用的涨跌幅:同刻黄金−0.69%还是+0.24%

做跨市场行情App,最容易被用户截图投诉的,是价格旁边那个红绿百分比。同一刻、同一个金价,涨跌可以是−0.69%,也可以是+0.24%。本文拆解涨幅榜、价格提醒、持仓页、首页详情页4个最容易出错的场景,附一张跨市场分母清单。 做跨市场行情App,最容易被用户截图投诉的,往往是价格旁边那个红绿百分比。 2026年10月13日周二,北京时间10:56,黄金4,175.15美元。同一个价格,我按5…

TickDB Research ·

A股美股港股行情看板Demo三天、上线三个月:拆解7个返工点

同一张行情表,寒武纪的成交额自己算是5,414万元,接口给的是54.20亿元,差了100倍,原因只是一个单位。行情看板三天就能接通,上线后的返工,几乎都来自界面上说不清“自己是什么”的数字。 本文依据上交所、港交所的一手文件,加上10月12日盘中对7类资产的实测,给你四样东西: 一张“价格身份证”:每个数字上线前要答的5个问题 7个返工点逐条拆:钱在哪里算错、为什么会错 一份可以直接发给数据…

TickDB Research ·

自选股跨了A股港股美股,还在打开三个APP翻?盘中扫异动前,先定这五个字段

自选股四十只,A股港股美股都有,每天早上打开三个 APP 翻一遍。有天腾讯盘中跌了 3%,又弹回来,我在外面吃饭,完全没看到。下午再打开,只看到它跌了 2%。 这个 2% 是结果,不是过程。 问题不在我没有实时数据。问题在我看到的那个数字——涨跌幅——它只告诉我一个方向,没告诉我这个方向是怎么走出来的。 同一只股票,只看涨跌幅和看开高低收加成交额,你做出的判断可以完全相反。股票池越大,这个差…

TickDB Research ·

行情数据源怎么选?对比了 Alpaca、米筐、Wind 、vnpy等6家

同一根K线,不同数据源可能给出不同结果。 你选的不是数据源,是翻译方式。 一个让我亏过钱的问题。 回测里某个信号持续有效,实盘对不上。差异不大但一直在。排查了三周,策略逻辑、滑点、手续费、执行延迟全查过。 最后发现问题出在K线时间标签的约定上——数据源把分钟标签落在“结束”,而团队的策略逻辑假设标签是“开始”。这个处理,数据商的文档里没有写,采购合同里也没有约定。 问题不在策略,在团队从没验…

TickDB Research ·

构建类 TradingView 行情系统:从图表选型到数据层深水区的全景指南

我们团队做行情图表系统有些年头了。从最早接单市场 K 线,到后来做跨 A 股、港股、美股的多市场看板,中间踩过的坑、绕过的弯路,大概够写好几篇复盘。这篇文章是我们内部沉淀下来的经验整理——不是教程,是一份工程笔记。 --- 一、一个让我们折腾了很久的问题 WebSocket 客户端显示 ,心跳正常,日志干净,但图表上的 K 线停了。不是卡顿,是彻底不更新。 这不是我们一家的问题。三个完全独立的金融

TickDB Research ·