OpenClaw Agent
c0accdc903
feat: 用户访问时自动触发当日净值计算
...
修改 GetNavHistoryAsync:
- 检查是否存在今日净值记录
- 如果不存在,自动调用 CalculateAndSaveDailyNavAsync
- 捕获异常避免影响历史数据查询
收益:
- 用户每次访问收益曲线都能获取最新数据
- 无需手动触发或定时任务
2026-03-24 06:22:28 +00:00
OpenClaw Agent
1c3add27ef
fix: 修复收益曲线统计数据与组合详情不一致的问题
...
问题:
- 收益曲线接口 totalReturn 直接取净值历史最后一条的 cumulativeReturn
- 如果净值历史数据过时,统计信息会与当前持仓数据不一致
修复:
- 在 GetNavHistoryAsync 中检查净值历史最后一条是否为今天
- 如果不是,获取当前持仓数据实时计算累计收益率
- 更新 statistics.TotalReturn 为实时值
影响:
- 组合详情 historicalChange 和收益曲线 totalReturn 将保持一致
2026-03-24 06:14:27 +00:00
OpenClaw Agent
7abb8796ec
fix: 恢复GetTotalAssets同步方法以满足接口定义
2026-03-17 08:23:31 +00:00
OpenClaw Agent
65abd50108
perf: 优化首页接口性能,批量并行获取价格
2026-03-17 08:18:56 +00:00
niannian zheng
2a6512ff48
feat(市场数据): 添加Yahoo财经服务并设为优先数据源
...
- 新增YahooMarketService实现股票实时价格和历史数据获取
- 更新MarketDataService优先使用Yahoo服务,腾讯财经降级为第二选择
- 添加YahooQuotesApi依赖并更新相关NuGet包版本
- 补充Yahoo服务测试用例
2026-03-17 12:06:47 +08:00
OpenClaw Agent
5bc318725d
feat: 添加组合更新接口,支持修改名称/策略/状态
2026-03-17 01:50:47 +00:00
OpenClaw Agent
79105c339d
fix: 买入后持仓数量和均价正确保存到数据库
2026-03-16 09:08:47 +00:00
OpenClaw Agent
71aa7211d6
fix: 首页组合收益率实时计算
2026-03-16 08:56:14 +00:00
OpenClaw Agent
c7712e57bb
feat: 组合列表增加今日涨跌额和持仓数量
...
- PortfolioListItem 新增 TodayProfit、TodayProfitCurrency 字段
- GetPortfolios 计算今日盈亏(从净值历史)
- Tags 显示持仓数量(如 '运行中 · USD · 3只')
2026-03-15 23:51:32 +00:00
OpenClaw Agent
dcd212efa7
feat: 自动触发净值计算
...
1. 创建组合后,如有持仓则自动计算净值
2. 创建交易后,自动更新当日净值
3. 异步执行,不阻塞主流程
2026-03-15 23:48:11 +00:00
OpenClaw Agent
74e5f85579
refactor: 移除 calculateDailyNav 接口
...
前端暂不需要,后续有需求再加
2026-03-15 14:43:35 +00:00
OpenClaw Agent
f7d346c0ae
fix: API路由重构以匹配前端期望
...
1. 创建交易: POST /api/v1/portfolio/{id}/transactions -> POST /api/v1/portfolio/transactions
- portfolioId 改为在 body 中传递
2. 新增计算净值端点: POST /api/v1/portfolio/{id}/nav-history/calculate
前端 API 格式已完全对齐
2026-03-15 14:35:26 +00:00
OpenClaw Agent
d4c58c8a08
fix: 添加 /api/v1/portfolio/assets 端点
...
- IPortfolioFacade 添加 GetTotalAssetsAsync 方法
- PortfolioFacade 实现 GetTotalAssetsAsync
- PortfolioController 添加 [HttpGet("assets")] 端点(放在 {id} 路由之前)
2026-03-15 13:58:22 +00:00
OpenClaw Agent
41ff4a2135
fix: 修复 CurrentPrice 赋值错误
...
PortfolioService.cs: CurrentPrice 应该赋值为当前价格,而非今日盈亏
2026-03-15 13:49:54 +00:00
niannian zheng
49b9adfdab
fix 字段名称错误
2026-03-15 21:44:48 +08:00
OpenClaw Agent
60f3b487ff
fix: 修复 PortfolioService 和 PortfolioNavService 变量命名
...
- 统一局部变量使用 camelCase(C# 规范)
- 修复 DTO 属性名引用
- NavItem -> NavHistoryItem
- 修复 for 循环变量名
2026-03-15 13:31:49 +00:00
OpenClaw Agent
da12f6d163
fix: 修复编译错误和警告
...
- PortfolioFacade: 使用同步方法 GetStrategyById
- OkxMarketService: 响应模型属性改为可空类型
2026-03-15 13:18:24 +00:00
OpenClaw Agent
61e3023837
fix: 添加缺失的 StrategySignalResponse DTO
...
- 新增 StrategySignalResponse 类(策略信号响应)
- 新增 SignalAction 类(信号行动建议)
- 修正 PortfolioFacade 属性名为 PascalCase
2026-03-15 13:14:22 +00:00
OpenClaw Agent
4ce29a1036
refactor: 架构优化 P0-P3
...
P0 - 安全修复:
- 移除硬编码 API Key,启动时校验必填环境变量
P1 - 高优先级:
- Entity 拆分:Position.cs, Transaction.cs 独立文件
- Controller Facade 封装:IPortfolioFacade 减少依赖注入
P2 - 中优先级:
- Repository 抽象:IPortfolioRepository, IMarketDataRepository
- MarketDataService 拆分:组合模式整合 Tencent/Tiingo/OKX
P3 - 低优先级:
- DTO 命名规范:统一 PascalCase
- 单元测试框架:xUnit + Moq + FluentAssertions
2026-03-15 12:54:05 +00:00
OpenClaw Agent
34f06ce941
perf: 优化历史价格获取,优先从缓存表查询
...
1. 先从 market_kline_cache 缓存表查特定日期价格
2. 缓存命中直接返回,减少 API 调用
3. 缓存未命中才调用 GetHistoricalDataAsync
4. 获取历史数据从 365 天减少到 30 天
5. 大幅减少 Tiingo API 消耗
2026-03-15 10:12:20 +00:00
OpenClaw Agent
da86aa43e6
fix: 行情获取失败时不写入错误数据,添加 429 限流重试机制
...
1. GetHistoricalPriceAsync 返回 decimal? 而非 decimal
- 价格获取失败时返回 null 而非 0
2. BackfillNavHistoryInternalAsync 检查价格有效性
- 任何持仓价格获取失败时跳过该日期
- 不写入 totalValue=0 的错误数据
3. MarketDataService 添加 GetWithRetryAsync 方法
- 处理 429 Too Many Requests 限流
- 最多重试 3 次,指数退避
2026-03-15 10:02:52 +00:00
OpenClaw Agent
6a757f56da
fix: 添加 PortfolioNavHistory 到 CodeFirst 初始化,删除手动迁移脚本
...
- DatabaseService.InitializeDatabase() 添加 PortfolioNavHistory
- 删除 migrations/ 目录,使用 CodeFirst 自动建表
2026-03-15 08:29:05 +00:00
OpenClaw Agent
849db7d2b2
feat: 交易后自动触发净值历史重算
...
- CreateTransaction完成后删除该交易日期之后的净值记录
- 下次请求收益曲线时自动重新计算
- 修改CreateTransaction为async方法
- 注入IPortfolioNavService到PortfolioService
流程:
1. 用户买入/卖出 → 创建交易记录
2. 删除交易日期之后的净值历史
3. 下次请求收益曲线 → 自动回填缺失数据
2026-03-13 16:53:02 +00:00
OpenClaw Agent
1977dd609d
fix: 请求收益曲线时自动回填历史数据
...
- GetNavHistoryAsync现在会自动检查是否有历史数据
- 无历史数据时自动调用BackfillNavHistoryInternalAsync
- 拆分内部回填方法,避免重复验证权限
2026-03-13 16:21:31 +00:00
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
9936cbc7f2
优化总资产接口:总收益率保留两位小数
2026-03-12 03:31:04 +00:00
fb5faeee81
修复用户本位币为空字符串时的默认值逻辑,兼容null和空两种情况
2026-03-10 12:48:28 +00:00
dcb80d9b85
添加总资产换算日志,方便排查币种转换问题
2026-03-10 10:18:23 +00:00
146212639b
增加行情接口降级机制:拉不到实时价格时使用成本价作为 fallback
2026-03-10 09:25:43 +00:00
1d99099fca
feat: 交易记录接口增加stockCode字段返回
2026-03-10 07:23:34 +00:00
niannian zheng
10132f9b82
添加 using Microsoft.Extensions.Logging;
2026-03-10 14:02:01 +08:00
7ea616c43d
fix: 注入ILogger解决当前上下文中不存在_logger的错误
2026-03-10 05:59:40 +00:00
bd7f4d2a3d
fix: 处理策略config字段双层转义的问题
2026-03-10 05:45:07 +00:00
02c0864393
feat: 创建组合选择策略时自动带入策略配置的标的作为初始持仓
2026-03-10 05:42:45 +00:00
1a529387e7
fix: 修复变量名冲突错误 CS0136
2026-03-10 03:57:59 +00:00
a23937eac8
feat: 增加组合币种校验,交易币种必须和组合本位币一致
2026-03-10 03:41:41 +00:00
35222fbf26
feat: 组合详情页支持多币种实时汇率换算,统一转换为组合本位币显示
2026-03-10 03:33:58 +00:00
ba60dbc72c
feat: 后端增加卖出操作校验,只能卖出已有持仓且数量不超过持仓
2026-03-10 02:48:55 +00:00
c2ed8266cf
feat: 支持transactionDate字段,前端传入的交易日期会自动赋值给TransactionTime
2026-03-10 02:17:36 +00:00
658cfe90e1
fix: 移除所有IConfiguration依赖,完全从环境变量读取配置,解决编译错误
2026-03-09 09:39:02 +00:00
niannian zheng
52af47b41e
build: 更新 Microsoft.Extensions.Configuration.Abstractions 依赖版本
...
将 AssetManager.Data 和 AssetManager.Services 项目中的 Microsoft.Extensions.Configuration.Abstractions 包版本统一更新至 10.0.3,以保持依赖一致性
2026-03-09 17:07:25 +08:00
f2d4351145
refactor: 所有配置优先从环境变量读取,完全支持Docker环境变量注入
2026-03-09 08:56:26 +00:00
739a37f24d
refactor: 所有配置改为从appsettings.json/环境变量读取,移除硬编码
2026-03-09 08:49:31 +00:00
虾球
53b4f4501e
feat: 完成三个优先级任务:1. 汇率服务替换为真实数据源(带缓存和降级);2. MarketDataService增加统一入口自动路由多数据源;3. 简化PortfolioService调用逻辑
2026-03-09 06:50:22 +00:00
虾球
8830dd17ae
refactor: 架构整改 - Ticker 逻辑移到 Service 层,DTO 独立
2026-03-06 10:06:31 +00:00
niannian zheng
b5499ef7fe
refactor: 将模型属性改为可为空类型以增强健壮性
...
- 修改ApiResponse、RiskParityConfig等DTO类的属性为可空类型
- 在策略计算器中添加空值检查逻辑
- 更新服务层代码处理可能的空值情况
- 添加发布配置文件FolderProfile.pubxml
2026-03-06 15:51:59 +08:00
虾球
567504119c
feat: 完成 P1 任务 - 今日盈亏、风险平价补全、Mock 数据 PreviousClose
2026-03-06 06:00:38 +00:00
fanfpy
4816980d62
feat: 完成 P0-1 实时价格/盈亏计算和 P0-2 汇率服务接口预留
2026-03-05 11:28:49 +00:00
fanfpy
879e500ff9
fix(记账): 支持AssetType、使用实际买入时间、交易状态设为completed
2026-03-05 10:15:00 +00:00
niannian zheng
fe781db417
refactor(策略): 将标签存储格式从JSON数组改为逗号分隔字符串
...
修改策略标签的存储格式,从JSON数组序列化改为简单的逗号分隔字符串,简化数据存储和处理逻辑。同时更新相关控制器和服务层的代码以适应这一变更。
2026-03-02 17:29:56 +08:00