Files
sanguo_vnpy_v2/frontend/src/api/portfolio.ts
T
claude_dev 96b1924fd5 feat: 实盘模拟(live) + 组合回测MVP(portfolio)
[live] 实盘模拟 vnpy+miniQMT 直连(supervisor 轮询, 前后端):
- sanguo_live: LiveTradingEngine + AShareCtaTemplate(定寸/禁做空) + runner_supervisor(DB驱动) + persistence(4表WAL)
- sanguo_api/routes_live: 9路由(create/start/stop/positions/trades/account/status)
- frontend live: New/List/Monitor + api/live.ts; config/live.yaml

[portfolio] 组合回测 MVP(BulletTrade, 链路代码完成待验证):
- runner_backtest 加 JSON 入口(--json, BacktestEngine 顶层 import)
- sanguo_api/routes_portfolio: POST /portfolio/backtest SSH 触发 VPS 跑
- frontend PortfolioBacktest.vue + api/portfolio.ts: 表单+结果+净值曲线
- 路由/菜单注册(/backtest/portfolio 组合回测)
- 已知: MVP 链路未端到端验证, agent 改至中途被停; 待 Mac 起服务联调
2026-07-18 20:04:16 +08:00

69 lines
1.4 KiB
TypeScript

import { apiClient } from './client'
export interface PortfolioBacktestReq {
pool: string
start_date: string
end_date: string
initial_cash: number
benchmark?: string
}
export interface EquityPoint {
date: string
equity: number
}
export interface StockPicked {
code: string
name: string
amount: number
avg_cost: number
price: number
value: number
}
export interface PortfolioTrade {
datetime?: string
date?: string
code?: string
side?: string
action?: string
amount?: number
filled_amount?: number
price?: number
filled_price?: number
commission?: number
status?: string
}
export interface PortfolioMetrics {
total_return: number | null
annual_return: number | null
max_drawdown: number | null
sharpe: number | null
win_rate_daily: number | null
win_rate_trade: number | null
trading_days: number | null
}
export interface PortfolioBacktestResult {
strategy: string
period: { start: string; end: string; trading_days: number }
stocks_selected: StockPicked[]
trades: PortfolioTrade[]
equity_curve: EquityPoint[]
metrics: PortfolioMetrics
raw_summary?: Record<string, unknown>
}
export async function postPortfolioBacktest(
req: PortfolioBacktestReq,
): Promise<PortfolioBacktestResult> {
const { data } = await apiClient.post<PortfolioBacktestResult>(
'/portfolio/backtest',
req,
{ timeout: 600000 },
)
return data
}