#!/usr/bin/env tsx /** * 同一平台对冲演示 * 展示如何在同一交易所内使用多个账户进行对冲操作 * 支持代理配置,实现网络层面的账户隔离 */ import { Config } from '../src/config/simpleEnv.js' import { SamePlatformHedgingManager } from '../src/core/hedging/SamePlatformHedgingManager.js' import { logger } from '../src/utils/logger.js' async function samePlatformHedgingDemo() { console.log('🔄 同一平台对冲演示') console.log('='.repeat(50)) try { // 1. 演示配置检查 console.log('\\n📋 第一步: 检查代理和账户配置...') console.log('\\n🌐 代理配置状态:') console.log(` 全局代理: ${Config.proxy.isConfigured() ? '✅ 已配置' : '❌ 未配置'}`) console.log(` Aster代理: ${Config.proxy.isConfigured('aster') ? '✅ 已配置' : '❌ 未配置'}`) console.log(` Pacifica代理: ${Config.proxy.isConfigured('pacifica') ? '✅ 已配置' : '❌ 未配置'}`) console.log(` Binance代理: ${Config.proxy.isConfigured('binance') ? '✅ 已配置' : '❌ 未配置'}`) // 2. 创建Aster对冲管理器演示 console.log('\\n🎯 第二步: 创建Aster同平台对冲管理器...') const asterHedgeManager = new SamePlatformHedgingManager('aster') // 添加多个Aster账户(模拟配置) console.log('\\n➕ 添加对冲账户...') // 主账户 if (Config.aster.orderUser()) { asterHedgeManager.addAccount('aster-main', { orderUser: Config.aster.orderUser(), apiKey: Config.aster.apiKey(), apiSecret: Config.aster.apiSecret(), }) console.log(' ✅ Aster主账户已添加') } // 第二账户 if (Config.aster.orderUser2()) { asterHedgeManager.addAccount('aster-hedge', { orderUser: Config.aster.orderUser2(), orderSigner: Config.aster.orderSigner2(), privateKey: Config.aster.privateKey2(), }) console.log(' ✅ Aster对冲账户已添加') } // 如果两个账户都可用,创建对冲对 if (Config.aster.orderUser() && Config.aster.orderUser2()) { console.log('\\n🔗 创建BTCUSDT对冲对...') asterHedgeManager.createHedgePair( 'btc-hedge-1', 'aster-main', // 多头账户 'aster-hedge', // 空头账户 'BTCUSDT', 1.0, // 1:1对冲比例 ) console.log(' ✅ BTCUSDT对冲对已创建') console.log(' 📊 对冲配置: 1:1比例,aster-main做多,aster-hedge做空') // 演示对冲状态查询 console.log('\\n📈 第三步: 查询对冲状态...') const hedgeStatuses = asterHedgeManager.getHedgePairStatuses() hedgeStatuses.forEach(status => { console.log(` 对冲对: ${status.pairId}`) console.log(` 交易对: ${status.symbol}`) console.log(` 多头账户: ${status.longAccount}`) console.log(` 空头账户: ${status.shortAccount}`) console.log(` 目标比例: ${status.targetRatio}:1`) console.log(` 状态: ${status.isActive ? '激活' : '停用'}`) console.log(` 净敞口: ${status.netExposure}`) }) // 演示再平衡检查(不执行实际交易) console.log('\\n⚖️ 第四步: 模拟再平衡检查...') try { // 注意:这会尝试真实的API调用,在demo中可能会失败 const rebalanceNeeded = await asterHedgeManager.rebalanceHedgePair('btc-hedge-1', 0.01) console.log(` 再平衡结果: ${rebalanceNeeded ? '已执行' : '无需调整'}`) } catch (error: any) { console.log(` ⚠️ 再平衡检查失败(预期,因为是演示): ${error.message}`) } } else { console.log(' ⚠️ 缺少Aster账户配置,跳过对冲对创建') } // 3. 创建Pacifica对冲管理器演示 console.log('\\n🌊 第五步: Pacifica同平台对冲演示...') const pacificaHedgeManager = new SamePlatformHedgingManager('pacifica') // 检查Pacifica账户配置 if (Config.pacifica.account()) { pacificaHedgeManager.addAccount('pacifica-main', { account: Config.pacifica.account(), privateKey: Config.pacifica.accountPrivateKey(), }) console.log(' ✅ Pacifica主账户已添加') // 在实际使用中,你会有多个Pacifica账户 // 这里演示如何添加第二个账户(需要额外的环境变量) console.log(' 💡 提示: 配置多个Pacifica账户需要设置:') console.log(' PACIFICA_ACCOUNT_2=your_second_account') console.log(' PACIFICA_PRIVATE_KEY_2=your_second_private_key') } else { console.log(' ⚠️ 未配置Pacifica账户') } // 4. 展示代理配置对对冲的重要性 console.log('\\n🔐 第六步: 代理配置对同平台对冲的重要性...') console.log('\\n💡 代理配置的作用:') console.log(' 🔹 网络层面隔离不同账户的API请求') console.log(' 🔹 降低被识别为同一用户的风险') console.log(' 🔹 提高对冲操作的隐蔽性') console.log(' 🔹 支持会话管理,为不同账户使用不同IP') if (Config.proxy.isAnyConfigured()) { console.log('\\n✅ 当前代理配置状态良好,支持同平台对冲') // 展示不同交易所的代理URL(脱敏) const asterProxy = Config.proxy.getUrl('aster') const pacificaProxy = Config.proxy.getUrl('pacifica') if (asterProxy) { const maskedAster = maskProxyUrl(asterProxy) console.log(` Aster代理: ${maskedAster}`) } if (pacificaProxy) { const maskedPacifica = maskProxyUrl(pacificaProxy) console.log(` Pacifica代理: ${maskedPacifica}`) } } else { console.log('\\n⚠️ 未配置代理,同平台对冲风险较高') console.log('\\n📝 推荐的代理配置示例:') console.log(` # 全局代理 PROXY_ENABLED=true PROXY_HOST=your-proxy-server.com PROXY_PORT=8080 PROXY_USERNAME=username PROXY_PASSWORD=password # Aster专用代理(可选,优先级更高) ASTER_PROXY_HOST=aster-proxy.com ASTER_PROXY_PORT=12321 ASTER_PROXY_USER=aster_user ASTER_PROXY_PASS=aster_pass # 或使用会话管理 ASTER_PROXY_SESSION_PREFIX=prefix_ ASTER_PROXY_SESSION_SUFFIX=_suffix `) } console.log('\\n🎉 同平台对冲演示完成!') console.log('\\n📊 主要功能特性:') console.log(' 🔹 支持同一交易所多账户对冲') console.log(' 🔹 自动净敞口计算和监控') console.log(' 🔹 智能再平衡机制') console.log(' 🔹 代理网络隔离') console.log(' 🔹 灵活的对冲比例设置') console.log(' 🔹 实时仓位跟踪') console.log('\\n🚀 下一步建议:') console.log(' 1. 配置多个交易所账户') console.log(' 2. 设置专用代理服务器') console.log(' 3. 测试小额对冲交易') console.log(' 4. 监控对冲效果和成本') console.log(' 5. 根据市场情况调整对冲策略') } catch (error: any) { console.error('❌ 同平台对冲演示失败:', error) logger.error('同平台对冲演示失败', { error: error.message }) } } /** * 脱敏显示代理URL */ function maskProxyUrl(url: string): string { try { const urlObj = new URL(url) if (urlObj.username && urlObj.password) { const maskedUsername = urlObj.username.substring(0, 4) + '***' const maskedPassword = '***' + urlObj.password.substring(urlObj.password.length - 4) return `${urlObj.protocol}//${maskedUsername}:${maskedPassword}@${urlObj.host}` } return url } catch { return url } } /** * 显示同平台对冲配置帮助 */ function showSamePlatformHedgingHelp() { console.log('\\n💡 同平台对冲配置说明:') console.log(` # 1. 多账户配置示例 ## Aster DEX多账户 ASTER_ORDER_USER=0x... # 主账户 ASTER_API_KEY=0x... ASTER_API_SECRET=0x... ASTER2_ORDER_USER=0x... # 对冲账户 ASTER2_ORDER_SIGNER=0x... PRIVATE_KEY2=0x... ## Pacifica多账户 PACIFICA_ACCOUNT=main_account_id PACIFICA_ACCOUNT_PRIVATE_KEY=main_private_key PACIFICA_ACCOUNT_2=hedge_account_id PACIFICA_PRIVATE_KEY_2=hedge_private_key # 2. 代理隔离配置 ## 全局代理 PROXY_ENABLED=true PROXY_HOST=proxy.example.com PROXY_PORT=8080 PROXY_USERNAME=user PROXY_PASSWORD=pass ## 交易所专用代理(实现更好的隔离) ASTER_PROXY_HOST=aster-proxy.com ASTER_PROXY_USER=aster_user ASTER_PROXY_PASS=aster_pass PACIFICA_PROXY_HOST=pacifica-proxy.com PACIFICA_PROXY_USER=pacifica_user PACIFICA_PROXY_PASS=pacifica_pass # 3. 会话管理(高级功能) ASTER_PROXY_SESSION_PREFIX=country-us_session- ASTER_PROXY_SESSION_SUFFIX=_lifetime-60m # 4. 代码中使用示例 import { SamePlatformHedgingManager } from '../src/core/hedging/SamePlatformHedgingManager.js' const manager = new SamePlatformHedgingManager('aster') // 添加账户 manager.addAccount('main', { orderUser: '0x...', apiKey: '0x...', apiSecret: '0x...' }) manager.addAccount('hedge', { orderUser: '0x...', privateKey: '0x...' }) // 创建对冲对 manager.createHedgePair('btc-hedge', 'main', 'hedge', 'BTCUSDT', 1.0) // 监控和再平衡 const statuses = manager.getHedgePairStatuses() await manager.rebalanceHedgePair('btc-hedge', 0.01) `) } // 运行演示 if (import.meta.url === `file://${process.argv[1]}`) { if (process.argv.includes('--help') || process.argv.includes('-h')) { showSamePlatformHedgingHelp() } else { samePlatformHedgingDemo() } }