#!/usr/bin/env tsx /** * 测试账户仓位API */ import { Config, SmartAccountDiscovery } from './src/config/simpleEnv.js' import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js' async function testPositions() { console.log('🧪 测试账户仓位API') try { const accounts = SmartAccountDiscovery.discoverPacifica() if (accounts.length === 0) { console.log('❌ 未发现Pacifica账户') return } for (let i = 0; i < Math.min(accounts.length, 2); i++) { const account = accounts[i] console.log(`\n✅ 测试账户 ${i + 1}: ${account.account.substring(0, 8)}...`) const client = new PacificaProxyClient({ account: account.account, privateKey: account.privateKey, }) // 获取仓位信息 console.log('📊 获取仓位信息...') const positionsResult = await client.getPositions(account.account) console.log('🔍 仓位API原始响应:') console.log('Success:', positionsResult.success) console.log('Error:', positionsResult.error) console.log('Data type:', Array.isArray(positionsResult.data) ? 'Array' : typeof positionsResult.data) console.log('Data length:', Array.isArray(positionsResult.data) ? positionsResult.data.length : 'N/A') if (positionsResult.data && Array.isArray(positionsResult.data)) { console.log('\n💰 仓位详情:') console.log('完整仓位数据:') console.log(JSON.stringify(positionsResult.data, null, 2)) let totalNetPosition = 0 positionsResult.data.forEach((position: any, index: number) => { console.log(`\n仓位 ${index + 1} 所有字段:`) Object.keys(position).forEach(key => { console.log(` ${key}: ${position[key]}`) }) if (position.symbol && position.symbol.includes('BTC')) { // 尝试不同的字段名称 const size = parseFloat(position.size || position.amount || position.quantity || '0') const side = position.side console.log(` 解析结果: size=${size}, side=${side}`) if (side === 'bid' || side === 'long') { totalNetPosition += size } else if (side === 'ask' || side === 'short') { totalNetPosition -= size } } }) console.log(`\n🎯 计算的总净仓位: ${totalNetPosition.toFixed(4)} BTC`) } else { console.log('Full response:', JSON.stringify(positionsResult, null, 2)) } // 获取余额信息作为对比 console.log('\n💵 获取余额信息...') const balanceResult = await client.getBalances(account.account) if (balanceResult.data) { console.log('权益:', balanceResult.data.account_equity) console.log('可用:', balanceResult.data.available_to_spend) console.log('仓位数:', balanceResult.data.positions_count) } } } catch (error: any) { console.log('❌ 测试失败:', error.message) if (error.stack) { console.log('Stack:', error.stack) } } } // 运行测试 if (import.meta.url === `file://${process.argv[1]}`) { testPositions() }