test_positions.ts 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/env tsx
  2. /**
  3. * 测试账户仓位API
  4. */
  5. import { Config, SmartAccountDiscovery } from './src/config/simpleEnv.js'
  6. import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js'
  7. async function testPositions() {
  8. console.log('🧪 测试账户仓位API')
  9. try {
  10. const accounts = SmartAccountDiscovery.discoverPacifica()
  11. if (accounts.length === 0) {
  12. console.log('❌ 未发现Pacifica账户')
  13. return
  14. }
  15. for (let i = 0; i < Math.min(accounts.length, 2); i++) {
  16. const account = accounts[i]
  17. console.log(`\n✅ 测试账户 ${i + 1}: ${account.account.substring(0, 8)}...`)
  18. const client = new PacificaProxyClient({
  19. account: account.account,
  20. privateKey: account.privateKey,
  21. })
  22. // 获取仓位信息
  23. console.log('📊 获取仓位信息...')
  24. const positionsResult = await client.getPositions(account.account)
  25. console.log('🔍 仓位API原始响应:')
  26. console.log('Success:', positionsResult.success)
  27. console.log('Error:', positionsResult.error)
  28. console.log('Data type:', Array.isArray(positionsResult.data) ? 'Array' : typeof positionsResult.data)
  29. console.log('Data length:', Array.isArray(positionsResult.data) ? positionsResult.data.length : 'N/A')
  30. if (positionsResult.data && Array.isArray(positionsResult.data)) {
  31. console.log('\n💰 仓位详情:')
  32. console.log('完整仓位数据:')
  33. console.log(JSON.stringify(positionsResult.data, null, 2))
  34. let totalNetPosition = 0
  35. positionsResult.data.forEach((position: any, index: number) => {
  36. console.log(`\n仓位 ${index + 1} 所有字段:`)
  37. Object.keys(position).forEach(key => {
  38. console.log(` ${key}: ${position[key]}`)
  39. })
  40. if (position.symbol && position.symbol.includes('BTC')) {
  41. // 尝试不同的字段名称
  42. const size = parseFloat(position.size || position.amount || position.quantity || '0')
  43. const side = position.side
  44. console.log(` 解析结果: size=${size}, side=${side}`)
  45. if (side === 'bid' || side === 'long') {
  46. totalNetPosition += size
  47. } else if (side === 'ask' || side === 'short') {
  48. totalNetPosition -= size
  49. }
  50. }
  51. })
  52. console.log(`\n🎯 计算的总净仓位: ${totalNetPosition.toFixed(4)} BTC`)
  53. } else {
  54. console.log('Full response:', JSON.stringify(positionsResult, null, 2))
  55. }
  56. // 获取余额信息作为对比
  57. console.log('\n💵 获取余额信息...')
  58. const balanceResult = await client.getBalances(account.account)
  59. if (balanceResult.data) {
  60. console.log('权益:', balanceResult.data.account_equity)
  61. console.log('可用:', balanceResult.data.available_to_spend)
  62. console.log('仓位数:', balanceResult.data.positions_count)
  63. }
  64. }
  65. } catch (error: any) {
  66. console.log('❌ 测试失败:', error.message)
  67. if (error.stack) {
  68. console.log('Stack:', error.stack)
  69. }
  70. }
  71. }
  72. // 运行测试
  73. if (import.meta.url === `file://${process.argv[1]}`) {
  74. testPositions()
  75. }