156 lines
4.2 KiB
TypeScript
156 lines
4.2 KiB
TypeScript
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<string, unknown>
|
|
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
|
|
// §12.6 实例做实:绑档案发起(空=发起即建档)
|
|
instance_id?: number | null
|
|
}
|
|
|
|
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<LiveAccount[]> {
|
|
const { data } = await apiClient.get<{ accounts: LiveAccount[] }>('/live')
|
|
return data.accounts
|
|
}
|
|
|
|
export async function getLive(aid: number): Promise<LiveAccount> {
|
|
const { data } = await apiClient.get<LiveAccount>(`/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<LivePosition[]> {
|
|
const { data } = await apiClient.get<LivePosition[]>(`/live/${aid}/positions`)
|
|
return data
|
|
}
|
|
|
|
export async function getLiveTrades(aid: number): Promise<LiveTrade[]> {
|
|
const { data } = await apiClient.get<LiveTrade[]>(`/live/${aid}/trades`)
|
|
return data
|
|
}
|
|
|
|
export async function getLiveAccountBalance(aid: number): Promise<LiveBalance> {
|
|
const { data } = await apiClient.get<LiveBalance>(`/live/${aid}/account`)
|
|
return data ?? {}
|
|
}
|
|
|
|
export async function getLiveStatus(aid: number): Promise<LiveStatus> {
|
|
const { data } = await apiClient.get<LiveStatus>(`/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
|
|
}
|