AssetManager.API/AssetManager.Data
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
..
AssetManager.Data.csproj build: 更新 Microsoft.Extensions.Configuration.Abstractions 依赖版本 2026-03-09 17:07:25 +08:00
DatabaseExtensions.cs Remove bin and obj directories from Git tracking 2026-02-24 19:25:28 +08:00
DatabaseService.cs 实现行情缓存系统:实时价格+历史K线双层缓存,减少API调用提升响应速度 2026-03-10 13:21:54 +00:00
MarketKlineCache.cs 修复decimal字段定义错误:统一价格字段为decimal(18,8),成交量为decimal(24,8) 2026-03-12 06:22:52 +00:00
MarketPriceCache.cs 修复decimal字段定义错误:统一价格字段为decimal(18,8),成交量为decimal(24,8) 2026-03-12 06:22:52 +00:00
Portfolio.cs refactor: 将模型属性改为可为空类型以增强健壮性 2026-03-06 15:51:59 +08:00
PortfolioNavHistory.cs feat: 新增组合净值历史功能 2026-03-13 16:08:59 +00:00
README.md Remove bin and obj directories from Git tracking 2026-02-24 19:25:28 +08:00
SqlSugarConfig.cs refactor: 所有配置优先从环境变量读取,完全支持Docker环境变量注入 2026-03-09 08:56:26 +00:00
Strategy.cs refactor: 将模型属性改为可为空类型以增强健壮性 2026-03-06 15:51:59 +08:00
TiingoTicker.cs feat: TiingoTicker 预留 Name 字段,支持中文名搜索 2026-03-06 09:50:27 +00:00
User.cs refactor: 将模型属性改为可为空类型以增强健壮性 2026-03-06 15:51:59 +08:00

AssetManager 数据库使用说明

数据库配置

数据库连接字符串在 SqlSugarConfig.cs 中配置:

ConnectionString = "server=localhost;Database=assetmanager;Uid=root;Pwd=your_password;CharSet=utf8mb4;"

请根据实际情况修改:

  • server: MySQL服务器地址
  • Database: 数据库名称
  • Uid: 用户名
  • Pwd: 密码

数据库实体类

用户相关

  • User: 用户基本信息
  • WechatUser: 微信用户信息

资产相关

  • Asset: 总资产数据
  • Holding: 持仓组合数据

策略相关

  • Strategy: 策略模板
  • StrategyTag: 策略标签
  • StrategyParameter: 策略参数
  • UserStrategy: 用户自定义策略

投资组合相关

  • Portfolio: 投资组合
  • Position: 持仓明细
  • Transaction: 交易记录

使用方法

1. 自动初始化(推荐)

Program.cs 中已经配置了自动初始化:

builder.Services.AddDatabase();

应用启动时会自动创建所有数据库表。

2. 手动初始化

运行 InitDatabase.cs 中的 Main 方法:

InitDatabase.Main();

这会创建所有表并插入示例数据。

3. 在Service中使用

在Service中注入 DatabaseServiceISqlSugarClient

public class AssetService : IAssetService
{
    private readonly ISqlSugarClient _db;
    
    public AssetService(ISqlSugarClient db)
    {
        _db = db;
    }
    
    public List<Holding> GetHoldings()
    {
        return _db.Queryable<Holding>().ToList();
    }
}

Code First 模式

使用 SqlSugar 的 Code First 模式,通过实体类自动创建数据库表:

  • 实体类使用 [SugarTable] 特性指定表名
  • 属性使用 [SugarColumn] 特性配置列
  • 主键使用 IsPrimaryKey = true
  • 自增主键使用 IsIdentity = true
  • 列名映射使用 ColumnName

数据库表结构

users 表

  • 用户基本信息、统计数据、会员等级等

wechat_users 表

  • 微信用户绑定信息、OpenID、UnionID等

assets 表

  • 总资产数据、今日收益、总收益率等

holdings 表

  • 持仓组合数据、状态、图标样式等

strategies 表

  • 策略模板、风险等级、描述等

strategy_tags 表

  • 策略标签关联

strategy_parameters 表

  • 策略参数配置

user_strategies 表

  • 用户自定义策略配置

portfolios 表

  • 投资组合基本信息

positions 表

  • 持仓明细、盈亏计算等

transactions 表

  • 交易记录、状态跟踪等