feat(web): 因子工作台接线——eval API 客户端+3路由+投研组菜单/面包屑 [nas]
This commit is contained in:
@@ -33,3 +33,89 @@ export function reportUrl(taskId: string, factor: string): string {
|
||||
const auth = useAuthStore()
|
||||
return `/api/v1/task/${taskId}/report/${factor}?token=${encodeURIComponent(auth.token ?? '')}`
|
||||
}
|
||||
|
||||
// —— Factor Evaluation API ——
|
||||
|
||||
export interface EvalRun {
|
||||
run_id: string
|
||||
label: string
|
||||
universe: string
|
||||
symbols_count: number
|
||||
factors_total: number
|
||||
factors_done: number
|
||||
start: string
|
||||
end: string
|
||||
status: string
|
||||
created_at: string
|
||||
}
|
||||
|
||||
export interface MonthlyIcPoint { month: string; ic: number }
|
||||
|
||||
export interface LeaderboardRow {
|
||||
rank: number
|
||||
factor: string
|
||||
category: string
|
||||
expression: string
|
||||
ic_mean: number | null
|
||||
icir: number | null
|
||||
t_stat: number | null
|
||||
win_rate: number | null
|
||||
ls_annual: number | null
|
||||
turnover: number | null
|
||||
conclusion: string
|
||||
monthly_ic: MonthlyIcPoint[]
|
||||
error?: string
|
||||
}
|
||||
|
||||
export interface LeaderboardTiles {
|
||||
factors_total: number
|
||||
effective: number
|
||||
watch: number
|
||||
top_ls_annual: number | null
|
||||
top_ls_factor: string | null
|
||||
}
|
||||
|
||||
export interface EvalDetail {
|
||||
factor: string
|
||||
category: string
|
||||
expression: string
|
||||
metrics: Record<string, unknown>
|
||||
}
|
||||
|
||||
export interface BatchEvalSubmit {
|
||||
categories: string[]
|
||||
factors: string[]
|
||||
symbols: string[]
|
||||
start: string
|
||||
end: string
|
||||
label: string
|
||||
}
|
||||
|
||||
export async function getEvalRuns(): Promise<EvalRun[]> {
|
||||
const { data } = await apiClient.get<{ runs: EvalRun[] }>('/factor/eval/runs')
|
||||
return data.runs
|
||||
}
|
||||
|
||||
export async function getLeaderboard(params: {
|
||||
run_id?: string
|
||||
period?: string
|
||||
category?: string
|
||||
search?: string
|
||||
sort?: string
|
||||
order?: string
|
||||
}): Promise<{ tiles: LeaderboardTiles; rows: LeaderboardRow[] }> {
|
||||
const { data } = await apiClient.get('/factor/eval/leaderboard', { params })
|
||||
return data
|
||||
}
|
||||
|
||||
export async function getEvalDetail(factor: string, runId?: string): Promise<EvalDetail> {
|
||||
const { data } = await apiClient.get<EvalDetail>('/factor/eval/detail', {
|
||||
params: { factor, ...(runId ? { run_id: runId } : {}) },
|
||||
})
|
||||
return data
|
||||
}
|
||||
|
||||
export async function submitBatchEval(req: BatchEvalSubmit): Promise<string> {
|
||||
const { data } = await apiClient.post<{ task_id: string }>('/factor/eval/submit', req)
|
||||
return data.task_id
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user