系统架构和边界

本节介绍 Stock MCP 在投研场景下的数据体系及其能力边界,阐明 DolphinDB 数据底座如何支撑 AI 投研能力,以及 Stock MCP 工具在系统中的实际作用与限制。

数据体系

本项目数据存储在 DolphinDB 中,包括原始行情数据、财务数据与衍生指标,并面向量化投研场景重新组织成统一的因子化数据体系。该体系以“因子”为核心,将所有宽表结构(如日线、利润表、资产负债表等)的字段抽象为标准化的因子,并存放于结构统一的因子窄表中。同时,结合元数据表与向量语义检索机制,使 AI 能够理解因子含义、进行自然语言映射,并高效检索分析。

数据源

当前平台已经接入如下数据内容:

一级分类 二级分类 具体表
沪深股票 基础数据 股票列表
每日股本
股票曾用名
IPO 新股列表
指数成分和权重
ST股票列表
行情数据 日线行情
周线行情
月线行情
每日指标
每日涨跌停价格
每日停复牌信息
个股资金流向
行业资金流向
财务数据 利润表
资产负债表
现金流量表
利润表
资产负债表
现金流量表
指数数据 基础数据 股票列表
行情数据 日线行情

因子窄表(Narrow Factor Table)

因子窄表以统一格式存放全部指标,仅包含四列核心字段:tradetime、securityid、factorname 和 value。

所有宽表(如日线行情、利润表、资产负债表)中的字段会被转换为上述窄表结构,统一写入因子窄表。

这样做的好处包括:

  • 模型无需关心指标来源表
  • 查询格式统一(例如:按 securityid + factorname 查询即可)
  • 支持上千个因子,表结构依然稳定

例如“净利润”、“ROE”、“市值”、“PB”、“营业收入同比”、均按统一格式记录在因子窄表中。

元数据表(Metadata Table)

元数据表记录了每个因子的基本信息,包括因子名和中文描述(如“净利润”、“毛利率”、“滚动市盈率”)。

这让系统能够把用户用自然语言表达的指标需求(比如“净利润”)映射到具体的因子名。

向量语义检索(VectorDB)

为了让 AI 能根据自然语言找到最可能的指标,我们将因子的中文描述和对应的 Embedding 向量结合起来,构建了一个语义检索器。

例如,档用户说:“净利润”时,系统会从 5000+ 因子里挑出最相关的 20 个候选:

  • net_profit
  • net_profit_growth
  • pe(市值/净利润)
  • roe
  • ……

然后再让 AI 基于这些候选做更精确的判断。

这样做的原因很简单:

  • 所有因子一次性发送给大模型会超出 Token 限制
  • 筛选最相关的候选既提高准确度,也更快、更不容易混淆

因子体系的作用

这套体系让 AI 可以稳定地完成三类任务:

  • 根据 securityID 查指标(单股票、单指数)
  • 按指标筛选股票(构造 WHERE 条件)
  • 进行单因子评价和多因子回测(因子名完全一致,便于引用)

简而言之,因子窄表统一了所有指标的存储方式,元数据表和向量检索统一了自然语言理解方式。

这样,AI 才能在整个投研链条里稳定地理解用户的意图,并找到正确的数据。

现有的指标名列表

指标名 指标描述
S 是否停牌(1=是,0=否)
circ_mv 流通市值(万元)
LN 收盘价的自然对数;常用于对数收益、稳定方差变换
ASI_26 振动升降指标 ASI(M1=26)
TRMA_20_of_TRIX TRIX 的 20 日均线
BR_26 BRAR 指标中的 BR(买卖强弱对比)
HHV_10_close 收盘价10日滚动最高值(近10日最高收盘价)
WR1_6 威廉指标 WR1(N1=6)
TAQ_DOWN_10 唐安奇通道下轨(N=10)
turnover_rate 换手率(%)
dv_ttm 股息率(TTM,%)
ma_v_5 5日均量
HHVBARS_10_close 距离近10日滚动最高值的“期数距离”(高点到当前的间隔)
DMI_ADXR_14_6 DMI 的 ADXR(ADX 的再平滑)
MAEMV_9_of_EMV EMV 的 9 日均线
ROC_12 价格变动率(N=12,%)
pe_ttm 市盈率(TTM)
volume_ratio 量比
ma_v_20 20日均量
ma_v_50 50日均量
up_limit 涨停价
star_market_board 是否创业板(1=是,0=否)
net_profit 净利润
STD_5_close 收盘价5日滚动标准差(短期波动率近似)
LLVBARS_10_close 距离近10日滚动最低值的“期数距离”(低点到当前的间隔)
WMA_10_close 收盘价10日加权移动平均(越近权重越大)
AVEDEV_10_close 收盘价10日平均绝对偏差(另一种波动刻画)
MACD_DEA MACD 的 DEA 信号线(DIF 的 EMA 平滑)
BIAS1_6 乖离率1(与 MA6 的相对偏离,%)
DPO_20_10_6 区间震荡线 DPO(M1=20,M2=10,M3=6)
EXPMA_N1_12 EXPMA 的第一条指数均线(N1=12)
net_profit_margin 环比净利润增长率
DIFF_1_close 收盘价与其1期滞后的差分(近似当日价格变动量)
DMA_close_0_5 动态加权移动平均(alpha=0.5),对收盘价做指数平滑
KDJ_K KDJ 指标的 K 值(N=9,M1=3,M2=3)
KDJ_D KDJ 指标的 D 值
KDJ_J KDJ 指标的 J 值(3K-2D,放大震荡)
BOLL_UPPER_20_2 布林带上轨(N=20,P=2)
PSYMA_6_of_PSY12 PSY 的 6 日均线(M=6)
DMI_ADX_14_6 DMI 的 ADX(趋势强度,不分方向)
TAQ_UP_10 唐安奇通道上轨(N=10)
TAQ_MID_10 唐安奇通道中线(N=10)
MTM_12 动量 MTM(CLOSE - REF(CLOSE,12))
pct_chg 涨跌幅(%)
close 收盘价
change 涨跌额
ma50 50日均价
down_limit 跌停价
pb 市净率(总市值/净资产)
ps 市销率
MAX_CO 逐元素比较收盘价与开盘价,取较大者(当日高位代表性近似)
MIN_CO 逐元素比较收盘价与开盘价,取较小者(当日低位代表性近似)
SUM_5_vol 成交量5日滚动求和(短期累计成交量)
EMA_10_close 收盘价10日指数移动平均(更重视近端数据)
SLOPE_11_close 收盘价在11日窗口的一元线性回归斜率(趋势强弱)
MADPO_6_of_DPO DPO 的 6 日均线
EXPMA_N2_50 EXPMA 的第二条指数均线(N2=50)
list_days 上市天数
pre_close 昨收盘价
amount 成交额(千元)
adj_factor 复权因子
free_share 自由流通股本(万股)
vol 成交量(手)
ST 退市风险标记(0=非ST,无退市风险;1=ST,有退市风险)
is_down_limit 是否跌停(1=是,0=否)
POW_2 收盘价的平方(N=2 的 POW),用于二次变换或方差相关计算
WR_10 威廉指标 WR(N=10)
BIAS2_12 乖离率2(与 MA12 的相对偏离,%)
BIAS3_24 乖离率3(与 MA24 的相对偏离,%)
PSY_12 PSY 心理线(N=12),统计近 N 日上涨天数占比
TRIX_12_20 TRIX 三重指数平滑的变化率(%)(M1=12, M2=20)
DFMA_DIF_10_50_10 DFMA 的差值线 DIF(MA10 - MA50)
MASS_9_25 梅斯线 MASS(N1=9,N2=25)
MAMASS_6 MASS 的6日均线
MAROC_6 ROC 的6日均线
debt_ratio 资产负债率
is_up_limit 是否涨停(1=是,0=否)
MA_10_close 收盘价10日简单移动平均(短期均线)
BOLL_LOWER_20_2 布林带下轨(N=20,P=2)
AR_26 BRAR 指标中的 AR(M1=26)
pe 市盈率(总市值/净利润)
ps_ttm 市销率(TTM)
dv_ratio 股息率(%)
total_mv 总市值(万元)
ABS 收盘价的绝对值(常用于差值/收益等中间量)
SMA_10_1_close 收盘价的通达信风格平滑均线(N=10,M=1 的 SMA)
MACD_BAR MACD 柱线((DIF-DEA)*2),正负反映多空强弱
EMV_14 EMV 简易波动(N=14)
MTMMA_6 MTM 的6日均线
ma20 20日均价
turnover_rate_f 换手率(自由流通股)
REF_1_close 收盘价向后平移1期(上一交易日的收盘价)
LLV_10_close 收盘价10日滚动最低值(近10日最低收盘价)
DMI_MDI_14_6 DMI 指标的 MDI
DFMA_DIFMA_10_50_10 DFMA 的 DIF 平滑线(M=10)
total_share 总股本(万股)
high 最高价
main_board 是否主板(1=是,0=否)
chi_next_board 是否科创板(1=是,0=否)
ROE 净资产收益率
SQRT 收盘价平方根;用于尺度变换
FORCAST_12_close 收盘价在12日窗口的一元线性回归预测值(线性外推)
MACD_DIF MACD 的 DIF 线(快慢 EMA 之差,SHORT_=12,LONG_=26,M=9)
BOLL_MID_20 布林带中轨(MA20)
DMI_PDI_14_6 DMI 指标的 PDI(M1=14,M2=6)
ASIT_10_of_ASI ASI 的10日均线(M2=10)
open 开盘价
low 最低价
ma5 5日均价
float_share 流通股本(万股)

能力边界

Stock MCP 工具能帮助用户在投研工作中完成因子查询、选股和回测配置生成等任务,但每类场景有明确的能力边界。以下按四个主要场景说明 MCP 的能力与限制。

场景一:股票 / 指数信息查询

快速获取单只股票或指数的各类指标和基础信息,MCP 会自动理解用户意图,将自然语言映射到对应因子。

功能范围

  • 通过股票代码或名称获取该股票的:
    • 基础信息(行业、市值、上市日期等)
    • 行情信息(多频行情)
    • 财务指标(利润表 / 资产负债表 / 现金流量表)
    • 每日指标(估值、成长、盈利能力、风险指标等)
  • 通过指数代码查询:
    • 指数基本信息
    • 指数日线行情
  • 结合元数据表自动识别用户意图:例如,用户说“给我看下茅台的盈利能力”,系统自动选出净利润、ROE、毛利率等相关因子

功能限制

无法跨标的自动聚合或推断多个指标:例如:“给我总结 A 股盈利能力最强的行业”属于统计任务,不在该查询范围。

场景二:按指标筛选股票(选股工具)

使用自然语言筛选股票,Stock MCP 会将条件映射到具体因子,并返回符合条件的股票列表,支持共享表写入方便后续回测。

功能范围

  • 根据用户提供的自然语言筛选条件,通过元数据表找到对应因子:

    例如“选 PB 小于 1 且 ROE 大于 10% 的股票”,系统会自动映射到 pb、roe 因子

  • 支持的筛选维度包括:
    • 指标条件(filter_expr)
    • 行业过滤(industry)
    • 指数成分过滤(base_index:CSI 1000 / SZ50 / HS300)
    • 时间区间过滤
    • 必要因子校验(factors 列表与表达式匹配)
  • 返回内容:
    • 符合条件的股票列表
    • 选股数量
    • 写入共享内存表(用于后续回测)
  • 统一因子频率为日频,与因子窄表自然对齐

功能限制

  • 不支持连续满足条件的选股逻辑
    • “过去一周每天市值都 > 100 亿”
    • “连续 20 天收盘价 > MA20”

      当前仅支持:

    • “过去一周至少一天市值 > 100 亿”
  • 不支持月频/周频因子的筛选

    例如财报类因子 yoy、qoq 不支持直接出现在 filter_expr 中

  • 不支持自然语言自动推断因子本体,例如:“找增速快的股票”,必须提供可解析的条件(如 net_profit_growth > 0)
  • 不支持跨市场/跨指数组合筛选:同一条规则仅在一个指数成分池或行业内执行

场景三:单因子评价(因子测试)

对单个因子进行全面评价,包括因子收益、分层收益和行业分组回测等,用于验证因子有效性。

功能范围

  • 支持对任意单个因子进行全面评价,包括:
    • 因子收益(RankIC、PearsonIC)
    • IC 分布与稳定性
    • 分层收益
    • 多空组合收益
    • 行业分组回测
  • 支持自定义持有期(holdingPeriod)
  • 支持行业过滤
  • 支持任意时间区间(历史数据完备)

功能限制

  • 不支持多因子联合 IC 或多因子组合排序评价:单因子评价必须只有一个因子名
  • 不支持分钟级或高频因子测试:当前全部因子均为日频
  • 不自动推断因子归一化方式/收益计算方式:需要明确给定因子名称,winsorize、zscore、neutralize 需用户明确

场景四:多因子策略回测(回测配置生成)

使用自然语言描述多因子策略,Stock MCP 会生成完整的回测配置,便于后续直接运行回测。

功能范围

  • 根据用户输入的自然语言策略要求生成完整回测配置,包括:
    • 回测基础设定(日期、初始资金、benchmark)
    • 多因子列表(factors)
    • 因子权重
    • 仓位规则(如 max_stocks、equal/score 加权)
    • 调仓规则(按周几、最少持有天数)
    • 交易规则(手续费率)
    • 股票池来源(选股工具生成的共享表)
  • 自动生成唯一回测 ID 并写入回测配置
  • 检查所有参数合法性并返回完整配置 JSON

功能限制

  • 不运行回测,也不计算回测收益:MCP 只生成配置,不执行回测
  • 不自动推断因子、权重、调仓频率:用户必须明确告诉 MCP 使用哪些因子与权重。
  • 不支持除了日频多因子选股策略之外的复杂交易逻辑策略,如:
    • 趋势过滤
    • 动态仓位(如凯利比例)
    • CTA / 高频策略