Commit Graph

52 Commits

Author SHA1 Message Date
OpenClaw Agent
3fb2403e85 fix: 增强价格获取稳定性和日志追踪
问题排查:
1. 缓存命中时验证价格有效性(Price > 0)
2. 外部 API 返回无效价格时拒绝写入缓存
3. 缓存查询层添加详细日志
4. 捕获缓存查询异常并返回 null

改进:
- 缓存价格 <= 0 时忽略缓存重新获取
- 外部 API 价格 <= 0 时抛出异常,避免污染缓存
- 详细日志追踪价格获取全流程
2026-03-24 09:35:50 +00:00
OpenClaw Agent
3768f6e747 fix: 防止价格获取并发竞态条件
问题:多个并发请求同时获取同一股票价格,导致:
1. 外部 API 被重复调用(可能被限流)
2. 部分请求失败导致收益率显示 0%

解决方案:
- 使用 ConcurrentDictionary 存储进行中的请求
- GetOrAdd 模式确保同一时间只有一个请求在获取价格
- 其他并发请求等待第一个请求的结果
- 请求完成后移除 pending 任务
2026-03-24 08:57:45 +00:00
OpenClaw Agent
6b50d7fc50 refactor: SqlSugarScope注册为Singleton实现线程安全,移除手动信号量限制 2026-03-17 09:26:26 +00:00
OpenClaw Agent
d30c3076bd fix: 添加数据库并发限制,解决SqlSugar连接状态冲突 2026-03-17 09:19:15 +00:00
OpenClaw Agent
b39044bfe1 fix: 复用YahooQuotes实例,添加并发限制防止429错误 2026-03-17 06:56:42 +00:00
OpenClaw Agent
2edac30fd8 feat: Yahoo历史数据根据timeframe和limit动态计算开始日期 2026-03-17 06:48:27 +00:00
OpenClaw Agent
a91041e168 fix: Yahoo股票代码转换,BRK.B → BRK-B(类别股用连字符) 2026-03-17 05:47:27 +00:00
OpenClaw Agent
1830b93207 refactor: 移除腾讯历史K线降级逻辑,添加废弃标记和注释说明 2026-03-17 04:30:53 +00:00
OpenClaw Agent
aa4f63455b refactor: 优化YahooMarketService,复用实例并改进异常类型 2026-03-17 04:22:00 +00:00
niannian zheng
2a6512ff48 feat(市场数据): 添加Yahoo财经服务并设为优先数据源
- 新增YahooMarketService实现股票实时价格和历史数据获取
- 更新MarketDataService优先使用Yahoo服务,腾讯财经降级为第二选择
- 添加YahooQuotesApi依赖并更新相关NuGet包版本
- 补充Yahoo服务测试用例
2026-03-17 12:06:47 +08:00
OpenClaw Agent
9f82ad0a81 fix: 腾讯历史K线接口已废弃,改进错误处理优雅降级到Tiingo 2026-03-16 09:15:12 +00:00
OpenClaw Agent
da12f6d163 fix: 修复编译错误和警告
- PortfolioFacade: 使用同步方法 GetStrategyById
- OkxMarketService: 响应模型属性改为可空类型
2026-03-15 13:18:24 +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
abcdc7110b refactor: 后端架构优化 P0-P1
P0: 移除硬编码 API Key
- MarketDataService Tiingo Key 改为强制环境变量

P1: 拆分 Entity 文件
- 从 Portfolio.cs 提取 Position.cs
- 从 Portfolio.cs 提取 Transaction.cs
- 每个实体独立文件,符合单一职责原则
2026-03-15 11:44:06 +00:00
OpenClaw Agent
267b0bd6ba feat: 添加腾讯财经历史K线数据接口
- 新增 GetStockHistoricalFromTencentAsync 方法
- 腾讯财经历史数据免费无限制,解决 Tiingo 429 限流问题
- 获取历史数据时优先使用腾讯财经,失败后降级 Tiingo
- 支持日/周/月K线数据
- 数据格式: [日期, 开盘, 收盘, 最高, 最低, 成交量]
2026-03-15 10:06:14 +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
1977dd609d fix: 请求收益曲线时自动回填历史数据
- GetNavHistoryAsync现在会自动检查是否有历史数据
- 无历史数据时自动调用BackfillNavHistoryInternalAsync
- 拆分内部回填方法,避免重复验证权限
2026-03-13 16:21:31 +00:00
niannian zheng
f5d693ac66 fix 2026-03-12 14:45:04 +08:00
447eb9ef4f 移除无用的价格Clamp检测,仅保留8位小数截断 2026-03-12 06:26:57 +00:00
a62d892b4b 添加价格范围限制,确保不超过decimal(20,8)最大范围 2026-03-12 06:11:55 +00:00
f9d24203c6 修复行情缓存字段溢出问题:价格保留8位小数,字段长度扩展为20位 2026-03-12 06:08:57 +00:00
4ce5e1b7f9 修复腾讯财经接口GBK编码报错问题:注册编码提供程序,手动解析GBK响应 2026-03-12 05:53:42 +00:00
57e9c69a87 回滚到腾讯财经行情接口 2026-03-12 05:18:46 +00:00
534ba7c343 替换股票行情接口为东方财富:返回实际交易价格,与券商显示一致,无复权偏差 2026-03-12 05:11:50 +00:00
049050d88e 简化行情缓存策略:股票固定缓存5分钟,不再区分交易时段 2026-03-12 04:43:36 +00:00
f7626b1113 添加腾讯财经接口价格日志,方便排查当日盈亏为0问题 2026-03-12 04:38:39 +00:00
ff102f70da 修复腾讯财经接口代码大小写问题:改为大写 2026-03-12 04:33:08 +00:00
ece055fc10 替换股票行情接口为腾讯财经:免费无限制,支持盘前盘后实时价格,自动降级Tiingo 2026-03-12 04:24:56 +00:00
7685782bb4 优化行情缓存策略:美股交易时段缓存15分钟,非交易时段缓存24小时,节省API配额 2026-03-12 03:33:03 +00:00
949fa8e85b 实现行情缓存系统:实时价格+历史K线双层缓存,减少API调用提升响应速度 2026-03-10 13:21:54 +00:00
1b8c98b7d6 fix: 更换汇率API为开放免费接口,解决403错误 2026-03-10 07:32:47 +00:00
658cfe90e1 fix: 移除所有IConfiguration依赖,完全从环境变量读取配置,解决编译错误 2026-03-09 09:39:02 +00:00
f2d4351145 refactor: 所有配置优先从环境变量读取,完全支持Docker环境变量注入 2026-03-09 08:56:26 +00:00
739a37f24d refactor: 所有配置改为从appsettings.json/环境变量读取,移除硬编码 2026-03-09 08:49:31 +00:00
niannian zheng
4ac8a5f063 feat(市场数据服务): 添加获取价格和历史数据的模拟方法
新增 GetPriceAsync 和 GetHistoricalDataAsync 方法到 MockMarketDataService 类中,用于模拟市场数据服务。同时添加 Microsoft.Extensions.Caching.Abstractions 包依赖以支持后续缓存功能。
2026-03-09 15:11:05 +08:00
虾球
53b4f4501e feat: 完成三个优先级任务:1. 汇率服务替换为真实数据源(带缓存和降级);2. MarketDataService增加统一入口自动路由多数据源;3. 简化PortfolioService调用逻辑 2026-03-09 06:50:22 +00:00
虾球
20ab0c5173 feat: 接入 OKX 加密货币数据源(实时价格+历史K线) 2026-03-07 03:08:46 +00:00
niannian zheng
95a29cf86a 删除股票字典表时间字段 2026-03-06 17:33:39 +08:00
虾球
5f0c0e9636 feat: 加密货币接口留空,待接入 OKX API 2026-03-06 08:50:07 +00:00
虾球
0cee3afe2f fix: 移除 GetTiingoResampleFreq 残留调用 2026-03-06 08:47:03 +00:00
虾球
647fde9219 fix: 历史数据接口和示例保持一致(移除 resampleFreq) 2026-03-06 08:36:09 +00:00
虾球
d9a8ea84c7 fix: 更新 Tiingo API Key & 统一使用 /tiingo/daily 端点 2026-03-06 08:33:55 +00:00
虾球
14b51e636a feat: 替换市场数据源为 Tiingo(移除 Alpaca) 2026-03-06 08:31:55 +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
f442f0cd1b feat(策略引擎): 实现技术指标库、Mock市场数据、吊灯止损/双均线策略、策略信号API 2026-03-05 09:46:33 +00:00
niannian zheng
2d1fbd37d8 feat: 添加策略引擎实现及相关组件
实现策略引擎核心功能,包括三种策略计算器和相关DTO定义:
1. 添加双均线策略(ma_trend)计算器
2. 添加吊灯止损策略(chandelier_exit)计算器
3. 添加风险平价策略(risk_parity)计算器
4. 定义策略类型常量类和策略配置DTO
5. 实现策略引擎服务接口和扩展方法
6. 更新项目引用和README文档
2026-03-02 14:15:34 +08:00
niannian zheng
8e75b894ad feat(市场数据): 添加Alpaca市场数据服务实现
添加IMarketDataService接口及实现,支持获取股票和加密货币的实时价格及历史数据
添加MarketDTO定义市场价格和历史数据结构
添加Alpaca.Markets和Microsoft.Extensions.Logging.Abstractions依赖包
在Program.cs中注册MarketDataService服务
2026-02-28 18:49:05 +08:00
niannian zheng
2fe0b0c134 Remove bin and obj directories from Git tracking 2026-02-24 19:25:28 +08:00