import { apiClient } from './client' /** 实盘模拟账户(API 返回行) */ export interface LiveAccount { id: number name: string account: string vt_symbol: string strategy_class: string strategy_name: string /** JSON 字符串,前端 JSON.parse 得到策略参数 */ setting: string status: string interval: string initial_capital: number connect_wait_sec?: number init_wait_sec?: number mini_path?: string error_msg?: string | null created_at?: string updated_at?: string /** 列表端点附带(单账户 GET 不含) */ latest_equity?: number | null latest_date?: string | null total_return?: number | null position_count?: number instance?: string /** 'cta' 个股 / 'portfolio' 组合 */ strategy_type?: string pool?: string | null max_pool?: number | null benchmark?: string | null } export interface LiveCreateRequest { name: string account: string vt_symbol: string strategy_class: string strategy_name: string setting: Record interval: string initial_capital: number connect_wait_sec?: number init_wait_sec?: number mini_path?: string strategy_type?: string pool?: string max_pool?: number benchmark?: string } export interface LiveStatus { account_id: number status: string name: string account: string vt_symbol: string strategy_name: string updated_at?: string error_msg?: string } export interface LivePosition { symbol: string volume: number frozen: number avg_price: number updated_at?: string } export interface LiveTrade { account_id: number strategy_name: string symbol: string direction: string offset: string price: number volume: number traded_at: string vt_tradeid?: string } export interface LiveBalance { account_id?: number date?: string cash?: number market_value?: number total?: number } export async function createLive(req: LiveCreateRequest): Promise<{ accountId: number; status: string }> { const { data } = await apiClient.post<{ account_id: number; status: string }>('/live/create', req) return { accountId: data.account_id, status: data.status } } export async function listLives(): Promise { const { data } = await apiClient.get<{ accounts: LiveAccount[] }>('/live') return data.accounts } export async function getLive(aid: number): Promise { const { data } = await apiClient.get(`/live/${aid}`) return data } export async function startLive(aid: number): Promise<{ accountId: number; status: string }> { const { data } = await apiClient.post<{ account_id: number; status: string }>(`/live/${aid}/start`) return { accountId: data.account_id, status: data.status } } export async function stopLive(aid: number): Promise<{ accountId: number; status: string }> { const { data } = await apiClient.post<{ account_id: number; status: string }>(`/live/${aid}/stop`) return { accountId: data.account_id, status: data.status } } export async function getLivePositions(aid: number): Promise { const { data } = await apiClient.get(`/live/${aid}/positions`) return data } export async function getLiveTrades(aid: number): Promise { const { data } = await apiClient.get(`/live/${aid}/trades`) return data } export async function getLiveAccountBalance(aid: number): Promise { const { data } = await apiClient.get(`/live/${aid}/account`) return data ?? {} } export async function getLiveStatus(aid: number): Promise { const { data } = await apiClient.get(`/live/${aid}/status`) return data } export async function deleteLive(aid: number): Promise<{ account_id: number; deleted: boolean }> { const { data } = await apiClient.delete(`/live/${aid}`) return data } export interface LiveUpdateReq { name?: string account?: string vt_symbol?: string strategy_name?: string interval?: string } export async function updateLive(aid: number, req: LiveUpdateReq): Promise<{ updated: boolean }> { const { data } = await apiClient.put(`/live/${aid}`, req) return data }