AssetManager.API/migrations/001_create_nav_history_table.sql
OpenClaw Agent 05ca501f40 feat: 新增组合净值历史功能
后端实现:
- 新增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表迁移脚本
- 支持组合级别的净值历史记录
2026-03-13 16:08:59 +00:00

35 lines
1.8 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================
-- 净值历史表迁移脚本
-- 创建时间: 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 '最后净值计算日期';