feat: 实现跟单筛选条件记录和展示功能

- 新增 FilteredOrder 实体和数据库表,记录被过滤的订单信息
- 在筛选失败时自动记录到数据库并发送 Telegram 通知
- 创建 FilteredOrderService 和 API 接口,支持查询被过滤订单列表
- 前端新增被过滤订单列表页面,支持按过滤类型筛选
- 修复价差计算逻辑,使用数组最大值和最小值而非第一个元素
- 优化编辑页面 UI,钱包和 Leader 显示与创建页面一致(只读)
- 添加多语言支持(中文、繁体中文、英文)
This commit is contained in:
WrBug
2025-12-05 05:18:20 +08:00
parent e68309ada0
commit 9b8150cf92
33 changed files with 3801 additions and 549 deletions
+118 -5
View File
@@ -107,7 +107,10 @@ export interface CopyTradingTemplate {
maxDailyOrders: number
priceTolerance: string
supportSell: boolean
useCount: number
// 过滤条件
minOrderDepth?: string
maxSpread?: string
minOrderbookDepth?: string
createdAt: number
updatedAt: number
}
@@ -168,19 +171,36 @@ export interface TemplateCopyRequest {
}
/**
* 跟单关系(钱包-模板关联
* 跟单配置(独立配置,不再绑定模板
*/
export interface CopyTrading {
id: number
accountId: number
accountName?: string
walletAddress: string
templateId: number
templateName: string
leaderId: number
leaderName?: string
leaderAddress: string
enabled: boolean
// 跟单配置参数
copyMode: 'RATIO' | 'FIXED'
copyRatio: string
fixedAmount?: string
maxOrderSize: string
minOrderSize: string
maxDailyLoss: string
maxDailyOrders: number
priceTolerance: string
delaySeconds: number
pollIntervalSeconds: number
useWebSocket: boolean
websocketReconnectInterval: number
websocketMaxRetries: number
supportSell: boolean
// 过滤条件
minOrderDepth?: string
maxSpread?: string
minOrderbookDepth?: string
createdAt: number
updatedAt: number
}
@@ -195,12 +215,58 @@ export interface CopyTradingListResponse {
/**
* 跟单创建请求
* 所有配置参数都需要手动输入,模板仅用于前端快速填充表单
*/
export interface CopyTradingCreateRequest {
accountId: number
templateId: number
leaderId: number
enabled?: boolean
// 跟单配置参数
copyMode?: 'RATIO' | 'FIXED'
copyRatio?: string
fixedAmount?: string
maxOrderSize?: string
minOrderSize?: string
maxDailyLoss?: string
maxDailyOrders?: number
priceTolerance?: string
delaySeconds?: number
pollIntervalSeconds?: number
useWebSocket?: boolean
websocketReconnectInterval?: number
websocketMaxRetries?: number
supportSell?: boolean
// 过滤条件
minOrderDepth?: string
maxSpread?: string
minOrderbookDepth?: string
}
/**
* 跟单更新请求
*/
export interface CopyTradingUpdateRequest {
copyTradingId: number
enabled?: boolean
// 跟单配置参数(可选,只更新提供的字段)
copyMode?: 'RATIO' | 'FIXED'
copyRatio?: string
fixedAmount?: string
maxOrderSize?: string
minOrderSize?: string
maxDailyLoss?: string
maxDailyOrders?: number
priceTolerance?: string
delaySeconds?: number
pollIntervalSeconds?: number
useWebSocket?: boolean
websocketReconnectInterval?: number
websocketMaxRetries?: number
supportSell?: boolean
// 过滤条件
minOrderDepth?: string
maxSpread?: string
minOrderbookDepth?: string
}
/**
@@ -600,6 +666,53 @@ export interface OrderTrackingRequest {
buyOrderId?: string
}
/**
* 被过滤订单信息
*/
export interface FilteredOrder {
id: number
copyTradingId: number
accountId: number
accountName?: string
leaderId: number
leaderName?: string
leaderTradeId: string
marketId: string
marketTitle?: string
marketSlug?: string
side: 'BUY' | 'SELL'
outcomeIndex?: number
outcome?: string
price: string
size: string
calculatedQuantity?: string
filterReason: string
filterType: string
createdAt: number
}
/**
* 被过滤订单列表请求
*/
export interface FilteredOrderListRequest {
copyTradingId: number
filterType?: string
page?: number
limit?: number
startTime?: number
endTime?: number
}
/**
* 被过滤订单列表响应
*/
export interface FilteredOrderListResponse {
list: FilteredOrder[]
total: number
page: number
limit: number
}
/**
* 消息推送配置
*/