WrBug and Cursor
b616e10ceb
feat(skills): 添加 check-i18n-keys 技能并补全多语言 key
...
- 按 Cursor Agent Skills 规范:技能目录含 SKILL.md 与 scripts/
- 多语言检查脚本:扫描 t() 引用,对比 zh-CN/zh-TW/en common.json
- 补全缺失 key:common.create/copy/copySuccess/copyFailed、
leaderList.openDetailFailed、leaderDetail.market、
filteredOrdersList.orderDetails、filteredOrdersList.filterTypes.keywordFilter
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 23:17:27 +08:00
WrBug
d07c4c2c5e
fix: improve deployment info display
...
- Add admin reset password key to deployment completion info
- Fix color code display by adding -e flag to echo commands
- Display admin reset key in plaintext for easy reference
2026-02-01 03:17:58 +08:00
WrBug
7485e2ce24
feat: add interactive deployment script with one-liner installation
...
- Add deploy-interactive.sh: Interactive deployment script with automatic configuration
- Auto-generate secure random keys (JWT, admin reset key, crypto key, DB password)
- Smart .env detection for quick updates without reconfiguration
- Random port generation (10000-60000) for SERVER_PORT default
- Interactive prompts with clear defaults and auto-generation hints
- Automatic docker-compose.prod.yml download from GitHub
- Health check and deployment verification
- Add deploy-interactive-README.md: Comprehensive deployment guide
- One-liner installation commands (curl/wget)
- Quick update workflow for existing deployments
- Detailed feature explanations and usage examples
- Update README.md & README_EN.md: Add one-liner installation section
- Automatic working directory creation (~polyhermes)
- Simplified deployment process for new users
- Clear benefits and features list
Features:
- 📁 Auto-creates ~/polyhermes working directory
- 🔐 Generates secure random secrets automatically
- ⚡ Quick update mode: skip config if .env exists
- 🚀 One command from zero to running
- 🌐 Downloads latest docker-compose config from GitHub
- ✅ Full health check and verification
2026-02-01 03:12:27 +08:00
WrBug
8f52b5016a
feat: 将回测任务详情改为 Modal 方式展示
...
- 将任务详情从页面跳转改为 Modal 弹窗展示
- 在详情 Modal 中添加完整的统计信息、配置信息、图表和交易记录
- 修复统计数据显示:添加 totalTrades 字段,修复空值处理
- 将'创建跟单'按钮固定在 Modal 底部 footer
- 修复 Modal 滚动问题,确保内容可以正常滚动
- 修复编译错误:删除未使用的 navigate 导入
- 添加调试日志便于问题排查
2026-01-31 22:57:07 +08:00
WrBug
5c0808c2cb
feat: 添加从回测任务创建跟单配置功能
...
- 在回测任务列表页和详情页添加'创建跟单'按钮
- 实现从回测任务配置自动填充到跟单配置表单
- 复用 AddModal 组件,支持 preFilledConfig 参数预填充
- 修复配置字段从 BacktestConfigDto 获取的问题
- 列表页点击按钮时先获取任务详情以获取配置信息
- 添加调试日志便于问题排查
- 更新多语言文案:'一键创建跟单配置' -> '创建跟单'
2026-01-31 22:23:44 +08:00
WrBug
9d01c120e5
fix: 修复回测任务恢复逻辑和分页问题
...
- 修复新建任务被误判为恢复任务的问题:将 lastProcessedTradeIndex 默认值从 0 改为 null
- 修复页码计算错误:统一页码从 0 开始,确保新任务的 offset 为 0
- 修复恢复任务时跳过已处理条目的逻辑
- 添加数据库迁移文件 V30,将现有新任务的索引值改为 NULL
2026-01-31 21:45:02 +08:00
WrBug
ec8cfeac77
fix: 修复回测分页起始位置错误
...
- 修复新回测任务从第1页开始,导致 offset=100
- 应该从第0页开始,offset=0
- 修复后不会跳过前100条交易数据
Bug原因:
- BacktestExecutionService startPage 初始化为 1
- offset = page * size = 1 * 100 = 100
- 导致跳过前100条交易
2026-01-31 21:25:56 +08:00
WrBug
7c833f1e9b
fix: 资金变化图始终显示所有交易数据
...
- 添加 allTrades 状态存储所有交易数据
- 添加 fetchAllTrades 方法获取所有数据(size=10000)
- 图表使用 allTrades 而不是分页的 trades
- 修复图表因分页只显示部分数据的问题
2026-01-31 21:15:09 +08:00
WrBug
08cc30a90f
feat: 移除回测交易记录的盈亏列
...
- 移除盈亏列,进一步简化交易记录表格
- 盈亏信息已在统计卡片和图表中展示
2026-01-31 21:13:39 +08:00
WrBug
8288cd7579
feat: 移除回测交易记录的手续费列
...
- 移除手续费列,简化交易记录表格
- 手续费已包含在盈亏计算中,无需单独显示
2026-01-31 21:12:49 +08:00
WrBug
55da551971
fix: 修复回测统计计算空列表异常
...
- 修复 calculateStatistics 在 trades 为空时的 IndexOutOfBoundsException
- 添加空列表检查,避免访问 trades[0]
- 确保回测任务即使没有交易记录也能正常完成
2026-01-31 21:10:10 +08:00
WrBug
ff3b24b50e
fix: 优化回测交易记录显示
...
- 盈亏颜色逻辑:仅盈利(>0)显示绿色,亏损(<0)显示红色,持平(=0)无颜色
- 手续费显示:确保null值显示为 $0.00
- 遵守绿涨红跌原则
2026-01-31 20:58:13 +08:00
WrBug
88cae4018a
fix: 修复 V29 migration SQL 语法兼容性
...
- 移除 DROP COLUMN IF EXISTS(仅 MySQL 8.0.29+ 支持)
- 使用标准 DROP COLUMN 语法(MySQL 5.7+ 兼容)
- 添加 Flyway 清理脚本
2026-01-31 20:51:26 +08:00
WrBug
96fbc3f720
feat: 回测系统优化 - 清理字段、移动端适配、缓存优化
...
## 主要改动
### 1. 回测字段清理
- 删除 BacktestCreate.tsx(未使用,创建使用 modal)
- 移除不适用于回测的字段:
- priceTolerance, delaySeconds(回测使用历史数据)
- minOrderDepth, maxSpread(无历史订单簿数据)
- minPrice, maxPrice, maxPositionValue(回测中无实际意义)
- maxMarketEndDate(意义不大)
- 更新相关 Entity、DTO、Service
- 添加数据库 migration(V29)
### 2. 移动端响应式适配
- BacktestList:筛选器、表格、Modal、表单响应式布局
- BacktestDetail:详情卡片、统计信息、按钮响应式
- 使用 useMediaQuery hook,断点 768px
- 支持手机、平板、桌面多种设备
### 3. 已结算市场缓存优化
- MarketPriceService 添加 Caffeine 缓存
- 缓存已结算市场价格,避免重复 RPC 调用
- 预计 RPC 请求减少 ~78.6%,性能提升显著
- 添加缓存统计和管理方法
### 4. UI 修复
- 修复 BacktestDetail 停止按钮文本
- 更新多语言翻译(supportSell → 跟单卖出)
## 性能收益
- 回测场景 RPC 调用减少 78.6%
- 回测执行时间预计减少 11秒(14秒 → 3秒)
- 移动端用户体验显著提升
2026-01-31 20:45:40 +08:00
WrBug
fd25821e39
fix: 优化回测功能UI和修复问题
...
## 主要修改
### UI 优化
- 将回测功能移到跟单交易菜单下作为子菜单
- 创建回测改为使用 Modal 方式(移除独立页面)
- 优化导航路径,使用 useNavigate 替代 window.location.href
### 功能修复
- 修复 API 路径问题:移除重复的 /api 前缀(/api/backtest -> /backtest)
- 修复 copyRatio 输入框单位:改为百分比输入(100 表示 100%),与跟单配置保持一致
- 修复回测列表中 leader 列显示为空的问题:优先显示 leaderName,为空时显示 leaderAddress
### 多语言完善
- 补充缺失的多语言 key:
- common.ascending / common.descending / common.day
- backtest.sortBy / backtest.sortOrder / backtest.createdAt
- backtest.copyRatioTooltip / backtest.copyRatioPlaceholder
- 以及其他表单验证相关的 key
- 为中文简体、中文繁体、英文三种语言都添加了完整的翻译
## 修改的文件
- frontend/src/App.tsx - 移除 BacktestCreate 路由
- frontend/src/components/Layout.tsx - 调整菜单结构
- frontend/src/pages/BacktestList.tsx - Modal 创建、修复 leader 显示
- frontend/src/pages/BacktestDetail.tsx - 优化导航
- frontend/src/pages/BacktestCreate.tsx - 同步 copyRatio 修改
- frontend/src/services/api.ts - 修复 API 路径
- frontend/src/locales/* - 补充多语言配置
2026-01-31 07:46:16 +08:00
WrBug
cdd02e9f3d
feat: 实现回测功能
...
## 功能概述
实现完整的回测功能,支持基于历史数据模拟跟单策略的执行效果。
## 后端实现
- 数据库:新增 backtest_task 和 backtest_trade 表(V27迁移脚本)
- 实体类:BacktestTask、BacktestTrade
- Repository:BacktestTaskRepository、BacktestTradeRepository
- Service:
- BacktestService:回测任务管理(CRUD)
- BacktestDataService:从 Polymarket Data API 获取历史交易数据
- BacktestExecutionService:回测算法核心实现
- BacktestPollingService:定时轮询执行回测任务
- Controller:BacktestController(6个API接口)
- DTO:BacktestDto、TradeData
- 错误码:新增回测相关错误码和国际化消息
## 前端实现
- 页面组件:
- BacktestList:回测任务列表
- BacktestCreate:创建回测任务
- BacktestDetail:回测详情(含图表)
- BacktestChart:资金曲线图表(使用 ECharts)
- 类型定义:backtest.ts
- API 服务:集成所有回测接口
- 国际化:支持中英文
## 核心特性
- 回测天数限制:1-15 天
- 数据获取:直接从 Polymarket Data API 获取历史交易(不使用缓存表)
- 任务执行:同一时刻只执行一个任务,按创建时间顺序执行最早创建的任务
- 回测算法:完整实现市场结算、卖出匹配、价格容忍度、每日订单限制等规则
- 实时进度:支持任务进度更新和实时轮询
## 文档更新
- BACKTEST_PRD.md:产品需求文档
- BACKTEST_TECHNICAL_DESIGN.md:技术设计文档
- BACKTEST_REVIEW_CHECKLIST.md:设计评审检查清单
## 其他修改
- 移除 max_position_count 配置(V26迁移脚本)
- 移除 BacktestSyncService(不再需要实时同步)
- 修复前后端编译错误
2026-01-31 07:27:36 +08:00
WrBug
fabbd81f22
Merge branch 'main' into backtest
2026-01-31 01:06:54 +08:00
WrBug and GitHub
ace32b37cf
Merge pull request #26 from WrBug/remove-telegram-notify-workflow
...
chore: 移除 Telegram PR 合并通知工作流
2026-01-31 01:01:23 +08:00
WrBug
f1eae8a40b
chore: 移除 Telegram PR 合并通知工作流
2026-01-31 00:59:45 +08:00
WrBug
ca655f351d
docs: 添加 v2.0.3 发布说明
2026-01-31 00:57:45 +08:00
WrBug
40081c2464
feat: 为所有数值显示添加千分位分隔符
...
- 重构 formatNumber 和 formatUSDC 函数,默认添加千分位分隔符
- 更新 Statistics.tsx、CopyTradingStatistics.tsx 等统计页面
- 更新 PositionList.tsx 持仓列表的数值显示
- 更新 AccountList.tsx 账户列表的余额显示
- 所有数值(金额、数量、价格等)现在默认显示千分位
- 示例:1234567.89 显示为 1,234,567.89
影响范围:
- 工具函数:utils/index.ts
- 统计页面:Statistics.tsx, CopyTradingStatistics.tsx
- 业务页面:PositionList.tsx, AccountList.tsx
Changes:
- Refactored formatNumber and formatUSDC to include thousand separators by default
- Updated statistics pages to display numbers with commas
- Updated position list and account list for better readability
- Example: 1234567.89 now displays as 1,234,567.89
2026-01-31 00:52:42 +08:00
WrBug
f1f809f54b
docs: 新增跟单回测功能设计文档
...
- 新增产品需求文档 (BACKTEST_PRD.md)
- 新增技术设计文档 (BACKTEST_TECHNICAL_DESIGN.md)
- 新增设计审查清单 (BACKTEST_REVIEW_CHECKLIST.md)
- 新增文档总览 (README.md)
关键设计:
- 实时市场结算机制(按endDate检查)
- 严格余额检查(不计入未实现持仓)
- 停止条件优化(余额不足且无持仓时停止)
- 不计算手续费(简化逻辑)
2026-01-31 00:26:00 +08:00
WrBug
e8fd1b503b
移除跟单最大仓位数量(maxPositionCount)配置
...
- 数据库:创建迁移文件 V26 删除 max_position_count 字段
- 后端:移除实体类、DTO、服务中的 maxPositionCount 相关代码
- 后端:移除 FilterResult 中的 FAILED_MAX_POSITION_COUNT 状态
- 后端:移除 CopyTradingFilterService 中的最大仓位数量检查逻辑
- 前端:移除类型定义、表单字段和国际化翻译
- 前端:移除过滤订单列表中的 MAX_POSITION_COUNT 类型
- 前端:修复编译错误(Spin 导入、Table fixed 类型、size 类型)
2026-01-31 00:24:25 +08:00
WrBug
390b3ee876
feat: 在创建跟单配置时显示Leader资产信息
...
- 选择Leader后自动获取并显示资产信息(总资产、可用余额、仓位资产)
- 在AddModal和EditModal中都实现该功能
- 使用Card和Statistic组件美观展示
- 添加中英文多语言支持
- 使用formatUSDC格式化显示金额
2026-01-30 23:58:18 +08:00
WrBug
80976609c7
fix: 修复TypeScript类型错误
...
- 移除未使用的PositionDto导入
- 修复pnl参数重复声明
2026-01-30 23:29:42 +08:00
WrBug
17eea0183f
refactor: 列表只显示可用余额
...
- 桌面和移动端都只显示可用余额
- 移除总余额显示
2026-01-30 23:13:26 +08:00
WrBug
6980781f89
refactor: 移除仓位资产列
...
- 列表只显示总余额和跟单数
- 移除仓位资产列
- 移动端卡片移除仓位资产Tag
2026-01-30 22:42:44 +08:00
WrBug
3350039f05
feat: Leader列表显示仓位资产
...
- 列表新增仓位资产列
- 移动端卡片新增仓位资产Tag
- 文案'仓位余额'改为'仓位资产'
- 仓位资产使用紫色Tag显示
2026-01-30 22:24:59 +08:00
WrBug
0bdc0c74d1
feat: Leader列表优化
...
- 后端过滤价值为0的仓位
- 持仓列表显示市场名称而非ID
- 列表移除分类和创建时间列
- 文案'跟单关系数'改为'跟单数'
- 持仓DTO添加title字段
2026-01-30 22:03:50 +08:00
WrBug and GitHub
cccc829cef
Merge pull request #25 from WrBug/dev
...
feat: 优化构建流程和通知机制
2026-01-29 04:09:44 +08:00
WrBug
fa1a915e9c
docs: 添加 v2.0.2 release notes
2026-01-29 04:00:11 +08:00
WrBug
e5992b5145
feat(workflow): 优化构建流程和通知机制
...
- 添加 workflow_dispatch 支持手动触发构建
- Release 事件默认只打包产物(在线升级),不构建 Docker
- 手动触发可选择构建类型:在线升级或 Docker 升级
- 优化 Telegram 通知文案,区分构建类型和升级路径
- 在线升级任务不发送开始通知,只发送完成通知
- 手动触发时产物上传为 Artifact,Release 事件上传到 Release Assets
2026-01-29 03:59:07 +08:00
WrBug
42472f6b03
fix: 修复买入订单金额精度问题
...
- 修复市场买入订单 makerAmount 和 takerAmount 的精度限制
- makerAmount (USDC) 限制为最多 2 位小数
- takerAmount (shares) 限制为最多 4 位小数
- 符合 Polymarket API 的要求,解决 'invalid amounts' 错误
2026-01-29 03:45:17 +08:00
WrBug
c56e08e681
docs: 添加 v2.0.1 release notes
2026-01-28 15:30:20 +08:00
WrBug
7e87965418
fix: 修复订单状态检查中缓存清除导致计时重置的问题
...
- 修复订单详情为 null 时缓存清除时机问题,避免计时被重置导致订单无法删除
- 统一部分卖出和未成交订单的删除逻辑,都使用60秒重试窗口(之前部分卖出订单等待1小时)
- 删除未使用的常量 PARTIAL_SOLD_CLEANUP_WINDOW_MS
- 优化日志输出,区分部分卖出和未成交订单的日志信息
修复问题:
- 订单超过60秒不会删除的问题
- 部分卖出订单等待时间过长的问题
2026-01-28 15:28:36 +08:00
WrBug
e115d459f7
refactor: 优化过滤原因文案的数值显示格式
...
优化内容:
1. 新增 DateUtils.formatDuration() 函数:将毫秒转换为可读格式(X天X小时X分钟)
2. 优化市场截止时间过滤原因:使用格式化后的时间显示,避免显示过长的毫秒数
3. 优化所有过滤原因中的 BigDecimal 数值显示:
- 价格区间检查:去除尾随零
- 价差检查:去除尾随零
- 订单深度检查:去除尾随零
- 仓位金额检查:去除尾随零
优化效果:
- 时间显示:1009163461ms (280小时) -> 11天16小时26分钟
- 数值显示:0.50000000000000000000 -> 0.5
影响范围:
- DateUtils.kt
- CopyTradingFilterService.kt
2026-01-28 15:16:12 +08:00
WrBug
dd39e59304
fix: 修复禁用RPC节点后仍被使用的问题
...
问题描述:
- 用户在前端禁用节点后,系统仍然使用禁用的节点
- 原因:RetrofitFactory 的 rpcApiCache 未被清理,导致禁用的节点 URL 继续在拦截器中被使用
修复内容:
1. updateNode 方法:添加禁用节点时清理缓存的逻辑
2. deleteNode 方法:添加删除节点时清理缓存的逻辑
3. getAvailableNode 方法:优化逻辑,确保始终返回可用节点
- 没有启用节点时返回默认节点
- 所有节点不可用时返回默认节点
- 异常时返回默认节点作为兜底
4. 新增 createDefaultNodeConfig 辅助方法:创建默认节点配置
5. 简化 getHttpUrl 和 getWsUrl 方法:移除冗余逻辑
影响范围:
- RpcNodeService.kt
2026-01-28 15:13:07 +08:00
WrBug
2efc04a3c3
fix: 补充缺失的多语言key
...
修复内容:
1. copyTradingOrders 部分:添加 allFullyMatched 和 partiallyMatched(zh-CN、zh-TW)
2. filteredOrdersList 部分:添加 noFilteredOrders(所有语言文件)
影响范围:
- frontend/src/locales/en/common.json
- frontend/src/locales/zh-CN/common.json
- frontend/src/locales/zh-TW/common.json
2026-01-28 15:11:19 +08:00
WrBug
2b20f4b2e2
fix: 修复订单金额计算和价格范围验证问题
...
修复了两个关键问题:
1. 订单金额精度错误
- 原因:总是强制将金额舍入到 4 位小数,导致精度丢失
- 问题案例:25.09488 被错误地舍入为 25.0948
- 修复:只在小数位数超过 roundConfig.amount 时才进行舍入,采用与 clob-client 一致的条件舍入逻辑
2. 价格超出范围错误
- 原因:价格 0.999 舍入到 2 位小数后变成 1.00,违反了 price < 1 的限制
- 修复:在舍入后验证价格范围,超出时自动调整到最接近的有效值 (0.01-0.99)
主要变更:
- 对价格进行 roundNormal 舍入(参考 clob-client)
- 实现条件舍入逻辑:先 roundUp(amount + 4),必要时再 roundDown(amount)
- 添加价格范围验证 (MIN_PRICE=0.01, MAX_PRICE=0.99)
- 添加 decimalPlaces() 辅助函数
- 修改 roundNormal/roundDown/roundUp 函数,只有必要时才舍入
参考:clob-client/src/order-builder/helpers.ts 的 getOrderRawAmounts 函数
2026-01-23 12:54:48 +08:00
WrBug
419c68c024
fix: 修复本地 Docker 构建时 frontend/dist 和 backend/build 不存在的问题
...
- 移除 Dockerfile 中无效的 COPY frontend/dist 指令
- 改进前端构建逻辑,添加外部产物检查
- 改进后端构建逻辑,支持复制外部构建的 JAR 文件
- 在 deploy.sh 中添加创建占位符目录步骤,避免 COPY 失败
- 保持与 GitHub Actions 构建流程的兼容性(BUILD_IN_DOCKER=false)
修复了本地使用 ./deploy.sh 部署时的构建错误:
"failed to calculate checksum: /frontend/dist: not found"
2026-01-21 21:04:25 +08:00
WrBug
8889803dd7
fix: 修复 Dockerfile 中前端产物复制逻辑
...
- 修复 BUILD_IN_DOCKER=true 时 frontend/dist 不存在的问题
- 当 BUILD_IN_DOCKER=true 时,RUN 已经创建了 dist 目录
- COPY frontend/dist ./dist 现在应该能正常工作
2026-01-21 20:56:57 +08:00
WrBug and GitHub
9c5517768f
Merge pull request #24 from WrBug/dynamic_load
...
feat: 合并 v2.0.0 系统动态更新功能到 main 分支
2026-01-21 20:46:49 +08:00
WrBug
4aa85a9c2d
fix: 修复系统更新 API 路由和改进健康检查逻辑
...
- 修复 /api/update/execute 404 错误,改为 /api/update/update
- 增加健康检查等待时间从30秒到90秒
- 后端日志输出到文件,便于诊断问题
- 每5秒检查一次后端进程状态
- 改进错误诊断信息,区分进程退出和健康检查失败
- 记录后端启动日志的最后100行用于问题排查
2026-01-21 11:53:30 +08:00
WrBug
a77b3b10ee
feat: 改进系统更新健康检查逻辑
...
- 增加等待时间从30秒到90秒
- 后端日志输出到文件,便于诊断问题
- 每5秒检查一次后端进程状态
- 改进错误诊断信息,区分进程退出和健康检查失败
- 记录后端启动日志的最后100行用于问题排查
2026-01-21 11:31:19 +08:00
WrBug
532f4c3e25
fix: 修复系统更新 API 路由错误(/update/execute -> /update/update)
2026-01-21 05:30:48 +08:00
WrBug
04629e73b6
fix: 修复 TypeScript 编译错误
...
- 移除未使用的 getGitHubTagUrl 导入
- 移除未使用的 Divider、InfoCircleOutlined 导入
- 移除未使用的 Typography 组件解构
2026-01-21 05:18:42 +08:00
WrBug
696193c571
feat: 优化系统更新功能
...
- 系统更新模块移到系统设置页面最上方
- 版本号显示使用 Tag 格式(gitTag)
- 版本号 Tag 根据是否有新版本显示不同颜色(黄色=有新版本,绿色=无新版本)
- 版本号使用镂空样式,字号 8px
- 支持 Markdown 渲染更新内容
- 美化系统更新页面样式
- 在 Layout 中添加版本更新检查,有新版本时显示提示
2026-01-21 05:13:28 +08:00
WrBug
38e256c4fb
fix: 修复前端构建时版本号未正确传递的问题
...
- 在 GitHub Actions 前端构建步骤中添加 VERSION、GIT_TAG 环境变量
- 确保版本号能正确注入到前端构建产物中
2026-01-21 04:52:32 +08:00
WrBug
64a78406ed
fix: 修复 Docker 构建时找不到前端产物的问题
...
- 从 .dockerignore 移除 frontend/dist 和 backend/build,使外部构建产物可被 Docker 使用
- 在 GitHub Actions 中添加构建上下文准备步骤,验证产物存在
- 更新 Dockerfile 注释,说明构建产物在不同场景下的使用
2026-01-21 04:16:01 +08:00
WrBug
59297ec52f
fix: 修复 Dockerfile 在 BUILD_IN_DOCKER=false 时找不到前端产物的问题
...
- 在构建阶段先从构建上下文复制外部产物
- 如果 BUILD_IN_DOCKER=true,编译会覆盖外部产物
- 如果 BUILD_IN_DOCKER=false,使用已复制的外部产物
2026-01-21 04:06:23 +08:00
WrBug
0ff6832dc1
fix: 修复前端 TypeScript 编译错误
...
- 导出 apiClient 供 SystemUpdate 组件使用
- 删除 SystemSettings 中未使用的系统更新相关代码
- 系统更新功能已独立到 SystemUpdate 组件
2026-01-21 03:53:01 +08:00
WrBug
56a8928631
fix: 添加 gradle-wrapper.jar 的例外规则到 .gitignore
...
- 确保 gradle-wrapper.jar 不被 *.jar 规则忽略
- Gradle Wrapper 的 JAR 文件必须提交到仓库
2026-01-21 03:47:18 +08:00
WrBug
266c6d595d
fix: 强制添加 gradle-wrapper.jar 到版本控制
...
- gradle-wrapper.jar 是 Gradle Wrapper 必需的文件
- 必须提交到仓库才能在其他环境中使用
- 修复 GitHub Actions 构建错误
2026-01-21 03:47:01 +08:00
WrBug
b2e0816968
fix: 添加 gradle-wrapper.jar 到版本控制
...
- 修复 .gitignore 中错误忽略 gradle-wrapper.jar
- Gradle Wrapper 的 JAR 文件应该被提交到仓库
- 修复 GitHub Actions 构建时找不到 Wrapper 的问题
2026-01-21 03:46:43 +08:00
WrBug
dc47583565
fix: 修复 GitHub Actions 构建错误,使用 Gradle Wrapper
...
- 将 gradle 命令改为 ./gradlew
- 确保 gradlew 有执行权限
- 修复 Pre-release v2.0.0-beta 构建失败问题
2026-01-21 03:43:42 +08:00
WrBug
26dd3bb387
feat: 实现系统动态更新功能和 Release 创建脚本
...
主要变更:
1. 动态更新功能
- 新增 Python 更新服务 (docker/update-service.py)
- 添加系统更新前端页面 (frontend/src/pages/SystemUpdate.tsx)
- 配置 Nginx 代理更新服务 API
- 更新 Docker 启动脚本支持多进程管理
- 修复权限验证接口 (AuthController.verify)
2. Release 创建脚本
- 新增 create-release.sh 脚本支持快速创建 GitHub Release
- 支持自动拼接 -beta 后缀(pre-release)
- 支持无交互模式(--yes 参数)
- 添加详细的使用文档
3. GitHub Actions 增强
- 添加更新包构建和上传流程
- 支持 Pre-release 检测和过滤
4. 文档完善
- 添加动态更新技术方案文档
- 添加 Docker 版本号确定流程文档
- 添加 Release 脚本使用说明
2026-01-21 03:34:16 +08:00
WrBug and GitHub
fabfe601c6
Merge pull request #23 from WrBug/dev
...
Release v1.1.16: 订单列表优化和多语言修复
2026-01-20 23:32:31 +08:00
WrBug
662aa47de6
refactor: 优化匹配关系列表的订单ID显示
...
- 将'卖出订单ID'和'买入订单ID'两列合并为一列'订单ID'
- 第一行显示买入订单ID,第二行显示卖出订单ID
- 添加'买入'和'卖出'标签区分两种订单ID
- 保持复制按钮功能
- 优化移动端和桌面端的显示效果
- 桌面端列宽从120+180调整为150+200以容纳更多内容
2026-01-20 23:19:05 +08:00
WrBug
c3d9d10d5d
fix: 修复卖出订单标签页的多语言键值错误
...
- 修复分组标签使用错误的键值:allFullyMatched -> allFullySold
- 修复筛选器选项使用错误的键值:statusPartiallyMatched -> partiallySold,statusFullyMatched -> allFullySold
- 确保中文环境显示正确的中文文案:'全部成交' -> '全部卖出','部分成交' -> '部分卖出'
- 与买入订单标签页的键值使用保持一致
2026-01-20 23:11:54 +08:00
WrBug
9926533049
fix: 修复多语言配置中的键值重复和缺失问题
...
- 修复 copyTradingOrders 对象中重复的键值
- 统一键名规范:allFullyMatched -> allFullySold, partiallyMatched -> partiallySold
- 添加缺失的 filterMarketTitle 键值
- 确保中英文和繁体中文的键值配置一致
- 修复所有语言文件的 JSON 格式(添加换行符)
2026-01-20 22:57:17 +08:00
WrBug
4d72017b97
fix: 优化匹配关系列表页的显示和交互
...
- 将'查询'按钮改为'刷新'按钮,文案更准确
- 在表格中新增'市场'列,显示市场标题和ID
- 为移动端和桌面端的市场标题添加跳转到 Polymarket 的链接
- 导入 getPolymarketUrl 工具函数支持市场跳转
- 优化用户体验,便于快速查看市场详情
2026-01-20 11:48:14 +08:00
WrBug
45734c051e
fix: 优化买入订单分组的卖出状态文案显示
...
- 当完全成交数为0时,显示'未卖出'而不是'部分成交 (0/X)'
- 统一状态文案:'部分成交'改为'部分卖出','全部成交'改为'全部卖出'
- 更新中英文和繁体中文的多语言配置
- 优化筛选选项中的状态文案,与分组显示保持一致
2026-01-20 11:44:33 +08:00
WrBug
db8471bb16
fix: 统一卖出订单和买入订单的市场分组排序规则
...
- 修改卖出订单的市场分组排序逻辑
- 按照该市场最近的卖出订单时间倒序排序(与买入订单保持一致)
- 替换原有的按订单数量倒序排序规则
- 优化分组显示的用户体验,便于快速定位活跃市场
2026-01-20 11:38:41 +08:00
WrBug
0dc6f5894f
refactor: 优化最大仓位价值检查逻辑,按市场+方向分别限制
...
- 修改 maxPositionValue 检查逻辑,从按市场累计改为按市场+方向(outcomeIndex)分别计算
- 新增 Repository 方法 sumCurrentPositionValueByMarketAndOutcomeIndex 支持按方向统计
- 移除未使用的 sumCurrentPositionValueByMarket 和 existsByCopyTradingIdAndMarketIdAndRemainingQuantityGreaterThan 方法
- 更新 checkPositionLimits 方法,增加 outcomeIndex 参数
- 更新 checkFilters 方法,传递 outcomeIndex 参数
- 更新日志和注释,明确说明按市场+方向检查仓位
说明:同一市场的 YES 和 NO 方向现在分别受 maxPositionValue 限制,不再累加计算
2026-01-20 11:15:38 +08:00
WrBug
c9769aa17a
fix: 修复比例模式计算数量错误
...
- 移除 copyRatio 多余的除以 100 操作
- copyRatio 字段存储的是倍数值(如 1.3 表示 130%),不需要再转换
- 影响:买入数量计算、固定金额模式卖出数量计算
- 修复示例:配置 130% 后,Leader 买入 6.25 份,跟单数量应为 8.125 而不是 0.08125
2026-01-20 10:45:03 +08:00
WrBug
07b4d654b4
清理 MarketPollingService 调试日志
...
- 删除多余的 debug 日志输出
2026-01-19 12:50:34 +08:00
WrBug
b65827038f
添加订单详情查询脚本
...
- 添加 get-order-detail.js 脚本,用于获取 Polymarket 订单详情
- 添加 package.json 配置文件
- 忽略 package-lock.json (已在 .gitignore 中通过 node_modules/ 规则处理)
2026-01-19 12:50:20 +08:00
WrBug
d768da72c6
清理 MarketPollingService 中多余的 debug 日志
2026-01-19 12:48:18 +08:00
WrBug
7385efff1a
优化订单详情为null时的处理逻辑
...
- 当订单详情为null且已发送通知超过60秒时,将订单状态改为fully_matched而不是删除
- 避免已经通过订单详情更正并发送通知的订单被意外删除
- fully_matched状态的订单不会被包含在待查询列表中,自动跳过查询
2026-01-19 12:47:03 +08:00
WrBug
3e2e97e572
fix: 修复 CopyOrderTrackingService 和 CopyTradingService 的 @Transactional 自调用问题
...
1. CopyOrderTrackingService 修复
- 实现 ApplicationContextAware 接口
- 添加 getSelf() 方法获取代理对象
- 在 processTrade() 中通过代理调用 processBuyTrade() 和 processSellTrade()
- 确保两个子方法的 @Transactional 生效
2. CopyTradingService 修复
- 实现 ApplicationContextAware 接口
- 添加 getSelf() 方法获取代理对象
- 在 updateCopyTradingStatus() 中通过代理调用 updateCopyTrading()
- 确保内部调用的 @Transactional 生效
修改的文件:
- CopyOrderTrackingService.kt
- CopyTradingService.kt
2026-01-16 10:28:39 +08:00
WrBug
ae68a33c1e
fix: 优化仓位列表分页和统计功能
...
- 添加完整的分页功能,支持移动端和桌面端
- 移动端:自定义分页控件,支持切换每页 10/20/50 条
- 桌面端:使用 Ant Design Table 分页,支持切换每页 10/20/50 条
- 优化仓位统计逻辑,区分当前仓位和历史仓位
- 当前仓位:显示浮动盈亏和已实现盈亏
- 历史仓位:移除盈亏统计显示
- 筛选条件变化时自动重置到第一页
2026-01-16 10:14:54 +08:00
WrBug
deea59fdbf
fix: 修复 OrderStatusUpdateService 的事务和并发问题
...
1. 解决 @Transactional 自调用问题
- 实现 ApplicationContextAware 接口
- 通过代理对象调用 @Transactional 方法,确保事务生效
2. 防止定时任务并发执行
- 添加 updateJob 跟踪上一次任务状态
- 如果上一次任务还在执行,跳过本次执行
- 避免多个更新任务同时运行导致的数据竞争
修改的方法:
- updateOrderStatus(): 添加并发控制
- cleanupDeletedAccountOrders(): 通过代理对象调用
- checkAndDeleteUnfilledOrders(): 通过代理对象调用
- updatePendingSellOrderPrices(): 通过代理对象调用
- updatePendingBuyOrders(): 通过代理对象调用
2026-01-15 15:21:29 +08:00
WrBug
b90f86b081
fix: 修复 @Transactional 方法的可见性问题
...
将 OrderStatusUpdateService 中 4 个使用 @Transactional 的方法从 private 改为 public,
确保 Spring 能够正确代理这些方法。
修改的方法:
- cleanupDeletedAccountOrders()
- checkAndDeleteUnfilledOrders()
- updatePendingSellOrderPrices()
- updatePendingBuyOrders()
参考 UserService.kt 的实现模式,@Transactional 方法必须是 public 的。
2026-01-15 15:05:53 +08:00
WrBug
f6f5866118
refactor: 清理 PositionPollingService 代码
...
- 移除多余的空行
- 移除调试日志
2026-01-15 04:35:11 +08:00
WrBug
b1e69135b8
feat: 添加跟单订单来源字段
...
- 在 CopyOrderTracking 实体添加 source 字段,记录订单来源
- 支持 activity-ws(Polymarket WebSocket)和 onchain-ws(OnChain WebSocket)两种来源
- 更新 processBuyTrade 方法,接收并保存 source 参数
- 更新 OrderStatusUpdateService,保留原始 source 信息
- 添加数据库迁移脚本 V25
- 统一 CopyTradingWebSocketService 使用 activity-ws 作为来源
2026-01-15 04:33:55 +08:00
WrBug
0c7f34a28a
fix: 添加事务注解修复删除操作异常
...
- 在 cleanupExpiredProcessedTrades 方法上添加 @Transactional 注解
- 修复 TransactionRequiredException 异常
- 删除操作必须在事务中执行
2026-01-15 04:19:46 +08:00
WrBug
c53fcde5d7
feat: 添加已处理交易记录定时清理服务
...
- 创建 ProcessedTradeCleanupService 定时清理过期的去重记录
- 保留时间设置为10分钟(重复订单通常10秒后就不会出现)
- 清理间隔为10分钟,避免数据库空间浪费
- 记录清理日志,便于监控和调试
2026-01-15 04:17:54 +08:00
WrBug
81a620af12
feat(activity-ws): 同时监听 trades 和 orders_matched,添加 txHash 去重
...
- 订阅消息同时包含 trades 和 orders_matched 两种类型
- 添加 processedTxHashes Cache (LRU 100 条,10 分钟过期)
- 防止同一交易被重复处理
- 新增 duplicateTxHashMessages 统计指标
- 更新日志信息,明确标注监听范围
2026-01-15 04:13:27 +08:00
WrBug
5f44a0ca20
优化订单状态更新和统计服务
...
1. 订单详情为 null 且已部分卖出的订单超时清理
- 新增 PARTIAL_SOLD_CLEANUP_WINDOW_MS 常量(1小时)
- 超过1小时无法获取详情的已部分卖出订单自动清理
- 避免无效订单长期占用数据库空间
2. 优化买入订单分组排序逻辑
- 按最近买入订单时间排序,提升用户体验
- 修复日志中的错误描述(卖出订单列表)
3. 代码格式化优化
2026-01-15 02:28:11 +08:00
WrBug
5d2cf945f3
fix: 修复 AccountOnChainMonitorService 中 JsonNull 导致的崩溃
...
- 增加 receiptRpcResponse.result.isJsonNull 检查
- 防止在链上查询返回 JsonNull 时调用 asJsonObject() 抛出 IllegalStateException
- 优化空值处理逻辑,确保程序安全退出
2026-01-15 02:10:49 +08:00
WrBug
227a38fa89
Merge branch 'main' into dev
2026-01-14 15:00:41 +08:00
WrBug
abcc004606
fix: 添加订单查询失败的兜底逻辑,避免因网络异常误删订单
...
- 新增 orderNullDetectionTime 缓存,记录订单详情首次检测为 null 的时间戳
- 订单详情为 null 时,首次检测不删除,等待 1 分钟重试窗口
- 超过重试窗口仍为 null 才删除订单
- 订单详情正常或已部分卖出时清除缓存
- 避免 ResponseLoggingInterceptor 导致的响应体被消费问题
修改文件:
- OrderStatusUpdateService.kt
相关 issue: 订单 0xd245a852... 因响应体为 null 被误删
2026-01-14 14:55:05 +08:00
WrBug
64391503c2
fix: 修复最大仓位金额未生效和交易receipt解析问题
...
1. 修复 CopyTradingFilterService 中最大仓位金额(maxPositionValue)未生效的问题
- 当只配置了最大仓位金额但未配置 maxSpread 或 minOrderDepth 时,
仓位检查被跳过导致过滤失效
- 将仓位检查移到 needOrderbook 判断之前,确保始终执行仓位检查
2. 修复 OnChainWsService 中交易 receipt 为 JsonNull 时的空指针问题
- 添加 JsonNull 检查,防止解析失败时出现异常
2026-01-14 05:04:31 +08:00
WrBug
92b75d1926
refactor: 将 Polymarket API URL 配置改为代码常量
...
- 创建 PolymarketConstants 常量类,集中管理所有 Polymarket API URL
- 更新所有服务类,将配置注入改为使用常量:
* ApiHealthCheckService: 移除配置注入,使用常量
* RetrofitFactory: 移除 CLOB 和 Gamma API URL 配置注入
* RelayClientService: 移除 Builder Relayer URL 配置注入
* BlockchainService: 移除 Data API URL 配置注入
* PolymarketApiKeyService: 移除 CLOB API URL 配置注入
* RetrofitConfig: 移除 CLOB API URL 配置注入
* OrderPushService: 移除 RTDS WebSocket URL 配置注入
* PolymarketActivityWsService: 移除 Activity WebSocket URL 配置注入
* CopyTradingWebSocketService: 移除 User WebSocket URL 配置注入
* PolymarketWebSocketHandler: 移除 RTDS WebSocket URL 配置注入
* UnifiedOnChainWsService: 添加连接状态查询方法
- 从 application.properties 移除相关配置项,添加说明注释
- 完善 API 健康检查,添加缺失的检测项:
* Polymarket Activity WebSocket
* 链上 WebSocket
- 更新相关文档说明
2026-01-13 16:07:19 +08:00
WrBug
e072d0c894
feat: 添加 Activity WebSocket 消息超时检测和自动重连机制
...
- 添加 lastActivityTime 变量记录最后一次收到 activity 消息的时间
- 实现 startActivityTimeoutCheck() 方法,每30秒检查一次消息接收情况
- 如果超过30秒未收到 activity 消息,自动触发 WebSocket 重连
- 在订阅成功后自动启动超时检测任务
- 在 stop() 方法中正确清理检测任务资源
2026-01-13 16:04:20 +08:00
WrBug and GitHub
cc40493ec6
Merge pull request #21 from WrBug/dev
2026-01-13 12:55:21 +08:00
WrBug
3a78a84610
fix: 修复 v1.1.10 版本下单成功不发送通知的问题
...
- 移除 OrderStatusUpdateService 中错误的双重检查逻辑
- 修复买入订单和卖出订单通知逻辑
- 确保在标记为已发送后立即发送通知
- 问题:保存 notificationSent=true 后立即查询检查,导致通知永远被跳过
- 修复:改为标记后直接发送通知,利用数据库状态防止并发重复
2026-01-13 03:38:05 +08:00
WrBug and GitHub
692cbd9a80
Merge pull request #20 from WrBug/dev
2026-01-12 15:40:39 +08:00
WrBug
8f01588221
fix: 修复 TypeScript 编译错误
...
- 在 CopyTradingCreateRequest 和 CopyTradingUpdateRequest 接口中添加 pushFilteredOrders 字段
- 修复 InputNumber parser 函数的返回类型,应该返回 number 而不是 string
2026-01-12 14:59:42 +08:00
WrBug
f6fc836e79
docs: 添加 v1.1.10 release notes
2026-01-12 14:51:33 +08:00
WrBug
9c303e0a82
feat: 添加推送已过滤订单功能并修复相关问题
...
- 新增推送已过滤订单功能(pushFilteredOrders),默认关闭
- 数据库迁移:添加 pushFilteredOrders 字段到模板表和跟单配置表
- 后端:在实体、DTO、Service 中添加 pushFilteredOrders 字段支持
- 前端:在模板新增、编辑、推送页面和跟单配置新增、编辑页面添加开关
- 多语言:添加中文、繁体中文、英文翻译
- 通知逻辑:发送过滤订单通知时检查 pushFilteredOrders 字段
- 修复新建跟单配置时 pushFilteredOrders 字段未生效的问题
- 修复手动输入模式下 pushFilteredOrders 被硬编码为 false 的问题
- 修复从模板填充表单时未加载 pushFilteredOrders 的问题
- 添加 CopyTradingTemplate 接口的 pushFilteredOrders 字段定义
- 修复新建和编辑页面的截止时间输入框交互问题
- 修复删除后失去焦点自动填充1的问题
- 优化 onChange 和 onBlur 处理逻辑,支持清空操作
2026-01-12 14:29:12 +08:00
WrBug
cb8e46919f
fix: 修复跟单配置更新时清空可选字段无法保存的问题
...
- 修复价格区间(minPrice/maxPrice)清空后无法保存的问题
- 修复最大仓位数量(maxPositionCount)清空后无法保存的问题
- 修复市场截止时间(maxMarketEndDate)清空后无法保存的问题
- 修复其他可选字段(minOrderDepth/maxSpread/maxPositionValue)清空后无法保存的问题
- 修复截止时间输入框删除后失去焦点自动填充1的问题
前端:清空字段时传空字符串或-1标记,让后端识别为清空操作
后端:处理空字符串和-1标记,正确设置为null以清空字段
2026-01-12 13:31:27 +08:00
WrBug
279806da2b
feat: 优化订单列表筛选功能,支持按市场标题搜索并改进分组体验
...
- 后端:MarketGroupedOrdersRequest 添加 marketId 和 marketTitle 字段
- 后端:买入/卖出订单分组接口支持市场 ID 模糊匹配和市场标题关键字筛选
- 前端:BuyOrdersTab 添加市场标题筛选,移除方向筛选,记录用户分组偏好
- 前端:SellOrdersTab 添加市场标题筛选,将方向筛选改为状态筛选,移除方向列
- 前端:MatchedOrdersTab 添加市场标题筛选和市场列显示
- 前端:所有搜索输入框添加 0.5 秒防抖优化
- 前端:分组偏好保存到 localStorage 以便跨会话持久化
2026-01-12 10:01:20 +08:00
WrBug
90fa487d1b
refactor: 移除未实现盈亏计算以优化跟单关系统计性能
...
- 移除未实现盈亏和持仓价值的计算
- 总盈亏现在仅包含已实现盈亏
- 删除不再使用的 getCurrentMarketPrice、getActualPositions、calculateUnrealizedPnl、calculatePositionValue 方法
- 简化盈亏百分比计算,仅基于已实现盈亏
- 移除不必要的依赖注入(accountService、blockchainService、retrofitFactory)
- 性能提升:从 1+N 次网络请求减少到 0 次
2026-01-11 14:53:28 +08:00
WrBug
b58bb267a1
feat: 添加 Docker 容器时区配置,支持通过 .env 自定义
2026-01-11 14:36:49 +08:00
WrBug
6af76c4d80
fix: 修复订单通知重复发送和时间显示问题
...
1. 修复并发导致的重复通知问题
- 在 OrderStatusUpdateService 中实现双重检查机制
- 先保存订单标记为已发送,再重新查询数据库检查
- 防止定时任务并发时重复发送同一订单的通知
- 同时修复买入订单和卖出订单的通知逻辑
2. Telegram 通知时间改为订单创建时间
- TelegramNotificationService.sendOrderSuccessNotification 添加 orderTime 参数
- 使用订单的 createdAt 时间戳作为通知显示时间
- 而不是使用当前通知发送时间
- 更准确反映订单的实际创建时间
修改文件:
- OrderStatusUpdateService.kt: 实现双重检查机制,防止并发重复通知
- TelegramNotificationService.kt: 添加 orderTime 参数支持订单时间显示
- AccountService.kt: 手动创建订单时传递订单创建时间
2026-01-11 14:33:30 +08:00
WrBug and GitHub
43de0104e2
Merge pull request #19 from WrBug/dev
2026-01-10 17:55:31 +08:00
WrBug
d624eaeb57
docs: 添加 v1.1.9 release notes
2026-01-10 17:51:54 +08:00
WrBug
6ad40242b3
fix: 优化自动卖出订单筛选逻辑,避免刚创建的订单被误判
...
问题:在仓位检查时,刚创建的订单可能因仓位更新延迟被误判为已卖出
修改:
1. Repository 层面新增 findUnmatchedBuyOrdersByOutcomeIndexOlderThan 方法
- 在 SQL 层直接过滤创建时间超过阈值的订单
- 提高查询效率,减少数据传输
2. PositionCheckService 两个场景都使用 SQL 过滤
- 场景1:仓位不存在时,延迟检测使用 SQL 过滤
- 场景2:仓位部分存在时,FIFO 匹配使用 SQL 过滤
- 统一使用 2 分钟阈值保护刚创建的订单
优化效果:
- SQL 层面直接过滤,减少数据传输
- 代码更简洁,逻辑更清晰
- 刚创建的订单(< 2 分钟)不会被误判为已卖出
- 日志更详细,便于排查问题
2026-01-10 03:39:06 +08:00
WrBug and GitHub
2ccab42894
Merge pull request #18 from WrBug/dev
...
Release v1.1.8: Polymarket Activity WebSocket 双重监听方案
2026-01-09 11:11:51 +08:00