mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-04 11:30:58 +08:00
* feat: add frontend warnings for zero candidate coins 当候选币种数量为0时,在前端添加详细的错误提示和诊断信息 主要改动: 1. 决策日志中显示候选币种数量,为0时标红警告 2. 候选币种为0时显示详细警告卡片,包含可能原因和解决方案 3. 交易员列表页面添加信号源未配置的全局警告 4. 更新TraderInfo类型定义,添加use_coin_pool和use_oi_top字段 详细说明: - 在App.tsx的账户状态摘要中添加候选币种显示 - 当候选币种为0时,显示详细的警告卡片,列出: * 可能原因(API未配置、连接超时、数据为空等) * 解决方案(配置自定义币种、配置API、禁用选项等) - 在AITradersPage中添加信号源配置检查 * 当交易员启用了币种池但未配置API时显示全局警告 * 提供"立即配置信号源"快捷按钮 - 不改变任何后端逻辑,纯UI层面的用户提示改进 影响范围: - web/src/App.tsx: 决策记录卡片中的警告显示 - web/src/components/AITradersPage.tsx: 交易员列表页警告 - web/src/types.ts: TraderInfo类型定义更新 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> * fix: import AlertTriangle from lucide-react in App.tsx 修复TypeScript编译错误:Cannot find name 'AlertTriangle' 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: tinkle-community <tinklefund@gmail.com> --------- Co-authored-by: tinkle-community <tinklefund@gmail.com>
207 lines
4.2 KiB
TypeScript
207 lines
4.2 KiB
TypeScript
export interface SystemStatus {
|
|
trader_id: string
|
|
trader_name: string
|
|
ai_model: string
|
|
is_running: boolean
|
|
start_time: string
|
|
runtime_minutes: number
|
|
call_count: number
|
|
initial_balance: number
|
|
scan_interval: string
|
|
stop_until: string
|
|
last_reset_time: string
|
|
ai_provider: string
|
|
}
|
|
|
|
export interface AccountInfo {
|
|
total_equity: number
|
|
wallet_balance: number
|
|
unrealized_profit: number
|
|
available_balance: number
|
|
total_pnl: number
|
|
total_pnl_pct: number
|
|
total_unrealized_pnl: number
|
|
initial_balance: number
|
|
daily_pnl: number
|
|
position_count: number
|
|
margin_used: number
|
|
margin_used_pct: number
|
|
}
|
|
|
|
export interface Position {
|
|
symbol: string
|
|
side: string
|
|
entry_price: number
|
|
mark_price: number
|
|
quantity: number
|
|
leverage: number
|
|
unrealized_pnl: number
|
|
unrealized_pnl_pct: number
|
|
liquidation_price: number
|
|
margin_used: number
|
|
}
|
|
|
|
export interface DecisionAction {
|
|
action: string
|
|
symbol: string
|
|
quantity: number
|
|
leverage: number
|
|
price: number
|
|
order_id: number
|
|
timestamp: string
|
|
success: boolean
|
|
error?: string
|
|
}
|
|
|
|
export interface AccountSnapshot {
|
|
total_balance: number
|
|
available_balance: number
|
|
total_unrealized_profit: number
|
|
position_count: number
|
|
margin_used_pct: number
|
|
}
|
|
|
|
export interface DecisionRecord {
|
|
timestamp: string
|
|
cycle_number: number
|
|
input_prompt: string
|
|
cot_trace: string
|
|
decision_json: string
|
|
account_state: AccountSnapshot
|
|
positions: any[]
|
|
candidate_coins: string[]
|
|
decisions: DecisionAction[]
|
|
execution_log: string[]
|
|
success: boolean
|
|
error_message?: string
|
|
}
|
|
|
|
export interface Statistics {
|
|
total_cycles: number
|
|
successful_cycles: number
|
|
failed_cycles: number
|
|
total_open_positions: number
|
|
total_close_positions: number
|
|
}
|
|
|
|
// AI Trading相关类型
|
|
export interface TraderInfo {
|
|
trader_id: string
|
|
trader_name: string
|
|
ai_model: string
|
|
exchange_id?: string
|
|
is_running?: boolean
|
|
custom_prompt?: string
|
|
use_coin_pool?: boolean
|
|
use_oi_top?: boolean
|
|
}
|
|
|
|
export interface AIModel {
|
|
id: string
|
|
name: string
|
|
provider: string
|
|
enabled: boolean
|
|
apiKey?: string
|
|
customApiUrl?: string
|
|
customModelName?: string
|
|
}
|
|
|
|
export interface Exchange {
|
|
id: string
|
|
name: string
|
|
type: 'cex' | 'dex'
|
|
enabled: boolean
|
|
apiKey?: string
|
|
secretKey?: string
|
|
testnet?: boolean
|
|
// Hyperliquid 特定字段
|
|
hyperliquidWalletAddr?: string
|
|
// Aster 特定字段
|
|
asterUser?: string
|
|
asterSigner?: string
|
|
asterPrivateKey?: string
|
|
}
|
|
|
|
export interface CreateTraderRequest {
|
|
name: string
|
|
ai_model_id: string
|
|
exchange_id: string
|
|
initial_balance: number
|
|
scan_interval_minutes?: number
|
|
btc_eth_leverage?: number
|
|
altcoin_leverage?: number
|
|
trading_symbols?: string
|
|
custom_prompt?: string
|
|
override_base_prompt?: boolean
|
|
system_prompt_template?: string
|
|
is_cross_margin?: boolean
|
|
use_coin_pool?: boolean
|
|
use_oi_top?: boolean
|
|
}
|
|
|
|
export interface UpdateModelConfigRequest {
|
|
models: {
|
|
[key: string]: {
|
|
enabled: boolean
|
|
api_key: string
|
|
custom_api_url?: string
|
|
custom_model_name?: string
|
|
}
|
|
}
|
|
}
|
|
|
|
export interface UpdateExchangeConfigRequest {
|
|
exchanges: {
|
|
[key: string]: {
|
|
enabled: boolean
|
|
api_key: string
|
|
secret_key: string
|
|
testnet?: boolean
|
|
// Hyperliquid 特定字段
|
|
hyperliquid_wallet_addr?: string
|
|
// Aster 特定字段
|
|
aster_user?: string
|
|
aster_signer?: string
|
|
aster_private_key?: string
|
|
}
|
|
}
|
|
}
|
|
|
|
// Competition related types
|
|
export interface CompetitionTraderData {
|
|
trader_id: string
|
|
trader_name: string
|
|
ai_model: string
|
|
exchange: string
|
|
total_equity: number
|
|
total_pnl: number
|
|
total_pnl_pct: number
|
|
position_count: number
|
|
margin_used_pct: number
|
|
is_running: boolean
|
|
}
|
|
|
|
export interface CompetitionData {
|
|
traders: CompetitionTraderData[]
|
|
count: number
|
|
}
|
|
|
|
// Trader Configuration Data for View Modal
|
|
export interface TraderConfigData {
|
|
trader_id?: string
|
|
trader_name: string
|
|
ai_model: string
|
|
exchange_id: string
|
|
btc_eth_leverage: number
|
|
altcoin_leverage: number
|
|
trading_symbols: string
|
|
custom_prompt: string
|
|
override_base_prompt: boolean
|
|
is_cross_margin: boolean
|
|
use_coin_pool: boolean
|
|
use_oi_top: boolean
|
|
initial_balance: number
|
|
scan_interval_minutes: number
|
|
is_running: boolean
|
|
}
|