后端实现:
- 新增PortfolioNavHistory实体,记录每日净值、成本、收益率
- 实现IPortfolioNavService接口,支持净值计算和历史回填
- 支持基于交易记录完整计算历史净值(买入卖出都会更新)
- 计算统计指标:最大回撤、夏普比率、波动率
新增API:
- GET /api/v1/portfolio/{id}/nav-history - 获取净值曲线
- POST /api/v1/portfolio/{id}/nav-history/backfill - 回填历史净值
- POST /api/v1/portfolio/{id}/nav-history/calculate - 计算当日净值
数据库:
- 新增portfolio_nav_history表迁移脚本
- 支持组合级别的净值历史记录
35 lines
1.8 KiB
SQL
35 lines
1.8 KiB
SQL
-- =============================================
|
||
-- 净值历史表迁移脚本
|
||
-- 创建时间: 2026-03-13
|
||
-- 说明: 用于记录组合每日净值和收益数据
|
||
-- =============================================
|
||
|
||
-- 创建净值历史表
|
||
CREATE TABLE IF NOT EXISTS portfolio_nav_history (
|
||
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
|
||
portfolio_id VARCHAR(50) NOT NULL COMMENT '组合ID',
|
||
nav_date DATE NOT NULL COMMENT '净值日期',
|
||
total_value DECIMAL(18,4) DEFAULT 0 COMMENT '总资产价值(本位币)',
|
||
total_cost DECIMAL(18,4) DEFAULT 0 COMMENT '累计投入成本(本位币)',
|
||
nav DECIMAL(18,8) DEFAULT 1.0 COMMENT '单位净值',
|
||
daily_return DECIMAL(10,4) DEFAULT 0 COMMENT '日收益率(%)',
|
||
cumulative_return DECIMAL(10,4) DEFAULT 0 COMMENT '累计收益率(%)',
|
||
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '本位币',
|
||
position_count INT DEFAULT 0 COMMENT '持仓数量',
|
||
source VARCHAR(20) DEFAULT 'calculated' COMMENT '数据来源',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组合净值历史表';
|
||
|
||
-- 创建组合日期联合索引
|
||
CREATE INDEX idx_portfolio_date ON portfolio_nav_history(portfolio_id, nav_date);
|
||
|
||
-- 创建唯一约束(同一组合同一天只能有一条记录)
|
||
ALTER TABLE portfolio_nav_history ADD CONSTRAINT uk_portfolio_date UNIQUE(portfolio_id, nav_date);
|
||
|
||
-- 为portfolio表的total_value字段添加注释
|
||
ALTER TABLE portfolios MODIFY COLUMN total_value DECIMAL(18,4) DEFAULT 0 COMMENT '当前总市值(冗余字段,实时计算)';
|
||
|
||
-- 为portfolio表添加净值相关字段
|
||
ALTER TABLE portfolios ADD COLUMN IF NOT EXISTS initial_cost DECIMAL(18,4) DEFAULT 0 COMMENT '初始投入成本';
|
||
ALTER TABLE portfolios ADD COLUMN IF NOT EXISTS last_nav_date DATE COMMENT '最后净值计算日期';
|