WrBug
|
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
|
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
|
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
|
0f50939625
|
feat(尾盘策略): 触发记录分页与时间筛选、策略列表与表单优化
触发记录:
- 成功/失败分 Tab,失败展示失败原因
- 分页与按天时间范围筛选(日历,结束日不超过今天)
- 后端 startDate/endDate、Repository 时间范围查询
- 弹窗美化:时间范围卡片、空状态、分页总数;移除订单 ID 列
- 查看触发记录按钮文案改为「订单」
策略列表:
- 状态列恢复为 Switch,PC 端放在第一列
- 新增账户列;移除最近触发列
- 文案换行(wordBreak/whiteSpace);时间区间 PC 换行、移动端单行
- 时间区间列宽缩小;移动端 Switch 在底部操作区
- 编辑时账户不可修改;策略名称 placeholder 改为「选填,留空将自动生成」
- 多语言:account、viewTriggers、strategyNamePlaceholder 等
Co-authored-by: Cursor <cursoragent@cursor.com>
v2.3.0
|
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
|
a62f1bd6e8
|
feat(cryptotail): 尾盘策略首次满足条件时打印日志
- 在价格与时间区间首次满足且本周期未触发时打印日志
- 日志包含:开盘价、收盘价、当前市场价格、方向、策略名
- 日志放在 passMinSpreadCheck 前
- 使用 Caffeine LRU 缓存(容量100)保证每周期只打印一次
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-15 00:58:14 +08:00 |
|
WrBug
|
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
|
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
|
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
|
bd529d9041
|
feat(cryptotail): 尾盘策略打印初始价差
- 周期开始预计算 AUTO 价差后打印 baseSpreadUp/baseSpreadDown
- 触发价差校验时打印初始价差、系数、有效最小价差、当前K线价差及是否通过
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 21:00:01 +08:00 |
|
WrBug
|
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
|
ca2b1acbb9
|
fix(cryptotail): 尾盘策略下单取消重试并打印完整报错信息
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 20:34:27 +08:00 |
|
WrBug
|
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
|
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
|
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
|
5074bb4f28
|
fix(order): 修复订单签名 salt 并发碰撞问题
- 使用 AtomicLong + 时间戳保证 generateSalt 在并发下唯一
- 避免尾盘策略 FIXED 模式预签双单等场景产生相同 salt 导致订单冲突
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 15:32:19 +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
|
7ec9311df2
|
feat(cryptotail): 创建/修改策略时未填标题则自动生成并入库
- create: name 为空时生成「尾盘策略-{marketSlugPrefix}-{yyyyMMddHHmmss}」
- update: 未填且原无标题时同样生成并更新
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 13:13:55 +08:00 |
|
WrBug
|
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
|
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
|
bf0e52fc01
|
chore(cryptotail): 移除 CryptoTailStrategyScheduler,runCycle 未实现且触发由 WS 负责
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 07:33:34 +08:00 |
|
WrBug
|
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
|
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
|
a1f3cfd3ff
|
fix(account): 无跟单配置账户也执行自动赎回,支持尾盘策略仓位
- 移除 checkRedeemablePositions 中对 copyTradings.isEmpty() 的 continue
- 尾盘策略等仅用该账户、无跟单配置的账户可赎回仓位现会正常自动赎回
- 赎回成功后仍仅对有跟单配置的账户更新跟单订单状态
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-14 07:05:01 +08:00 |
|
WrBug
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
364db124d1
|
Merge pull request #29 from WrBug/dev
Release v2.2.0: Magic 账户支持、按代理地址去重、导入与回测优化
|
2026-02-14 01:45:48 +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>
v2.2.0
|
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
|
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
|
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>
v2.1.1
|
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
|
8600449f69
|
fix(copytrading): 赎回后按 copyTrading 分别生成自动卖出记录
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-09 02:38:47 +08:00 |
|
WrBug
|
3d47bd50d9
|
chore(backtest): 移除回测轮询服务的冗余日志
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-09 02:31:26 +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 |
|