| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- #!/usr/bin/env tsx
- /**
- * 配置文件账户注入示例
- * 演示如何通过JSON配置文件动态加载多个账户
- */
- import { AccountConfigLoader } from '../src/accounts/AccountConfigLoader.js'
- import { UnifiedAccountManager } from '../src/accounts/UnifiedAccountManager.js'
- async function configFileAccountInjectionDemo() {
- console.log('🏦 配置文件账户注入演示')
- console.log('='.repeat(60))
- try {
- // 1. 创建配置加载器
- console.log('\n📁 第一步: 加载配置文件...')
- const configLoader = new AccountConfigLoader('./accounts.config.json')
- // 检查配置文件是否存在
- if (!configLoader.exists()) {
- console.error('❌ 配置文件不存在: accounts.config.json')
- console.log('💡 请先创建配置文件,参考: accounts.config.json')
- return
- }
- // 2. 加载配置
- const config = configLoader.load()
- console.log(`✅ 配置文件加载成功`)
- console.log(` 📊 总账户数: ${config.accounts.length}`)
- console.log(` ✅ 启用账户: ${config.accounts.filter(a => a.enabled).length}`)
- console.log(` 🔗 对冲组: ${config.hedgingGroups?.length || 0}`)
- console.log(` 📏 交易规则: ${config.tradingRules?.length || 0}`)
- // 3. 显示账户配置详情
- console.log('\n📋 账户配置详情:')
- config.accounts.forEach((account, index) => {
- const status = account.enabled ? '✅' : '❌'
- const trading = account.tradingEnabled ? '交易' : '只读'
- const hedging = account.hedgingEnabled ? '对冲' : '单向'
- console.log(` ${index + 1}. ${status} ${account.name} (${account.exchange})`)
- console.log(` 别名: ${account.alias}`)
- console.log(` 账户: ${account.accountId}`)
- console.log(` 优先级: ${account.priority}`)
- console.log(` 模式: ${trading} | ${hedging}`)
- console.log(
- ` 限额: $${account.maxPositionUsd.toLocaleString()} / $${account.maxDailyVolumeUsd.toLocaleString()}`,
- )
- console.log()
- })
- // 4. 显示对冲组配置
- if (config.hedgingGroups && config.hedgingGroups.length > 0) {
- console.log('🔗 对冲组配置:')
- config.hedgingGroups.forEach((group, index) => {
- const status = group.enabled ? '✅' : '❌'
- console.log(` ${index + 1}. ${status} ${group.name} (${group.strategy})`)
- console.log(` 账户: ${group.accounts.join(', ')}`)
- console.log(` 最大敞口: $${group.maxExposureUsd.toLocaleString()}`)
- console.log()
- })
- }
- // 5. 显示交易规则
- if (config.tradingRules && config.tradingRules.length > 0) {
- console.log('📏 交易规则:')
- config.tradingRules.forEach((rule, index) => {
- const status = rule.enabled ? '✅' : '❌'
- console.log(` ${index + 1}. ${status} ${rule.name}`)
- console.log(` 账户: ${rule.accounts.join(', ')}`)
- console.log(` 交易对: ${rule.symbols.join(', ')}`)
- console.log(` 订单限额: $${rule.minOrderSizeUsd} - $${rule.maxOrderSizeUsd}`)
- console.log(` 最大滑点: ${(rule.maxSlippage * 100).toFixed(2)}%`)
- console.log(` 冷却时间: ${rule.cooldownMs}ms`)
- console.log()
- })
- }
- // 6. 创建统一账户管理器并注入账户
- console.log('🚀 第二步: 创建统一账户管理器并注入账户...')
- const unifiedManager = new UnifiedAccountManager({
- enableFailover: true,
- maxRetries: 3,
- retryDelayMs: 1000,
- })
- // 7. 转换配置格式并批量注册
- const enabledAccounts = configLoader.getEnabledAccounts()
- console.log(`📝 准备注册 ${enabledAccounts.length} 个启用的账户...`)
- const accountConfigs = configLoader.convertToAccountConfigs(enabledAccounts)
- // 模拟注册过程 (实际环境中会连接真实交易所)
- console.log('\n💼 账户注册过程:')
- for (const accountConfig of accountConfigs) {
- try {
- console.log(` 📋 注册账户: ${accountConfig.name || accountConfig.exchange}`)
- console.log(` 交易所: ${accountConfig.exchange}`)
- console.log(` 账户ID: ${accountConfig.accountId}`)
- console.log(` 别名: ${accountConfig.alias}`)
- // 检查认证信息是否完整
- const authComplete = checkAuthConfig(accountConfig)
- if (authComplete) {
- console.log(` ✅ 认证信息完整`)
- } else {
- console.log(` ⚠️ 认证信息不完整 (可能缺少环境变量)`)
- }
- // 在真实环境中这里会调用:
- // await unifiedManager.registerAccount(accountConfig)
- console.log(` ✅ 注册成功`)
- console.log()
- } catch (error) {
- console.error(` ❌ 注册失败: ${error}`)
- console.log()
- }
- }
- // 8. 监听配置文件变更 (可选)
- console.log('👁️ 第三步: 启用配置文件热更新监听...')
- configLoader.on('config_changed', (newConfig, oldConfig) => {
- console.log('📄 配置文件已更新!')
- console.log(` 新配置账户数: ${newConfig.accounts.length}`)
- console.log(` 旧配置账户数: ${oldConfig?.accounts.length || 0}`)
- // 实际环境中这里会重新加载账户
- console.log('🔄 重新加载账户配置...')
- })
- configLoader.on('config_error', error => {
- console.error('❌ 配置文件重载失败:', error)
- })
- // 启动监听 (演示模式下不启用)
- // configLoader.startWatching()
- console.log('✅ 配置文件账户注入演示完成!')
- console.log('\n💡 使用方法:')
- console.log('1. 编辑 accounts.config.json 文件')
- console.log('2. 设置对应的环境变量')
- console.log('3. 运行系统,账户会自动注入')
- console.log('4. 支持配置文件热更新 (生产环境)')
- } catch (error) {
- console.error('❌ 演示失败:', error)
- }
- }
- /**
- * 检查账户认证配置是否完整
- */
- function checkAuthConfig(accountConfig: any): boolean {
- const exchange = accountConfig.exchange
- switch (exchange) {
- case 'pacifica':
- return !!(accountConfig.privateKey && accountConfig.accountId)
- case 'aster':
- return !!(accountConfig.user && accountConfig.signer && accountConfig.privateKey)
- case 'binance':
- return !!(accountConfig.apiKey && accountConfig.apiSecret)
- default:
- return false
- }
- }
- /**
- * 显示如何使用的帮助信息
- */
- function showUsageHelp() {
- console.log('\n📚 配置文件格式说明:')
- console.log(`
- {
- "accounts": [
- {
- "name": "pacifica-main", // 账户名称 (唯一)
- "exchange": "pacifica", // 交易所类型
- "accountId": "main-account-1", // 账户标识
- "alias": "Pacifica主账户", // 显示别名
- "enabled": true, // 是否启用
- "priority": 1, // 优先级 (数字越小优先级越高)
- "tradingEnabled": true, // 是否允许交易
- "hedgingEnabled": true, // 是否参与对冲
- "maxPositionUsd": 10000, // 最大仓位限额
- "maxDailyVolumeUsd": 100000, // 最大日交易量
- "auth": {
- "privateKeyEnv": "PACIFICA_PRIVATE_KEY_1", // 环境变量引用
- "accountIdEnv": "PACIFICA_ACCOUNT_1"
- }
- }
- ]
- }`)
- console.log('\n🔑 环境变量设置示例:')
- console.log(`
- # Pacifica 账户
- export PACIFICA_PRIVATE_KEY_1="your_base58_private_key_1"
- export PACIFICA_ACCOUNT_1="your_account_id_1"
- export PACIFICA_PRIVATE_KEY_2="your_base58_private_key_2"
- export PACIFICA_ACCOUNT_2="your_account_id_2"
- # Aster 账户
- export ASTER_ORDER_USER_1="0x..."
- export ASTER_ORDER_SIGNER_1="0x..."
- export ASTER_PRIVATE_KEY_1="0x..."
- # Binance 账户
- export BINANCE_API_KEY="your_api_key"
- export BINANCE_SECRET_KEY="your_secret_key"
- `)
- }
- // 运行演示
- if (import.meta.url === `file://${process.argv[1]}`) {
- // 检查是否需要显示帮助
- if (process.argv.includes('--help') || process.argv.includes('-h')) {
- showUsageHelp()
- } else {
- configFileAccountInjectionDemo()
- }
- }
|