Codex股票分析实测:用TickDB MCP查A股行情、财报数据和估值

TickDB Research ·

摘要:用Codex分析A股,怎样把行情、财报数据和估值放在一起看?本文以寒武纪为例,实测通过TickDB MCP获取历史行情、单季财务与PE估值,结合公司公告核对期间和口径,再用Python生成事实卡、整理个股研究笔记。附可复制的任务指令、真实输入和可运行代码,适合个人研究者与AI投研产品团队,减少重复查数和整理。

三季报披露期间,看到一只关注的股票利润增长超过一倍,你最想弄清楚的,往往是增长从哪里来、现金回来了多少,以及市场原先已经期待了多少。把新闻标题交给AI,它很快就能写出一段点评;可一旦把“同比增长”顺手写成“超预期”,后面的判断就可能偏了。

先把数字查全,再把问题问准。让Codex通过TickDB取得同一只股票的行情、财报数据和估值,完成必要计算,最后留下一页写清依据与下一步的研究笔记。TickDB提供AI可调用的结构化数据入口,个人研究者可以少重复查数,投研产品团队也能据此设计研究卡片。

这次选寒武纪688256.SH。2026年10月29日,我们通过已连接的TickDB MCP查询股票信息、历史日线、利润表、现金流和估值,再结合公司季度报告核对。下面按一次个股研究的顺序展开:先看拿到了什么,再看这些数字该怎样读,最后把方法交给你。

image.png

图1:AI生成概念示意,展示资料整理的关系;卡片上的曲线和图形不表示寒武纪的实际走势。

一、先看实测结果:数字到手后,研究从哪里继续

这次查询得到的几项信息,足够组成一页研究底稿:

观察项目本次结果接下来要弄清楚什么
历史行情9月22日至10月27日取得20根前复权日线,首末收盘价1121.00元、912.98元,变化−18.56%这段窗口内发生过哪些信息变化
单季营业收入2026年第三季度约35.31亿元,同比增长104.47%增长来自哪些业务或客户变化
单季归母净利润约14.04亿元,同比增长147.74%这是相对去年增长,还是也高于此前预期
单季经营现金流约−0.84亿元;上年同季约−9.40亿元净流出收窄以后,回款与支出各有什么变化
PE估值10月29日查询返回146.01,返回未附明确的估值业务时点盈利分母采用什么口径,比较基准是否一致

财务金额按亿元保留两位。接口整数金额与公告原文有元级差异;接口报告期日期标签为9月29日,公告报告期末为9月30日。本例保留两边原值,季度归属按公告核对。

把这些数字放在一起,最有用的收获是:下一问有了落点。利润增长去查预期和利润构成,现金流去查收付明细,估值去查分母。研究不必停在“公司增长很快”这句话上。

二、利润增长这么快,为什么还要继续查

同比增长,比较的是去年;超预期,要找此前的预期

10月23日晚,IT之家报道了寒武纪第三季度业绩。报道列出的营收、利润数字,可以回到公司报告核对;其“AI解读”还使用了“大幅超出市场预期”的表述。

这正好给我们一个实际的阅读问题:预期基准在哪里?

同比增长147.74%,比较的是本年第三季度和去年第三季度的利润。判断是否超预期,则要找财报披露前、针对同一季度的预测:谁预测的,何时发布,预测的是归母净利润还是其他指标。若采用多家机构的预测,还要交代纳入了哪些机构。

同比增长:本期实际值,与上年同季实际值比较。
是否超预期:本期实际值,与披露前对本期的预测比较。

本篇取回了实际财务数据,没有另行建立机构预测样本,因此笔记保留“同比增长”,把“核查此前预期”列为下一步。读新闻、看AI点评时,也可以用这一问检验它有没有跳过依据。

利润与现金流放在一起看,能问得更具体

本例第三季度单季归母净利润约14.04亿元,经营现金流约−0.84亿元。两者为什么不同?先从账上确认收入与实际收到现金的时间差开始想:有些收入已经确认,款项可能稍后才收;有些经营支出发生在当期,也未必与当期利润一一对应。

江苏证监局的投资者教育资料也解释过,利润表与现金流量表的项目没有简单的一一对应关系,可以借助现金流量补充资料,逐步将净利润调节为经营活动现金流量净额。

因此,查下去的顺序可以很具体:

继续查什么想回答的问题需要补哪份资料
销售回款与应收变化收入增长之后,收款情况怎样现金流量表、资产负债表及相关说明
采购付款与存货变化是否有经营支出先于后续销售发生现金流量表、存货及采购相关说明
其他经营收付与调整项目利润和现金的差异还有哪些来源报告说明;有补充资料时再核对调节项

这些是核查方向,本例还没有把差异归因到某个项目。单季现金流为负,也不能直接推导公司经营恶化:它较上年同季的净流出已经明显收窄,仍要结合累计期间、实际明细和业务节奏读。

一个PE数字,离贵或便宜还差几个条件

估值查询返回PE值146.01,同时带有关于“便宜”和区间位置的自动描述。研究笔记先留下数值,继续核查计算条件。

市盈率把股价与盈利联系起来。用哪个时点的股价,盈利采用上年度、滚动期间还是预测值,都会影响比较。换一家公司的PE来对照,也要先把这些条件对齐。

本次返回没有明确的估值业务时间字段,我们只知道10月29日取回了这条结果。因此不能把它与10月27日的收盘价当作同一天的一组数,进一步推导所谓便宜程度。

三、看股价与财报,先把时间放对

本例最容易混淆的地方,是把一份第三季度报告与一个横跨9月、10月的行情窗口,当成了同一段时间。

image.png

图2:左侧是数字覆盖的期间,右侧是本次使用的资料记录日期。公告存档页日期为10月24日,10月23日晚已有公开报道;首次披露时点应核对交易所记录。

财报里的单季经营情况属于7月至9月。本文的20根日线覆盖9月22日至10月27日,首末收盘变化为:

(912.98 ÷ 1121.00 − 1)× 100% ≈ −18.56%

这段价格窗口包含报告公开报道之前和之后的记录。因此,把−18.56%直接写成“财报公布后的市场反应”,时间上就对不上。若要研究财报发布后的价格表现,应先核对公告首次公开的具体时间,再单独划定观察窗口,并查看同期其他信息。

同样,今天查到一份财报,也不能默认过去某个交易日已经能看到它。做历史研究时,这一步尤其重要。

数字旁边留下日期和期间,读者就能自己判断哪些可以直接比,哪些还缺条件。原本笼统的“股价为什么不跟业绩走”,也就能拆成更容易查证的问题。

四、TickDB在这项研究里,提供了什么价值

如果只研究一只股票,手工翻行情和报告也能完成。但观察名单需要反复更新,或者要把这套过程放进投研产品时,每次重新找入口、抄数字、整理格式,就会成为持续的工作量。

本例通过TickDB MCP,围绕同一个证券对象取得历史行情、财务和估值输入,再交给Codex整理、交给代码计算。几类数据能接着用,是这条路径的主要价值:行情提出价格问题,财务把问题落到经营指标,估值提供进一步比较的线索。TickDB产品入口

这里也可以分清分工:TickDB提供本篇实际取得的数据,代码计算首末变化和同比,研究者核对公告、寻找预期与经营明细。最后生成的研究笔记由这一整条过程完成。

对行情应用和AI投研产品,值得借鉴的是卡片的设计:在每项数字旁保留期间与来源,在观点后面留出“还要查什么”。用户点开现金流观察,应该知道接下来查哪张表;点开估值,应该能看到计算条件,而不只有一句“偏低”。

本文跑的是MCP按需查询。持续盘中更新属于另一项产品任务,要另行验证相应的行情订阅方式。换证券、换市场时,也要核对可用字段、报告期和账户权限。本例发现的日期标签与元级金额差异,都保留在核对记录中。

五、把这套研究方法带走

先在Codex中接好TickDB MCP,并确认当前账户可以调用所需工具。然后把下面的任务交给它:

为寒武纪688256.SH整理一页研究笔记,数据通过TickDB MCP实际查询。

1. 查询股票身份,确认代码、名称和币种。
2. 查询截至2026-10-27的20根日线,interval=1d,adjust=forward。
   end_time按Asia/Shanghai当日23:59:59.999转换为Unix毫秒。
   按日期升序排列,保留原始返回。
3. 分别查询利润表IS和现金流CF,period_type=q3,n=2。
   保留营业收入、净利润、经营现金流的字段名、年份、期间及原值。
   对照公司季度报告,核对单季/累计、归母归属、单位;
   披露时间查公告记录,不用第三方存档页日期代替。
4. 查询估值;保留数值及可用时间信息,不直接采用自动描述作结论。
5. 将行情首尾记录与两年同季财务整理为下方JSON格式,
   保存research_input.json,运行本页make_note.py生成事实卡。
6. 根据事实卡写一页笔记:价格观察、经营观察、估值待查、下一步。
   关键事实注明数据或公告来源;缺项就保留问题,不补造数字。
   不把价格与业绩同时出现写成已经找到涨跌原因。

这对应了本篇实际执行的数据查询与整理步骤。你可以先保留同一标的和日期,把整条过程跑一遍,再替换自己的研究对象与窗口。

给技术同事的最小实现

下面的输入取自本次真实返回。价格部分只列计算所需的首尾两条;完整查询取得20条。财务保留接口原值,净利润字段在本例结合公告核对归属。

保存为research_input.json:

{
  "symbol": "688256.SH", "currency": "CNY",
  "queried_at": "2026-10-29", "adjust": "forward",
  "prices": [["2026-09-22", "1121.00"], ["2026-10-27", "912.98"]],
  "fiscal_year": 2026, "period": "q3",
  "financials": [
    {"year": 2026, "period": "q3", "metric": "OperatingRevenue", "value": "3530828295"},
    {"year": 2025, "period": "q3", "metric": "OperatingRevenue", "value": "1726780893"},
    {"year": 2026, "period": "q3", "metric": "NetProfit", "value": "1403610673"},
    {"year": 2025, "period": "q3", "metric": "NetProfit", "value": "566563170"},
    {"year": 2026, "period": "q3", "metric": "NetOperateCashFlow", "value": "-83677875"},
    {"year": 2025, "period": "q3", "metric": "NetOperateCashFlow", "value": "-940455129"}
  ]
}

再保存下面的make_note.py。使用Python 3标准库,无需安装第三方依赖:

import json
import sys
from datetime import date
from decimal import Decimal
from pathlib import Path


def number(value):
    result = Decimal(str(value))
    if not result.is_finite():
        raise ValueError("金额或价格必须是有限数值")
    return result


def make_note(data):
    if data["currency"] != "CNY" or data["adjust"] != "forward":
        raise ValueError("本例要求人民币、前复权价格")
    prices = sorted(data["prices"], key=lambda row: date.fromisoformat(row[0]))
    if len(prices) < 2 or len({row[0] for row in prices}) != len(prices):
        raise ValueError("至少需要两个不同日期,且不能重复")
    if any(number(row[1]) <= 0 for row in prices):
        raise ValueError("价格必须为正数")
    fields = {}
    for row in data["financials"]:
        key = (int(row["year"]), row["period"], row["metric"])
        if key in fields:
            raise ValueError("财务字段重复,请先核对口径")
        fields[key] = number(row["value"])
    year, period = int(data["fiscal_year"]), data["period"]
    lines = [f'# {data["symbol"]} 研究事实卡',
             f'取数日期:{data["queried_at"]};币种:CNY;价格:前复权。']
    first, last = prices[0], prices[-1]
    change = (number(last[1]) / number(first[1]) - 1) * 100
    lines.append(f'价格:{first[0]} {number(first[1]):.2f}元 → '
                 f'{last[0]} {number(last[1]):.2f}元;首末收盘变化 {change:+.2f}%。')
    for metric, label in [("OperatingRevenue", "营业收入"),
                          ("NetProfit", "净利润"),
                          ("NetOperateCashFlow", "经营现金流")]:
        current = fields[(year, period, metric)]
        previous = fields[(year - 1, period, metric)]
        text = f'{label}({year}/{year-1},{period}):'
        text += f'{current / 100000000:.2f} / {previous / 100000000:.2f}亿元。'
        if previous > 0:
            text += f' 同比 {(current / previous - 1) * 100:+.2f}%。'
        else:
            text += ' 上期为零或负数,保留金额对照,不计算同比百分比。'
        lines.append(text)
    lines.append('待查问题:请结合公告、现金流明细和估值口径补充。')
    return '\n\n'.join(lines) + '\n'


if __name__ == "__main__":
    source = Path(sys.argv[1] if len(sys.argv) > 1 else "research_input.json")
    try:
        data = json.loads(source.read_text(encoding="utf-8"))
        Path("research_note.md").write_text(make_note(data), encoding="utf-8")
        print("已生成 research_note.md")
    except (OSError, ValueError, KeyError, TypeError, ArithmeticError) as error:
        raise SystemExit(f"输入需核对:{error}")

在这两个文件所在目录运行:

python3 make_note.py research_input.json

程序生成research_note.md。本次实际输出中的关键结果为:

首末收盘变化:-18.56%
营业收入:35.31 / 17.27亿元;同比 +104.47%
净利润:14.04 / 5.67亿元;同比 +147.74%
经营现金流:-0.84 / -9.40亿元
上期为零或负数,保留金额对照,不计算同比百分比。

这段代码完成本地计算和事实卡生成;新的数据由前面的MCP查询取得。以后替换输入时,币种、价格口径、财务期间与字段含义也要一起核对。事实卡里保留“净利润”字段名称,是否能在笔记中称为归母净利润,要继续核对对应公告。

不写代码,也可以直接使用这个笔记格式

研究对象与取数日期:

价格观察:选定哪个区间,发生了什么变化?
经营观察:对应哪份报告、哪种期间,有哪些实际变化?
估值待查:拿到了什么数值,还缺哪项比较条件?
下一步:最值得回到公告或明细里查的具体问题是什么?

留下一两个能继续核查的问题,通常比把公司所有信息都塞进一页更有用。

六、留下一页,下次能接着研究

一页有用的笔记,应该让你下次打开时知道接着查什么。本例留下的就很明确:查披露前的利润预期,查经营收付明细,查PE的计算条件。发现新资料以后,再回来更新判断。

英国金融行为监管局FCA在2026年7月更新的AI投资研究指引中,也肯定了AI在整理复杂资料方面的用途,并建议用可信来源复核结果,把AI提供的信息作为继续研究的起点。实际做起来,就是让数字能回查、计算能重跑,问题能继续往下问。

第一次用Codex做股票分析,从哪里开始?

选一只自己熟悉的股票、一个已经结束的行情窗口和一份明确的季度报告。先用上面的任务指令取得数据,做出一页笔记,再逐项补上你真正关心的问题。

查询缺数据,或者笔记里的数字对不上怎么办?

保留错误和缺项,先核对证券代码、权限、单位、报告期间与复权口径。财务回到公告查,计算用保存的输入重跑;缺失值不填零。本例的报告期标签与元级金额差异,也按这个办法分别保留和核对。

TickDB还能支持下一步研究什么?

沿着已验证的行情、财务和估值输入,组织自己的固定观察名单,反复生成研究底稿。新增同业或其他市场前,先确认对应数据是否可用;需要现金流逐项明细时,继续补读公司报告。

从TickDB AI工具入口开始,用自己熟悉的一只股票试一次。值得留下来的,是查数之后,你终于知道该把下一步研究放在哪里。

参考资料

  • TickDB AI工具页及本篇MCP真实返回:股票信息、历史日线、财务与估值;查询日期2026年10月29日。
  • 中科寒武纪科技股份有限公司《2026年第三季度报告》:主要财务数据、期间说明;新浪财经存档PDF,存档页日期2026年10月24日。
  • IT之家《寒武纪2026年第三季度归母净利润14.04亿元,同比增长147.74%》:2026年10月23日18时42分;用于对照新闻数据与“AI解读”的判断基准。
  • 江苏证监局《读懂上市公司报告之资产负债表、利润表和现金流量表之间的关系如何?》:2023年10月31日,关于净利润与经营现金流的关系。
  • FCA《Using AI for investment research》:2025年12月18日首次发布,2026年7月30日更新,关于AI辅助研究与可信来源复核。
  • OpenAI官方《Model Context Protocol》说明:外部工具与信息的连接方式;查阅于2026年10月29日。

本文展示数据整理与研究方法,寒武纪用于接口与笔记演示,不构成买卖建议。行情、财务与估值按文中所列时间使用。

相关文章

美股历史数据下载:用 Codex 取数,Python 导出 CSV

面向已在 Codex 中接入 TickDB、需要将美股历史行情用于 Excel 或 Python 分析的研究者,演示如何把一次查询留成可复用的研究输入。TickDB 按股票、周期、日期和复权方式返回历史日线,Codex 组织查询,文中的完整 Python 脚本将原始响应转成 CSV,并记录实际首尾时间与条数。示例使用 AAPL.US;指定日期查询需具备相应账号权限。

TickDB Research ·

股票API接口的费用、权限与接入限制

股票API接口的费用、权限与接入限制 股票API接口怎么收费,付费后能用哪些数据,接入时又有哪些限制?**费用通常取决于数据类型、套餐和计费周期;权限需要逐项确认市场、接口及历史范围;接入限制则要分别检查调用频次、单次数据量和实时订阅额度。**拿到密钥或购买一个套餐,都不能直接推导出“所有股票数据随便用”。 先给出可落地的答案:Tushare 个人历史分钟数据公开价为 2,000元/年 ,属…

TickDB Research ·

A股数据源怎么选?从历史数据下载到实时行情API,按用途做选择

寻找 A 股数据源时,历史回测与实时行情接入需要关注的条件并不相同。本文从历史数据下载、日线与分钟数据、实时行情 API 三类需求出发,说明如何判断数据范围、更新方式和接入成本,并给出试接与验证步骤,帮助你选择适合当前任务的数据来源。

TickDB Research ·

A股历史数据下载:回测结果变了,先别急着改策略

同一只股票,换一份历史数据,研究结果为什么对不上?这篇写给定期做A股研究、准备回测输入的小团队,以及负责研究功能的产品经理。我们用寒武纪的真实日线对照,拆开价格口径、样本范围和数据更新带来的差异,再说明怎样借助TickDB的历史行情、股票信息与复权查询,让研究表、脚本和AI工具有共同的数据依据。

TickDB Research ·

A股行情接口怎么选?AKShare、Tushare、TickDB按用途比较

给A股看板、研究页或AI助手选行情接口,产品经理首先要明确数据用于什么功能、需要怎样更新。本文按用途比较AKShare、Tushare与TickDB的具体入口,结合寒武纪的真实查询结果,给出候选选择表和一张填好的试用需求卡,方便与技术同事讨论接入。

TickDB Research ·