OpenClaw Agent
|
9014363d6d
|
fix: 增强腾讯财经解析和日志
改进:
1. 修复引号解析逻辑(更健壮)
2. 减少字段验证从 36 到 5(只需价格字段)
3. 添加详细日志追踪解析过程
4. 记录请求 URL 和原始响应
日志关键词:
- [腾讯财经] 请求URL
- [腾讯财经] 原始响应
- [腾讯财经] 字段数量
- [腾讯财经] 成功
|
2026-03-24 09:52:25 +00:00 |
|
OpenClaw Agent
|
ec7ed6d686
|
fix: 添加内存缓存层解决数据库连接池冲突
根因:
- Task.WhenAll 并发获取多个股票价格
- 每个价格查询都访问数据库缓存
- SqlSugar 连接状态冲突:Cannot Open when State is Connecting
解决方案:
1. 添加 ConcurrentDictionary 内存缓存层
2. 先查内存缓存,命中则跳过数据库查询
3. 数据库缓存命中后写入内存缓存
4. API 获取成功后同时写入内存缓存
效果:
- 避免并发数据库查询
- 减少数据库连接压力
- 提高响应速度
|
2026-03-24 09:50:12 +00:00 |
|
OpenClaw Agent
|
8022731b34
|
fix: 增强价格获取降级链日志
记录每个数据源的尝试和结果:
- [数据源获取开始]
- [数据源] 尝试 Yahoo/腾讯/Tiingo
- [数据源] Yahoo/腾讯/Tiingo 成功/失败
- 具体错误信息
帮助定位 UPRO 等股票获取失败的原因
|
2026-03-24 09:44:15 +00:00 |
|
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 |
|