mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-14 16:26:57 +08:00
Merge branch 'dev' of github.com:Icyoung/nofx
# Conflicts: # manager/trader_manager.go # web/src/components/AITradersPage.tsx
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -26,6 +26,7 @@ Thumbs.db
|
|||||||
# 环境变量
|
# 环境变量
|
||||||
.env
|
.env
|
||||||
config.json
|
config.json
|
||||||
|
config.db
|
||||||
|
|
||||||
# 决策日志
|
# 决策日志
|
||||||
decision_logs/
|
decision_logs/
|
||||||
|
|||||||
22
main.go
22
main.go
@@ -160,14 +160,30 @@ func main() {
|
|||||||
log.Printf("✓ 配置数据库初始化成功")
|
log.Printf("✓ 配置数据库初始化成功")
|
||||||
fmt.Println()
|
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.SetDefaultCoins(defaultCoins)
|
||||||
|
|
||||||
// 设置是否使用默认主流币种
|
// 设置是否使用默认主流币种
|
||||||
pool.SetUseDefaultCoins(useDefaultCoins)
|
pool.SetUseDefaultCoins(useDefaultCoins)
|
||||||
if useDefaultCoins {
|
if useDefaultCoins {
|
||||||
log.Printf("✓ 已启用默认主流币种列表(BTC、ETH、SOL、BNB、XRP、DOGE、ADA、HYPE)")
|
log.Printf("✓ 已启用默认主流币种列表")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置币种池API URL
|
// 设置币种池API URL
|
||||||
|
|||||||
@@ -67,17 +67,12 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const loadConfigs = async () => {
|
const loadConfigs = async () => {
|
||||||
try {
|
try {
|
||||||
console.log('🔄 开始加载模型和交易所配置...');
|
|
||||||
const [modelConfigs, exchangeConfigs, supportedModels, supportedExchanges] = await Promise.all([
|
const [modelConfigs, exchangeConfigs, supportedModels, supportedExchanges] = await Promise.all([
|
||||||
api.getModelConfigs(),
|
api.getModelConfigs(),
|
||||||
api.getExchangeConfigs(),
|
api.getExchangeConfigs(),
|
||||||
api.getSupportedModels(),
|
api.getSupportedModels(),
|
||||||
api.getSupportedExchanges()
|
api.getSupportedExchanges()
|
||||||
]);
|
]);
|
||||||
console.log('✅ 用户模型配置加载成功:', modelConfigs);
|
|
||||||
console.log('✅ 用户交易所配置加载成功:', exchangeConfigs);
|
|
||||||
console.log('✅ 支持的模型加载成功:', supportedModels);
|
|
||||||
console.log('✅ 支持的交易所加载成功:', supportedExchanges);
|
|
||||||
setAllModels(modelConfigs);
|
setAllModels(modelConfigs);
|
||||||
setAllExchanges(exchangeConfigs);
|
setAllExchanges(exchangeConfigs);
|
||||||
setSupportedModels(supportedModels);
|
setSupportedModels(supportedModels);
|
||||||
@@ -94,7 +89,7 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) {
|
|||||||
console.log('📡 用户信号源配置暂未设置');
|
console.log('📡 用户信号源配置暂未设置');
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ 加载配置失败:', error);
|
console.error('Failed to load configs:', error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
loadConfigs();
|
loadConfigs();
|
||||||
@@ -107,11 +102,20 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) {
|
|||||||
// 只在创建交易员时使用已启用且配置完整的
|
// 只在创建交易员时使用已启用且配置完整的
|
||||||
const enabledModels = allModels?.filter(m => m.enabled && m.apiKey) || [];
|
const enabledModels = allModels?.filter(m => m.enabled && m.apiKey) || [];
|
||||||
const enabledExchanges = allExchanges?.filter(e => {
|
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
|
// Hyperliquid 只需要私钥(作为apiKey),不需要secretKey
|
||||||
if (e.id === 'hyperliquid') return true;
|
if (e.id === 'hyperliquid') {
|
||||||
// 其他交易所需要secretKey
|
return e.apiKey && e.hyperliquidWalletAddr;
|
||||||
return e.secretKey && e.secretKey.trim() !== '';
|
}
|
||||||
|
|
||||||
|
// Binance 等其他交易所需要 apiKey 和 secretKey
|
||||||
|
return e.apiKey && e.apiKey.trim() !== '' && e.secretKey && e.secretKey.trim() !== '';
|
||||||
}) || [];
|
}) || [];
|
||||||
|
|
||||||
// 检查模型是否正在被运行中的交易员使用
|
// 检查模型是否正在被运行中的交易员使用
|
||||||
|
|||||||
Reference in New Issue
Block a user