diff --git a/.gitignore b/.gitignore index d501f8dd..4dc2afc9 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ Thumbs.db # 环境变量 .env config.json +config.db # 决策日志 decision_logs/ diff --git a/main.go b/main.go index e4179872..1d9631a9 100644 --- a/main.go +++ b/main.go @@ -160,14 +160,30 @@ func main() { log.Printf("✓ 配置数据库初始化成功") fmt.Println() - // 设置默认主流币种列表 - defaultCoins := []string{"BTC", "ETH", "SOL", "BNB", "XRP", "DOGE", "ADA", "HYPE"} + // 从数据库读取默认主流币种列表 + defaultCoinsJSON, _ := database.GetSystemConfig("default_coins") + var defaultCoins []string + + if defaultCoinsJSON != "" { + // 尝试从JSON解析 + if err := json.Unmarshal([]byte(defaultCoinsJSON), &defaultCoins); err != nil { + log.Printf("⚠️ 解析default_coins配置失败: %v,使用硬编码默认值", err) + defaultCoins = []string{"BTCUSDT", "ETHUSDT", "SOLUSDT", "BNBUSDT", "XRPUSDT", "DOGEUSDT", "ADAUSDT", "HYPEUSDT"} + } else { + log.Printf("✓ 从数据库加载默认币种列表(共%d个): %v", len(defaultCoins), defaultCoins) + } + } else { + // 如果数据库中没有配置,使用硬编码默认值 + defaultCoins = []string{"BTCUSDT", "ETHUSDT", "SOLUSDT", "BNBUSDT", "XRPUSDT", "DOGEUSDT", "ADAUSDT", "HYPEUSDT"} + log.Printf("⚠️ 数据库中未配置default_coins,使用硬编码默认值") + } + pool.SetDefaultCoins(defaultCoins) // 设置是否使用默认主流币种 pool.SetUseDefaultCoins(useDefaultCoins) if useDefaultCoins { - log.Printf("✓ 已启用默认主流币种列表(BTC、ETH、SOL、BNB、XRP、DOGE、ADA、HYPE)") + log.Printf("✓ 已启用默认主流币种列表") } // 设置币种池API URL diff --git a/web/src/components/AITradersPage.tsx b/web/src/components/AITradersPage.tsx index 8ba2ac05..d69ce7f3 100644 --- a/web/src/components/AITradersPage.tsx +++ b/web/src/components/AITradersPage.tsx @@ -67,17 +67,12 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { useEffect(() => { const loadConfigs = async () => { try { - console.log('🔄 开始加载模型和交易所配置...'); const [modelConfigs, exchangeConfigs, supportedModels, supportedExchanges] = await Promise.all([ api.getModelConfigs(), api.getExchangeConfigs(), api.getSupportedModels(), api.getSupportedExchanges() ]); - console.log('✅ 用户模型配置加载成功:', modelConfigs); - console.log('✅ 用户交易所配置加载成功:', exchangeConfigs); - console.log('✅ 支持的模型加载成功:', supportedModels); - console.log('✅ 支持的交易所加载成功:', supportedExchanges); setAllModels(modelConfigs); setAllExchanges(exchangeConfigs); setSupportedModels(supportedModels); @@ -94,7 +89,7 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { console.log('📡 用户信号源配置暂未设置'); } } catch (error) { - console.error('❌ 加载配置失败:', error); + console.error('Failed to load configs:', error); } }; loadConfigs(); @@ -107,11 +102,20 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { // 只在创建交易员时使用已启用且配置完整的 const enabledModels = allModels?.filter(m => m.enabled && m.apiKey) || []; const enabledExchanges = allExchanges?.filter(e => { - if (!e.enabled || !e.apiKey) return false; + if (!e.enabled) return false; + + // Aster 交易所需要特殊字段 + if (e.id === 'aster') { + return e.asterUser && e.asterSigner && e.asterPrivateKey; + } + // Hyperliquid 只需要私钥(作为apiKey),不需要secretKey - if (e.id === 'hyperliquid') return true; - // 其他交易所需要secretKey - return e.secretKey && e.secretKey.trim() !== ''; + if (e.id === 'hyperliquid') { + return e.apiKey && e.hyperliquidWalletAddr; + } + + // Binance 等其他交易所需要 apiKey 和 secretKey + return e.apiKey && e.apiKey.trim() !== '' && e.secretKey && e.secretKey.trim() !== ''; }) || []; // 检查模型是否正在被运行中的交易员使用