WrBug
|
c5d59dfdf9
|
refactor: 尾盘策略统一更名为加密价差策略
- 前端:菜单父级「加密价差策略」,子项「策略配置」「实时监控」;i18n 与类型注释全部替换
- 后端:i18n、ErrorCode、DTO/实体/服务注释与日志「尾盘」→「加密价差策略」;TG 通知文案
- 文档:README、中英文用户指南、UI 规格、任务、流程、价差流程、市场数据、动态系数等全部更新
- 不修改 API 路径、路由、表名与类名,保持兼容
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-25 21:30:50 +08:00 |
|
WrBug
|
4b277eaeab
|
feat(frontend): 尾盘父级菜单与图标优化
- 尾盘策略、尾盘监控归入「尾盘」父级菜单,与跟单交易结构一致
- 菜单图标:父级 LineChart,尾盘策略 RocketOutlined,尾盘监控 DashboardOutlined
- 多语言:新增 menu.cryptoTail(尾盘/尾盤/Crypto Tail)
- 含 CryptoTailMonitor 及后端 DTO/Service 等修改
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-25 21:17:44 +08:00 |
|
WrBug
|
f35bad78d4
|
feat(i18n): 系统更新功能多语言支持与缺失 key 补全
- 新增 systemUpdate 区块(zh-CN/zh-TW/en)覆盖系统更新页与版本提示
- zh-CN 补充 account.walletType
- SystemUpdate 页与 Layout 版本 tag 全部改为 useTranslation,移除硬编码中文
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-25 21:14:59 +08:00 |
|
WrBug
|
0740abcf16
|
fix(crypto-tail): 监控分时图推送节流与前端采样,避免1s内多条数据导致点过密
- 后端: price_change 推送节流,每策略 1s 内最多推送 1 次,其余靠定时 1.5s 推送补足
- 前端: 同周期内分时图追加点时至少间隔 1s 才追加,保证曲线连续且不过密
- 最新价等展示仍实时更新,仅图表序列做采样
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-25 20:01:29 +08:00 |
|
WrBug
|
84c79d8812
|
feat(cryptotail): 尾盘监控双连接与分时图优化
- 监控 WebSocket 拆分为当前周期连接与下一周期连接,周期切换时关闭过期连接并新建下一周期
- 下一周期市场未创建时也建立第二条空连接,保证始终两条连接
- refreshSubscription 增加 Mutex 防重入,避免周期结束时定时器与消息同时触发导致重复执行
- 修复 initMonitor/buildPushData 中 getCurrentOpenClose、spreadMode/spreadValue 等 API 与实体字段引用
- 移除重复的 buildSubscriptionMap、buildPushData 等方法,修复 StrategyPriceData.periodStartUnix
- 前端分时图:市场价折线增加 connectNulls,新周期默认 0.5 价格展示
- 多语言与监控页入口、API 类型与 WebSocket 订阅集成
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-25 17:00:41 +08:00 |
|
WrBug
|
d3196a783f
|
feat(cryptotail): 尾盘策略多市场与币安按需订阅
- 新增 ETH/SOL/XRP 市场选项(5m/15m),Binance 多币种 K 线支持
- 币安 K 线按策略按周期订阅:仅在有启用策略时建连,只订阅用到的市场+周期(如仅 btc 5m 只建 btc 5m)
- BinanceKlineAutoSpreadService 支持完整 slug(如 eth-updown-5m)解析
- 尾盘服务 PreDestroy 与内存/缓存清理(OrderbookWs、Notification、Settlement、Execution)
- 健康检查:无策略时币安 WS 显示「未订阅」;前端币安提醒仅在有启用策略时展示
- 前端:up/down 标签去掉箭头图标
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-20 23:45:24 +08:00 |
|
WrBug
|
5bb46ebb97
|
docs: 尾盘策略文档归集至 docs/crypto-tail-strategy/,前端链接同步
- 将尾盘策略相关文档移至 docs/crypto-tail-strategy/{zh,en}/
- 新增 docs/crypto-tail-strategy/README.md 目录说明
- 前端配置指南链接改为 docs/crypto-tail-strategy/${lang}/crypto-tail-strategy-user-guide.md
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-18 03:25:30 +08:00 |
|
WrBug
|
cbcebf6e28
|
chore: 账户设置与杂项修复
- BlockchainService: 新增 isProxyDeployed、getUsdcAllowance(账户设置检查/授权用)
- RetrofitFactory: 移除 RPC URL 替换 debug 日志
- AccountImportForm: 修复 checkSetupStatus/onSuccess 参数类型(使用 newAccount.id)
- AccountSetupStatusBlock: 移除未使用的 isMobile 与 useMediaQuery 引用
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-18 03:17:40 +08:00 |
|
WrBug
|
de89175c8e
|
feat: 账户设置后端 action、Safe 部署与设置引导弹窗复用
账户设置:
- 后端: execute-setup-step API(步骤1 Safe 一键部署/步骤2 启用交易/步骤3 代币授权)
- Safe 部署: Eip712Encoder SafeCreate/CreateProxy,RelayClientService.deploySafeViaBuilderRelayer
- BuilderRelayerApi: SignatureParams 增加 paymentToken/payment/paymentReceiver,TransactionRequest.nonce 可选
- 导入成功有未完成步骤时先弹设置引导再关导入弹窗;设置弹窗复用 AccountSetupStatusBlock(embedded)
- AccountSetupStatusBlock: 5s 轮询、embedded 模式、onAllCompleted、移除全部完成 Tag、授权信息始终展示且右对齐额度列
- 多语言: 步骤1/2/3 文案与 actionSuccess/actionFailed
CryptoTail:
- SpreadDirection/SpreadMode 枚举及 Converter,V38 迁移,策略列表与 api/types 调整
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-18 03:01:35 +08:00 |
|
WrBug
|
4e1bb0bbcf
|
feat: 添加尾盘策略配置指南文档和前端链接
- 新增中文和英文配置指南文档(docs/zh|en/crypto-tail-strategy-user-guide.md)
- 在尾盘策略列表页面添加配置指南链接按钮
- 根据用户语言自动跳转到对应语言的 GitHub 文档预览
- 添加多语言翻译键(中文简体/繁体/英文)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-18 00:54:30 +08:00 |
|
WrBug
|
c38529546f
|
feat(system): Builder API Key 等配置前端显示完整值
- 后端 SystemConfigService 返回解密后的完整 builderApiKey/Secret/Passphrase,不再脱敏
- 移除未使用的 maskSensitiveValue 方法
- 更新 DTO 与前端类型注释为「完整显示」
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-16 01:47:52 +08:00 |
|
WrBug
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
72de65d670
|
feat(frontend): 优化导入账户弹窗与文案
- 导入弹窗:增加步骤条、导入方式改为按钮、代理选项卡片紧凑展示
- 代理选项:标题改为「请选择账户类型」,地址完整显示,有资产标绿,小白说明放入卡片内
- 私钥/助记词:输入框默认两行、禁止换行(换行自动转空格/去除)
- 多语言:新增 proxyAddressHelp,更新 selectProxyOption 文案
- Modal 宽度与内边距微调;PositionList 移除未使用 useRef
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 01:23:29 +08:00 |
|
WrBug
|
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
|
cf2c8a611c
|
feat: 赎回批量执行与仓位页体验优化
- 赎回:同一账户多市场合并为一笔交易,减少 Relayer 调用次数
- 仓位页:可赎回统计静默刷新,赎回按钮不再常驻 loading
- 账户导入表单、API、多语言等相关改动
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 00:20:41 +08:00 |
|
WrBug
|
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
|
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
|
99c4328830
|
feat(backtest): 失败与已停止的回测任务支持在列表中删除
操作列删除按钮对 STOPPED、FAILED 状态也显示,与详情页一致。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-09 02:57:37 +08:00 |
|
WrBug
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
ff3b24b50e
|
fix: 优化回测交易记录显示
- 盈亏颜色逻辑:仅盈利(>0)显示绿色,亏损(<0)显示红色,持平(=0)无颜色
- 手续费显示:确保null值显示为 $0.00
- 遵守绿涨红跌原则
|
2026-01-31 20:58:13 +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
|
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
|
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 |
|