MSSQL实现基金净值智能管理

1. 引言

随着互联网时代的发展,基金行业已成为金融行业中的重要组成部分。在基金的运营管理过程中,净值管理是最核心也是最重要的部分之一。传统的净值管理方式方式受限于人工干预,效率低,存在一定的风险,并且容易出现错误。因此,基于MSSQL数据库的基金净值智能管理系统应运而生,有望解决传统净值管理中出现的问题。本文着重讨论基金净值智能管理的实现方法以及具体步骤。

2. 基金净值管理的难点

2.1 受人为干扰的管理方式

传统的净值管理方式受限于人工干预,容易生产人为的错误,降低数据的准确性和可靠性。如果净值管理人员出现疏忽或操作不当,就可能会导致净值数值的失误,甚至出现财产损失。

2.2 净值计算较为繁琐

净值计算需要对基金的大量数据进行处理和计算,包括证券交易信息,成本核算信息,资产减值信息以及估价信息等,计算效率也不够高。传统净值计算需要人工干预,易出现失误,难以达到精准的净值计算结果。

3. 基金净值智能管理系统的实现

3.1 MSSQL作为基金数据的存储平台

在数据存储方面,我们可以采用MSSQL数据库作为基金数据的存储平台,该数据库系统具有较高的数据处理能力和高效的数据存储能力,能够满足基金数据管理需要。同时MSSQL数据库还支持事务处理,确保在基金数据计算和更新过程中的数据一致性性与数据完整性。

对于实时数据的采集,可以选用flume+kafka的结构方案完成数据采集。将采集得到的数据,实时导入到MSSQL数据中,形成完整的计算数据集合,有利于后续数据的组织和管理。以下是MSSQL数据库中净值管理表的存储结构样例:

CREATE TABLE [dbo].[t_fund_net](

[ACCTID] [varchar](20) NOT NULL,

[VALUEDATE] [datetime] NOT NULL,

[NAV_UNIT] [float] NULL,

[NAV_ACCUM] [float] NULL,

[ADJ_PREV_NAV_UNIT] [float] NULL,

[ADJ_PREV_NAV_ACCUM] [float] NULL,

[UPDATE_DATE] [datetime] NULL,

[UPDATE_TIME] [time](7) NULL

) ON [PRIMARY]

3.2 基金净值自动计算

基于MSSQL数据库实现基金净值的自动计算需要编写存储过程(Stored Procedures),在SQLServerAgent上定时进行计算。具体的计算过程如下所示:

1. 读取最新的基金持仓信息

2. 计算基金的单位净值、累计净值、每股净资产等

3. 更新数据库中的净值信息

在此基础上,我们还需要设计和实现一个检测程序,自动检测计算结果,如果计算结果不合法,就自动报警,并进行相关数据的回滚处理。以下是插入净值信息的存储过程:

CREATE PROCEDURE dbo.addFundNetValue

@acctid VARCHAR(20),

@valuedate DATETIME,

@nav_unit FLOAT,

@update_date DATETIME,

@update_time TIME(7)

AS

SET NOCOUNT ON

BEGIN TRY

BEGIN TRAN

DECLARE @lastUpdateDate DATETIME

SELECT @lastUpdateDate = MAX(UPDATE_DATE)

FROM t_fund_net

WHERE ACCTID = @acctid

AND VALUEDATE = @valuedate

IF @lastUpdateDate IS NOT NULL

RAISERROR ('净值信息已存在', 16, 1);

ELSE

INSERT INTO t_fund_net(ACCTID, VALUEDATE, NAV_UNIT, UPDATE_DATE, UPDATE_TIME) VALUES (@acctid, @valuedate, @nav_unit, @update_date, @update_time);

COMMIT TRAN;

END TRY

BEGIN CATCH

IF @@TRANCOUNT > 0

ROLLBACK TRAN;

DECLARE

@ErrMsg NVARCHAR(4000),

@ErrSeverity INT;

SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();

RAISERROR (@ErrMsg, @ErrSeverity, 1)

END CATCH

3.3 基金净值数据展示

基于基金净值智能管理系统,我们可以对基金净值进行实时数据展示,方便管理人员进行实时监测。同时也可以在展示界面上添加其他基金信息,如基金的投资组合和风险评估信息等,帮助管理人员进行基金投资决策。以下是基金净值数据展示页面的效果:

CREATE PROCEDURE dbo.getFundNetValue

@acctid VARCHAR(20),

@valuedate DATETIME,

@markets_wide VARCHAR(5)

AS

BEGIN

SELECT

VALUEDATE,

NAV_UNIT

FROM

t_fund_net

WHERE ACCTID = ISNULL(@acctid, ACCTID)

AND VALUEDATE = ISNULL(@valuedate, VALUEDATE)

ORDER BY

VALUEDATE ASC

DECLARE @marketData TABLE (

MARKETNAME VARCHAR(50),

LAST_IDX NUMERIC(18, 9)

)

INSERT INTO @marketData

EXECUTE [dbo].[sp_basic_market_info] @markets_wide

SELECT

cl.ACCTNAME,

fi.FUNDID,

f.TNAME,

SHARES / 1000000 SHARES,

SHARES * f.F_UNITAMT / 1000000 SHRV,

price.LAST_IDX PRICE,

CONVERT(INT, SHARES) * price.LAST_IDX VALUE

FROM

(SELECT ACCOUNTID, COUNT(*) ACCTQTY, SUM(SHARES) SHARES FROM t_client_position WHERE ACCTID = ISNULL(@acctid, ACCTID) GROUP BY ACCOUNTID) cp

JOIN t_client cl

ON cl.ACCOUNTID = cp.ACCOUNTID

JOIN t_fund_account fa

ON fa.CLIENTID = cl.CLIENTID

AND fa.ACCOUNTID = cp.ACCOUNTID

JOIN t_fund_info fi

ON fi.CURRENCYID = fa.CURRENCYID

AND fi.ACCOUNTID = ISNULL(@acctid, fa.ACCOUNTID)

JOIN t_fund f

ON f.FUNDID = fi.FUNDID

JOIN t_macro_ptprice price

ON price.SYMBOL = f.SYMBOL

AND price.PTID = 'AVG'

UNION ALL

SELECT

''

, ''

, marketData.MARKETNAME

, ''

, ''

, marketData.LAST_IDX

, ''

FROM

@marketData marketData

END

4. 总结

基金净值管理对基金公司的运营管理具有重要意义。通过实现基于MSSQL数据库的基金净值智能管理系统,可以解决传统净值管理方式中存在的问题,提高数据的准确性和可靠性,提高工作效率。在管理基金净值的过程中,各种数据采集和数据计算技术都是非常关键的。当然,这一切都建立在一个稳定和可靠的数据存储和管理平台之上。如何建立一个可靠和稳定的数据库体系,并且发挥它的性能,是基金净值智能管理的关键之一。

数据库标签