WrBug and Cursor
08e1219f77
feat(neg-risk): WCOL 解包轮询与 Safe/Magic 一致说明
...
- 新增 WcolUnwrapJobService:每 20s 轮询解包 WCOL,未配置 Builder Key 时直接跳过
- AccountService:赎回流程不再等待确认与解包,由轮询统一处理;新增 runWcolUnwrapForAllAccounts
- BlockchainService:unwrapWcolForProxy 注释说明 Safe/Magic 逻辑一致;waitForTransactionConfirmed 避免 inline lambda 中 continue
- RelayClientService:createUnwrapWcolTx 注释说明共用逻辑;移除 Builder Relayer 调试日志
- docs/neg-risk-redeem.md:更新解包流程与 Safe/Magic 一致说明
- scripts/unwrap-wcol.js:新增脚本支持 Safe/EOA 解包与 Builder Relayer
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-16 01:46:55 +08:00
WrBug
62842f5aa8
Merge branch 'feature/crypto-market-tail-session-strategy' into dev
2026-02-16 00:12:38 +08:00
WrBug and Cursor
13662dd0d5
fix(redeem): Neg Risk 市场使用 WrappedCollateral 赎回,并补充文档
...
- RelayClientService: 增加 negRiskWrappedCollateralAddress,createRedeemTx 支持 isNegRisk 选用抵押品
- BlockchainService: redeemPositions/redeemPositionsBatch 支持 isNegRisk,批量请求改为 (conditionId, indexSets, isNegRisk)
- AccountService: 赎回前按市场查询 getNegRiskByConditionId,批量与单笔均传入 isNegRisk
- docs/neg-risk-redeem.md: 新增 Neg Risk 赎回逻辑与对应 JS/TS 代码说明
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-16 00:11:40 +08:00
WrBug and GitHub
07c3548401
Merge pull request #30 from WrBug/feature/crypto-market-tail-session-strategy
...
feat(crypto-tail): 加密市场尾盘策略完整实现与优化
2026-02-15 02:07:30 +08:00
WrBug and Cursor
0f50939625
feat(尾盘策略): 触发记录分页与时间筛选、策略列表与表单优化
...
触发记录:
- 成功/失败分 Tab,失败展示失败原因
- 分页与按天时间范围筛选(日历,结束日不超过今天)
- 后端 startDate/endDate、Repository 时间范围查询
- 弹窗美化:时间范围卡片、空状态、分页总数;移除订单 ID 列
- 查看触发记录按钮文案改为「订单」
策略列表:
- 状态列恢复为 Switch,PC 端放在第一列
- 新增账户列;移除最近触发列
- 文案换行(wordBreak/whiteSpace);时间区间 PC 换行、移动端单行
- 时间区间列宽缩小;移动端 Switch 在底部操作区
- 编辑时账户不可修改;策略名称 placeholder 改为「选填,留空将自动生成」
- 多语言:account、viewTriggers、strategyNamePlaceholder 等
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-15 01:41:53 +08:00
WrBug and Cursor
a64d1edbf4
feat(crypto-tail): 尾盘策略页币安 API 状态监控与重连间隔调整
...
- 尾盘策略页:进入时检测币安 API/WebSocket,异常时红色强提醒
- 异常时提供「重新检测」按钮,不跳转 API 健康页、不做 60s 轮询
- 文案面向小白:无法连接币安 API、需行情数据、稍后重新检测
- 多语言:zh-CN/zh-TW/en 新增 cryptoTailStrategy.binanceApiAlert
- 币安 K 线 WS 重连延迟由 10s 改为 3s
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-15 01:09:34 +08:00
WrBug and Cursor
a62f1bd6e8
feat(cryptotail): 尾盘策略首次满足条件时打印日志
...
- 在价格与时间区间首次满足且本周期未触发时打印日志
- 日志包含:开盘价、收盘价、当前市场价格、方向、策略名
- 日志放在 passMinSpreadCheck 前
- 使用 Caffeine LRU 缓存(容量100)保证每周期只打印一次
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-15 00:58:14 +08:00
WrBug and Cursor
63ce4107c6
fix(copytrading): 修复跟单 invalid signature 与 orderbook 不存在
...
- tokenId: Activity 解析时写入 trade.tokenId=asset,链上解析时写入 tokenId,优先使用避免与 CLOB 不一致
- Neg Risk: 从 Gamma 读取 negRisk,按市场选择 CTF Exchange / Neg Risk Exchange 签约
- 签名: OrderSigningService 支持 exchangeContract 参数,Credentials 路径与 v 提取与 EIP-712 一致
- 校验: 创建订单前校验 signer 与 account.walletAddress 一致
- TradeResponse/EventResponse/MarketResponse 增加 tokenId、negRisk 等字段
- MarketService 增加 getMarketInfoByTokenId、getNegRiskByConditionId
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-15 00:47:07 +08:00
WrBug and Cursor
a136d68e8c
fix(cryptotail): 尾盘策略订单簿 WebSocket 订阅与连接管理优化
...
CryptoTailOrderbookWsService:
- 订阅更新时关闭 WS 后重连(移除不可靠的 unsubscribe)
- tokenIds 未变时不关闭 WS,仅更新倒计时与价差预计算
- 重连前检查是否有启用策略,避免创建无订阅的空连接
- 重连延迟改为 3 秒
- connect() 使用 synchronized 保证线程安全
- handleMessage/onBestBid 在 closedForNoStrategies 时提前返回
- tokenToEntries null 日志改为 DEBUG
CryptoTailStrategyService:
- delete() 发布 CryptoTailStrategyChangedEvent
CryptoTailStrategyExecutionService:
- 移除 AUTO 模式价差校验的 INFO 日志
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 22:50:04 +08:00
WrBug and Cursor
61a5077d4d
fix(crypto-tail): 多策略订阅时增加重试与跳过原因日志
...
- buildSubscriptionMap 中 fetchEventBySlug 失败时不再静默 continue,按原因打 warn/debug 日志
- 新增 fetchEventBySlugWithRetry,失败最多重试 3 次、间隔 1s,避免瞬时失败导致只订阅到其中一个策略
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 21:29:46 +08:00
WrBug and Cursor
bd529d9041
feat(cryptotail): 尾盘策略打印初始价差
...
- 周期开始预计算 AUTO 价差后打印 baseSpreadUp/baseSpreadDown
- 触发价差校验时打印初始价差、系数、有效最小价差、当前K线价差及是否通过
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 21:00:01 +08:00
WrBug and Cursor
5cdcc487d4
feat(cryptotail): AUTO 最小价差 100%→50% 动态系数,progress 按毫秒计算
...
- BinanceKlineAutoSpreadService: 缓存 100% 基准价差,新增 getAutoMinSpreadBase
- CryptoTailStrategyExecutionService: 按窗口内毫秒进度算 coefficient,effectiveMinSpread = baseSpread × (1 - 0.5×progress)
- 新增方案文档 docs/crypto-tail-auto-spread-dynamic-coefficient.md
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 20:48:08 +08:00
WrBug and Cursor
ca2b1acbb9
fix(cryptotail): 尾盘策略下单取消重试并打印完整报错信息
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 20:34:27 +08:00
WrBug and Cursor
77b681a40e
chore: 跟单订单状态日志与尾盘 auto 系数调整
...
- OrderStatusUpdateService: 移除「检查 N 个30秒前创建的订单是否成交」debug 日志
- BinanceKlineAutoSpreadService: auto 模式最小价差系数由 80% 改为 70%
- CryptoTailStrategyDto: 同步更新自动最小价差注释
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 19:35:37 +08:00
WrBug and Cursor
c6f9e5db61
fix(cryptotail): 已结算的触发不再请求 getOrder,直接标记 notification_sent=true
...
- 轮询时若 trigger.resolved 为 true,跳过 CLOB getOrder 请求
- 将 notification_sent 设为 true 并保存,避免已结算订单无限轮询
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 18:09:25 +08:00
WrBug and Cursor
2ec4ae3f98
refactor(cryptotail): 取消 FIXED 模式预签订单,改为触发时再签名
...
- 移除 PeriodContext.preSignedOrderByOutcome,周期开始仅预取参数(账户、解密、费率、CLOB 等)
- ensurePeriodContext 不再预签两个 outcome 的订单
- placeOrderForTrigger 统一 FIXED/RATIO 流程,均于触发时计算 size 并签名提交
- 每次触发仅对当前 outcome 签名一次,避免预签两张仅用一张的浪费
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 16:01:57 +08:00
WrBug and Cursor
5074bb4f28
fix(order): 修复订单签名 salt 并发碰撞问题
...
- 使用 AtomicLong + 时间戳保证 generateSalt 在并发下唯一
- 避免尾盘策略 FIXED 模式预签双单等场景产生相同 salt 导致订单冲突
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 15:32:19 +08:00
WrBug and Cursor
9fef4bea59
feat: 健康检查加币安 API/WS,订单簿 bids 空防护,自动价差历史取 20 根
...
- ApiHealthCheckService: 新增币安 API(ping)、币安 WebSocket(5m/15m 连接状态)
- BinanceKlineService: 连接状态追踪 getConnectionStatuses 供健康检查
- CryptoTailOrderbookWsService: book 事件 bids 为空时不再取 [0],避免 Index 0 out of bounds
- BinanceKlineAutoSpreadService + 文档 + i18n: 历史 K 线由 30 根改为 20 根
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 15:27:22 +08:00
WrBug and Cursor
b50e43c239
feat(crypto-tail): 策略最小价差(无/固定/自动) + 前端默认与文案
...
- 后端: 最小价差 DB/Entity/DTO、Binance K线 REST+WS、自动价差 IQR 预计算与执行时校验
- 前端: 最小价差(自动-固定-无),默认自动,label 旁 info 说明,选择自动不展示建议约
- i18n: minSpreadModeTip 说明不写死标的
- 文档: crypto-tail-strategy-min-spread-flow.md
- scripts: Binance K线拉取与 WS 示例
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 15:16:44 +08:00
WrBug and Cursor
7ec9311df2
feat(cryptotail): 创建/修改策略时未填标题则自动生成并入库
...
- create: name 为空时生成「尾盘策略-{marketSlugPrefix}-{yyyyMMddHHmmss}」
- update: 未填且原无标题时同样生成并更新
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 13:13:55 +08:00
WrBug and Cursor
1f6cf1ecaf
feat(cryptotail): 尾盘 TG 改为轮询实现并修复自调用
...
- 新增 notification_sent 字段与 V36 迁移,轮询未发 TG 的 trigger
- 新增 CryptoTailOrderNotificationPollingService:每 5 秒轮询,CLOB getOrder 后发 TG,与跟单一致
- 通过 ApplicationContextAware + getSelf() 解决 @Transactional 自调用问题
- 删除 CryptoTailOrderNotificationSubscriber,移除 WS 推送方式
- Repository 新增 findByStatusAndOrderIdIsNotNullAndNotificationSentFalseOrderByCreatedAtAsc
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 13:11:21 +08:00
WrBug and Cursor
9413507997
feat(cryptotail): 尾盘下单成功 TG 通知,通过 subscribe 订阅订单广播
...
- CryptoTailStrategyTriggerRepository 新增 findByOrderId 用于 WS 匹配
- TelegramNotificationService 新增 sendCryptoTailOrderSuccessNotification 及多语言
- 新增 CryptoTailOrderNotificationSubscriber,与跟单一致通过 OrderPushService.subscribeAllEnabled 订阅订单推送,匹配尾盘订单后发 TG
- i18n: notification.tail.order.success, notification.tail.strategy (zh-CN/zh-TW/en)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 07:57:52 +08:00
WrBug and Cursor
bf0e52fc01
chore(cryptotail): 移除 CryptoTailStrategyScheduler,runCycle 未实现且触发由 WS 负责
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 07:33:34 +08:00
WrBug and Cursor
c520eb7777
fix(cryptotail): 结算用 activity 取成交并优先 usdcSize 更新投入金额,尾盘调度与执行整理
...
- CryptoTailSettlementService: 实际成交从 Data API getUserActivity 获取,优先用 activity.usdcSize 更新 amountUsdc;仅匹配 type=TRADE,排除 REDEEM;先修正 triggerPrice/amountUsdc 再算 realizedPnl 并一次性写库
- CryptoTailStrategyExecutionService: 与结算/调度相关的整理与精简
- CryptoTailStrategyScheduler: 新增策略变更后触发一轮检查的调度
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 07:29:47 +08:00
WrBug and Cursor
d6d4b1200e
fix(cryptotail): 下单成功后拉取实际成交价写库,结算拉取失败补日志
...
- 执行服务:createOrder 成功后 delay 800ms 再 getOrder 取实际 price/sizeMatched,
用真实触发价与投入金额写 trigger 记录,表现从首条即正确;两处调用传入 L2 凭证
- 结算服务:fetchOrderFill 失败时打日志(orderId 空、账户/凭证、getOrder 失败等),
便于排查表现未更新;注释说明表现依赖历史订单接口
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 07:09:01 +08:00
WrBug and Cursor
a1f3cfd3ff
fix(account): 无跟单配置账户也执行自动赎回,支持尾盘策略仓位
...
- 移除 checkRedeemablePositions 中对 copyTradings.isEmpty() 的 continue
- 尾盘策略等仅用该账户、无跟单配置的账户可赎回仓位现会正常自动赎回
- 赎回成功后仍仅对有跟单配置的账户更新跟单订单状态
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 07:05:01 +08:00
WrBug and Cursor
261dbdc23c
feat(deploy): DOCKER_VERSION 支持从 .env 读取
...
版本号优先级:环境变量 > .env 中的 DOCKER_VERSION > 当前分支名
提示文案更新为可在 .env 或环境变量中设置
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 06:26:38 +08:00
WrBug and Cursor
4c0d0afceb
fix(frontend): 加密尾盘策略列表编辑与展示
...
- 编辑时按 marketSlugPrefix 取 interval,修复 15 分钟市场时间区间校验误报
- 投入方式:表格/卡片统一显示「投入方式: 比例/固定金额 + 数值」,兼容后端小写 amountMode
- 比例数值用 formatNumber(..., 2) 控制小数位,固定金额沿用 formatUSDC
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 06:24:12 +08:00
WrBug and Cursor
b79caceae6
fix: CLOB /time 用 ResponseBody 解析纯数字并支持 DOCKER_VERSION 环境变量
...
- PolymarketClobApi: getServerTime() 改为 Response<ResponseBody>,/time 返回纯时间戳非 JSON
- PolymarketApiKeyService: 抽取 fetchServerTimeOrNull() 复用,解析 body 为 Long
- deploy.sh: DOCKER_VERSION 支持环境变量,未设置时仍用分支名
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 06:11:22 +08:00
WrBug and Cursor
ed749fb606
feat(crypto-tail): 停用策略时关闭 WebSocket
...
- 无启用策略时关闭订单簿 WS 并取消重连(closedForNoStrategies 标志)
- 启动时若无启用策略则不建立连接
- 再次启用策略时 refreshAndSubscribe 会重新 connect 并订阅
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 05:47:05 +08:00
WrBug and Cursor
f200ba7f7c
feat(crypto-tail): 触发记录与结算优化、前端收益与价格展示
...
后端:
- 结算轮询仅处理下单成功订单(status=success 且 orderId 非空)
- 实体通过 copy() 更新,不再直接改字段;结算时用订单 fill 回写 triggerPrice、amountUsdc
- Trigger 实体结算相关字段改为 val,统一 copy+save 更新
前端:
- 触发记录: 去掉市场列,保留触发价格(轮询后为实际成交价);每条收益列、涨跌色
- 策略列表: 总收益与胜率、涨跌色;价格区间格式 0.5 ~ 1
- 类型与 i18n: totalRealizedPnl/winRate/realizedPnl 等
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 05:44:19 +08:00
WrBug and Cursor
0efd4a5fc3
feat(crypto-tail): 尾盘策略收益与胜率:轮询未结算订单并回写收益
...
- 新增 V35 迁移:trigger 表增加 condition_id/resolved/winner_outcome_index/realized_pnl/settled_at
- 新增 CryptoTailSettlementService:每 10s 轮询 success 未结算订单,Gamma+链上查结算,优先用 CLOB 订单实际成交价与成交量算收益
- 防重叠:与订单轮询一致使用 Job+CoroutineScope,上一轮未结束则跳过
- 策略/触发 DTO 暴露 totalRealizedPnl、胜率及单笔 resolved/realizedPnl
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 05:22:56 +08:00
WrBug and Cursor
2238370088
feat(crypto-tail): 尾盘策略完整实现与优化
...
- 尾盘策略 CRUD、订单簿 WS 订阅、周期内触发下单
- 订单簿订阅日志增加市场 slug,便于排查
- 移除轮询,完全依赖 WebSocket(删除 CryptoTailStrategyScheduler)
- FIXED 模式数量改为小数、向上取整,与签名服务一致
- 前端策略列表页、多语言与 API 对接
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 05:01:10 +08:00
WrBug and GitHub
364db124d1
Merge pull request #29 from WrBug/dev
...
Release v2.2.0: Magic 账户支持、按代理地址去重、导入与回测优化
2026-02-14 01:45:48 +08:00
WrBug and Cursor
f1ec0a330b
feat(account): 按代理地址去重、默认账户名、前端重复提示与 DB 唯一约束
...
后端:
- 导入去重改为按 proxy_address(existsByProxyAddress),重复时返回 ACCOUNT_ALREADY_EXISTS(4601)
- 未填账户名时默认生成 SAFE/MAGIC-代理地址后4位(无中括号)
- Controller 识别 ACCOUNT_ALREADY_EXISTS 并返回对应错误码
前端:
- 导入失败时 message.error 提示;code=4601 时使用 accountImport.duplicateAccount 多语言
- store 抛出错误时附带 response.data.code 供表单判断
数据库 V33:
- 移除 wallet_address 唯一约束,新增 proxy_address 唯一约束
- 已存在账户的 wallet_type 统一更新为 safe
实体:
- Account.walletAddress 取消 unique,Account.proxyAddress 设为 unique
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 01:40:25 +08:00
WrBug and Cursor
72de65d670
feat(frontend): 优化导入账户弹窗与文案
...
- 导入弹窗:增加步骤条、导入方式改为按钮、代理选项卡片紧凑展示
- 代理选项:标题改为「请选择账户类型」,地址完整显示,有资产标绿,小白说明放入卡片内
- 私钥/助记词:输入框默认两行、禁止换行(换行自动转空格/去除)
- 多语言:新增 proxyAddressHelp,更新 selectProxyOption 文案
- Modal 宽度与内边距微调;PositionList 移除未使用 useRef
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 01:23:29 +08:00
WrBug and Cursor
3405a1cda3
feat: 钱包类型枚举与前端账号类型展示
...
后端:
- 新增 WalletType 枚举(MAGIC/SAFE),移除 safe/magic 字符串硬编码
- RelayClientService/BlockchainService/AccountService/OrderSigningService 使用枚举
- Builder Relayer API 类型使用常量 RELAYER_TYPE_PROXY/SAFE
前端:
- 账户列表、详情、导入 Modal 显示账号类型(Magic/Safe Tag)
- 导入账户 Modal 移除安全提示 Alert,移除 showAlert 与相关 i18n
- 移除无用 i18n key:securityTip、securityTipDesc、walletTypeMagic、walletTypeSafe、magicNotSupported
- 钱包类型 Tag 简化为仅显示 Magic 或 Safe
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 01:14:04 +08:00
WrBug and Cursor
fc6fa8b419
fix: 修复 Magic 账户赎回失败问题
...
主要修复:
1. 修复 PROXY ABI 编码问题:
- 添加缺失的 tuple offset 字段(32字节)
- 修正 data offset 从 192 改为 128(符合 ABI 规范)
- 与 builder-relayer-client 保持一致
2. 添加 gas limit 动态估算:
- 通过 eth_estimateGas 估算合理的 gas limit
- 避免硬编码 10M 导致 Relay Hub gasleft() 检查失败
- 估算失败时回退到默认值
3. 优化 API Key 检查逻辑:
- 仅在涉及 Magic 账户时提前检查 Builder API Key
- Safe 账户可在未配置 API Key 时使用手动交易
修复的问题:
- Magic 赎回交易失败:Not enough gasleft()
- PROXY 编码格式与官方不一致
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 00:59:39 +08:00
WrBug and Cursor
cf2c8a611c
feat: 赎回批量执行与仓位页体验优化
...
- 赎回:同一账户多市场合并为一笔交易,减少 Relayer 调用次数
- 仓位页:可赎回统计静默刷新,赎回按钮不再常驻 loading
- 账户导入表单、API、多语言等相关改动
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 00:20:41 +08:00
WrBug and Cursor
bd323fca35
feat: 支持 Magic(邮箱/社交登录)账户导入和赎回
...
- 前端:启用 Magic 账户导入选项(移除 disabled 和"暂不支持"提示)
- 订单签名:根据钱包类型自动设置 signatureType(Magic=1, Safe=2)
- Builder Relayer API:添加 relay-payload 接口和 PROXY 请求类型支持
- RelayClientService:实现 Magic PROXY 赎回流程(Gasless,需 Builder API Key)
- 获取 relay payload(relay 地址和 nonce)
- 编码 ProxyFactory.proxy(calls) 调用数据
- 创建并签名 PROXY 结构哈希
- 提交 PROXY 类型交易到 Builder Relayer
- BlockchainService:redeemPositions 支持 walletType 参数
- AccountService:移除 Magic 账户赎回限制,传递 walletType 参数
Magic 账户赎回要求配置 Builder API Key(Gasless),Safe 账户保持原有逻辑不变。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-13 22:51:18 +08:00
WrBug and Cursor
a067a20a02
feat: 回测任务支持价格区间过滤
...
- 后端:
- BacktestTask 实体类添加 minPrice 和 maxPrice 字段
- BacktestDto 添加价格区间参数和配置字段
- BacktestService 支持创建和查询价格区间配置
- BacktestExecutionService 在 taskToCopyTrading 中设置价格区间
- 添加数据库迁移脚本 V32__add_backtest_price_range_filter.sql
- 前端:
- BacktestList 添加价格区间输入表单(最低价、最高价)
- 详情页面显示价格区间配置
- 一键创建跟单配置时包含价格区间
- 添加中英繁三语言翻译
- 修复价格输入框精度显示问题(0.4 不再显示为 0.40000000)
功能说明:
- 价格区间过滤与跟单配置保持一致,确保回测结果能准确反映实际跟单效果
- 支持只设置最低价、只设置最高价、或同时设置两者
- 留空表示不限制价格
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-11 23:54:49 +08:00
WrBug and Cursor
99c4328830
feat(backtest): 失败与已停止的回测任务支持在列表中删除
...
操作列删除按钮对 STOPPED、FAILED 状态也显示,与详情页一致。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:57:37 +08:00
WrBug and Cursor
1df438d18d
fix(frontend): 修复 BacktestList 与 AddModal 的 TypeScript 类型错误
...
- BacktestList: Option 改为 Select.Option,避免与原生 HTML Option 冲突
- AddModal: onSelectChange 仅在 value 有值时调用 fetchLeaderAssetInfo
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:46:27 +08:00
WrBug and Cursor
366d3d1b25
fix(positions): 修复仓位管理点击市场链接打开两个标签页的问题
...
在市场列链接的 onClick 中增加 e.preventDefault(),阻止 <a> 默认行为,
避免与 window.open() 重复打开同一页面。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:41:59 +08:00
WrBug and Cursor
17a6a4f314
fix: 创建跟单时带入最大仓位金额参数
...
修复从回测任务创建跟单时,maxPositionValue 参数没有带入的问题。
修改内容:
- BacktestList.tsx:两处创建跟单配置时添加 maxPositionValue 字段
1) handleCreateCopyTrading 函数(预填充配置)
2) 复制按钮的预填充配置
- CopyTradingOrders/AddModal.tsx:
1) AddModalProps 接口添加 maxPositionValue 字段
2) fillPreFilledConfig 函数添加 maxPositionValue 处理
类型定义已存在:
- types/index.ts 的 CopyTradingCreateRequest 已包含 maxPositionValue 字段
- CopyTradingOrders/AddModal.tsx 的 handleSubmit 已处理该字段(第 355 行)
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:40:12 +08:00
WrBug and Cursor
8600449f69
fix(copytrading): 赎回后按 copyTrading 分别生成自动卖出记录
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:38:47 +08:00
WrBug and Cursor
3d47bd50d9
chore(backtest): 移除回测轮询服务的冗余日志
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:31:26 +08:00
WrBug and Cursor
20df471683
feat: 回测任务添加最大仓位参数支持
...
参考跟单配置的实现,为回测任务添加最大仓位金额限制功能。
后端改动:
- 添加数据库迁移文件 V31__add_backtest_max_position_value.sql
- BacktestTask 实体添加 maxPositionValue 字段(BigDecimal?,NULL表示不启用)
- BacktestCreateRequest 添加 maxPositionValue 字段
- BacktestConfigDto 添加 maxPositionValue 字段
- BacktestService 处理 maxPositionValue 的创建、详情和复制
- BacktestExecutionService.taskToCopyTrading 映射 maxPositionValue 参数
- BacktestExecutionService.executeBacktest 在买入逻辑中添加仓位检查
* 检查条件:当前仓位 + 买入金额 <= 最大仓位
* 仓位价值计算:quantity * avgPrice
* 超过限制时跳过该笔买入并记录详细日志
* 按市场+方向(marketId + outcomeIndex)分别检查
前端改动:
- BacktestList 表单添加最大仓位金额输入框(可选字段)
- 创建回测任务时包含 maxPositionValue
- 回测任务详情中显示 maxPositionValue(仅在配置了时显示)
- 默认最大每日订单数从 50 改为 100
- 多语言翻译新增:
* backtest.maxPositionValue: 最大仓位金额 / 最大倉位金額 / Max Position Value
* maxPositionValuePlaceholder: 留空表示不启用最大仓位限制
功能特点:
- 可选参数:留空或为 null 时表示不启用该限制,保持向后兼容
- 单市场单方向限制:按 marketId 和 outcomeIndex 分别计算和限制
- 精确计算:使用 BigDecimal 进行数值比较
- 详细日志:超过限制时记录当前仓位、买入金额、总计等详细信息
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:25:24 +08:00
WrBug and Cursor
5487c7c862
feat(leader): Leader 管理展示跟单/回测数量并支持跳转筛选
...
- 后端:LeaderDto 增加 backtestCount,LeaderService 统计回测数并返回
- Leader 列表:展示跟单数、回测数,点击跳转跟单配置/回测页并带 leaderId 筛选
- 跟单配置页:从 URL 读取 leaderId 并应用筛选,Leader 下拉改用 LeaderSelect
- 回测页:支持 Leader 筛选,页面加载时请求 Leader 列表,筛选与详情统一显示规则
- LeaderSelect:支持 style,回测/跟单筛选统一使用
- 多语言:补充 leaderList 相关 key
- 移动端:Leader 管理卡片内按钮增加内边距 padding 8px 16px
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 02:03:17 +08:00
WrBug and Cursor
c1829fe21b
feat(backtest): 结算显示市场名称,列表非终态任务 3s 轮询进度
...
- 结算记录: WIN/LOSE/UNKNOWN/CLOSED 通过 marketService.getMarket 写入 marketTitle
- 回测列表: 存在 PENDING/RUNNING 时每 3 秒静默刷新列表更新进度,全部终态后停止轮询
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 01:12:31 +08:00
WrBug and Cursor
b1ad6f02d2
feat(backtest): 回测结算持久化、按配置重新测试、执行时以当前时间为窗口基准
...
- 持久化: BUY/SELL 与 SETTLEMENT(WIN/LOSE/UNKNOWN/CLOSED) 均写入 backtest_trade
- 重新测试: 已完成任务支持「按当前配置重新测试」,新任务名称可编辑,后端 POST /tasks/rerun + 前端按钮与确认弹窗
- 回测窗口: 首次执行以当前时间为终点、startTime = endTime - backtestDays(局部变量,不修改实体)
- 新增错误码 BACKTEST_TASK_NOT_COMPLETED、SERVER_BACKTEST_RERUN_FAILED 及多语言
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-09 01:08:40 +08:00
WrBug and Cursor
01a1836659
docs: 清理根目录临时文档
...
- 删除过时的版本发布说明(RELEASE.md 和 RELEASE_NOTES_v2.0.*.md)
- 删除临时检查报告(CHECK_AND_FIX_REPORT.md、IMPLEMENTATION_COMPLETE.md、MISSING_ITEMS_CHECK.md)
- 所有版本发布信息统一在 RELEASE_NOTES.md 中管理
- 添加新的部署指南文档和 Docker 构建配置
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-08 23:34:46 +08:00
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