↓ 跳过正文
  1. Posts/

基金估值系统内部设计揭秘:数据库表结构、估值规则引擎、批处理架构和异常处理机制

基金估值系统内部设计揭秘:数据库表结构、估值规则引擎、批处理架构和异常处理机制
#

投资者每天看到基金净值:

1.3526

实际上背后不是一个简单公式。

大型基金公司的估值系统每天晚上需要处理:

  • 数万只证券
  • 数十万个持仓记录
  • 数百万条行情数据
  • 数千条估值规则
  • 多个外围系统接口

最终生成:

基金资产净值 NAV

这个过程类似银行核心系统的日终批处理。


一、基金估值系统在整个架构中的位置
#

一个完整基金IT架构:

                 市场数据系统

                      |
                      ↓

交易系统 ----→ 组合管理系统

                      |
                      ↓

                估值系统

                      |
          +-----------+------------+

          ↓                        ↓

     基金会计系统              风险系统


          ↓

       托管银行


          ↓

          TA系统

          ↓

       投资者

估值系统处于:

交易事实 → 财务价值

之间。


二、估值系统不是数据库,而是一套金融计算平台
#

很多人认为:

基金估值:

持仓 × 市价

实际上只是最简单情况。

真实估值:

资产对象

+

市场数据

+

估值模型

+

会计规则

+

监管规则

共同计算。


例如股票:

股票数量

×

收盘价

简单。

但是债券:

面值

+

票息

+

应计利息

+

剩余期限

+

收益率曲线

+

信用调整

非标资产:

现金流预测

+

折现模型

+

风险调整

三、估值系统核心数据库设计
#

大型机构通常不会只建一个表。

典型设计:


1. 产品主表 Product
#

保存基金基本信息:

PRODUCT_INFO

字段:

字段含义
PRODUCT_ID产品编号
PRODUCT_NAME产品名称
PRODUCT_TYPE基金类型
CURRENCY币种
NAV_DATE估值日期

例如:

000001

华夏成长基金

2. 资产证券主表 Security Master
#

这是整个估值系统最重要的表。

SECURITY_MASTER

保存:

证券代码

证券名称

市场

证券类型

币种

估值类别

例如:

600519

贵州茅台

A股

股票

为什么需要Security Master?

因为不同系统代码不同:

交易系统:

600519.SH

行情系统:

600519

托管系统:

CN600519

估值系统必须统一映射。


3. 持仓表 Position
#

核心表:

POSITION_DETAIL

记录:

基金ID

证券ID

数量

成本

持仓日期

例如:

基金A

持有:

贵州茅台

100000股

成本:

1400元

4. 行情表 Market Price
#

MARKET_PRICE

保存:

证券

日期

价格

来源

例如:

600519

2026-09-01

1500元

交易所

5. 估值结果表
#

VALUATION_RESULT

输出:

基金

证券

数量

单位价格

资产价值

例如:

基金A

贵州茅台

100000股

1500

150000000

四、估值规则引擎:系统真正的大脑
#

大型基金估值不是写死代码。

而是:

规则配置。


例如:

股票规则:

IF

Security_Type = STOCK


THEN

Use Closing Price

债券:

IF

Security_Type = BOND


THEN

Use ChinaBond Valuation

停牌股票:

IF

Suspension = YES


THEN

Use Alternative Pricing Model

因此估值系统通常有:

RULE_MASTER

RULE_DETAIL

RULE_PARAMETER

五、估值规则为什么必须动态配置?
#

因为监管不断变化。

例如:

以前:

停牌股票

使用最后交易价

后来:

采用指数收益法调整

如果写死程序:

每次修改需要:

开发

测试

上线

风险巨大。


规则引擎:

只需要修改:

配置参数

六、日终Batch架构
#

基金估值不是实时计算。

主要采用:

Batch Processing

每天:

15:00

市场关闭。

17:00:

启动:

NAV Batch Job

典型任务:

JOB001

行情导入


JOB002

持仓同步


JOB003

证券估值


JOB004

收益计算


JOB005

费用计提


JOB006

NAV计算


JOB007

数据发送托管

七、任务调度系统
#

大型机构一般使用:

Scheduler

例如:

Job A

完成

↓

启动 Job B

↓

完成

↓

启动 Job C

形成:

DAG任务链。


例如:

行情完成

       ↓

持仓完成

       ↓

估值完成

       ↓

会计完成

       ↓

NAV完成

八、估值系统如何处理几十万资产?
#

核心技术:

分批计算
#

例如:

10万个资产:

拆成:

Batch 1

股票


Batch 2

债券


Batch 3

基金


Batch 4

其他资产

并行计算
#

架构:

Master

 |

 +---- Worker1

 +---- Worker2

 +---- Worker3

 +---- Worker4

类似:

证券交易系统中的:

交易撮合集群。


九、估值异常处理内幕
#

真实生产环境每天都会报警。


情况1:
#

持仓没有价格

基金:

持有股票A


行情:

没有收盘价

系统:

进入异常池

人工处理。


情况2:
#

基金公司和托管持仓不一致

基金:

100万股

托管:

99万股

系统:

NAV禁止发布

情况3:
#

估值变化异常

昨天:

1.0000

今天:

1.5000

涨幅:

50%

触发:

NAV异常检查

十、基金公司为什么晚上需要大量人工?
#

很多流程无法完全自动化。

例如:

停牌股票:

机器只能发现:

没有价格

但是:

为什么没有?

如何估?

需要:

基金经理

估值委员会

风控人员

共同判断。


十一、估值系统和托管系统的数据交换
#

典型接口:

基金估值系统

        |

        ↓

文件接口/API

        |

        ↓

托管银行系统

传输:

持仓文件

估值结果

资产负债表

NAV文件

格式可能:

XML

CSV

固定长度文本

数据库接口

十二、为什么大型基金公司喜欢自研估值系统?
#

因为估值规则差异巨大。

例如:

公募基金:

标准化

私募:

灵活

保险资管:

长期资产

银行理财:

非标资产

一个系统很难全部覆盖。

因此大型机构通常:

核心估值平台

+

业务规则插件

+

外围接口

十三、从证券IT角度看,估值系统和交易系统有什么不同?
#

交易系统:

目标:

快

关注:

毫秒级响应

估值系统:

目标:

准

关注:

财务一致性

交易:

TPS

估值:

Accuracy

十四、一晚上完整技术链路
#

真实生产:

15:00

交易结束


↓

15:30

行情接收


↓

16:30

持仓冻结


↓

18:00

估值批处理


↓

20:00

会计生成


↓

22:00

托管复核


↓

23:00

异常处理


↓

24:00

NAV发布

结尾:基金净值背后的金融计算机系统
#

投资者看到:

1.3526

实际上经历:

交易系统

↓

组合系统

↓

证券主数据

↓

行情系统

↓

估值规则引擎

↓

估值数据库

↓

基金会计

↓

托管审核

↓

TA系统

↓

投资者APP

基金净值不是一个数字。

它是一条每天重复运行的:

金融数据生产流水线。


相关文章