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(不再需要实时同步) - 修复前后端编译错误
This commit is contained in:
@@ -726,3 +726,72 @@ export { apiClient }
|
||||
|
||||
export default apiService
|
||||
|
||||
/**
|
||||
* 回测服务
|
||||
*/
|
||||
export const backtestService = {
|
||||
/**
|
||||
* 创建回测任务
|
||||
*/
|
||||
create: (data: {
|
||||
taskName: string
|
||||
leaderId: number
|
||||
initialBalance: string
|
||||
backtestDays: number
|
||||
copyMode?: 'RATIO' | 'FIXED'
|
||||
copyRatio?: string
|
||||
fixedAmount?: string
|
||||
maxOrderSize?: string
|
||||
minOrderSize?: string
|
||||
maxDailyLoss?: string
|
||||
maxDailyOrders?: number
|
||||
priceTolerance?: string
|
||||
delaySeconds?: number
|
||||
supportSell?: boolean
|
||||
minOrderDepth?: string
|
||||
maxSpread?: string
|
||||
minPrice?: string
|
||||
maxPrice?: string
|
||||
maxPositionValue?: string
|
||||
keywordFilterMode?: 'DISABLED' | 'WHITELIST' | 'BLACKLIST'
|
||||
keywords?: string[]
|
||||
maxMarketEndDate?: number | null
|
||||
}) => apiClient.post('/api/backtest/tasks', data),
|
||||
|
||||
/**
|
||||
* 查询回测任务列表
|
||||
*/
|
||||
list: (data: {
|
||||
leaderId?: number
|
||||
status?: 'PENDING' | 'RUNNING' | 'COMPLETED' | 'STOPPED' | 'FAILED'
|
||||
sortBy?: 'profitAmount' | 'profitRate' | 'createdAt'
|
||||
sortOrder?: 'asc' | 'desc'
|
||||
page: number
|
||||
size: number
|
||||
}) => apiClient.post('/api/backtest/tasks/list', data),
|
||||
|
||||
/**
|
||||
* 查询回测任务详情
|
||||
*/
|
||||
detail: (data: { id: number }) => apiClient.post('/api/backtest/tasks/detail', data),
|
||||
|
||||
/**
|
||||
* 查询回测交易记录
|
||||
*/
|
||||
trades: (data: {
|
||||
taskId: number
|
||||
page: number
|
||||
size: number
|
||||
}) => apiClient.post('/api/backtest/tasks/trades', data),
|
||||
|
||||
/**
|
||||
* 停止回测任务
|
||||
*/
|
||||
stop: (data: { id: number }) => apiClient.post('/api/backtest/tasks/stop', data),
|
||||
|
||||
/**
|
||||
* 删除回测任务
|
||||
*/
|
||||
delete: (data: { id: number }) => apiClient.post('/api/backtest/tasks/delete', data)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user