Skip to main content
Glama
test_unified_trading.py4.95 kB
#!/usr/bin/env python3 """ 统一账户交易测试 测试统一账户模式下的SHIB永续合约交易功能 """ from binance_mcp.simple_server import SimpleBinanceMCPServer from binance_mcp.config import ConfigManager import ccxt def test_unified_trading(): """测试统一账户交易功能""" print("🎯 统一账户交易测试") print("=" * 50) config_manager = ConfigManager() accounts = config_manager.list_accounts() if not accounts: print("❌ 未配置账户") return account_id = list(accounts.keys())[0] account_config = config_manager.get_account(account_id) print(f"📱 测试账户: {account_id}") print(f"🎛️ 统一账户: {'✅ 已启用' if account_config.get('portfolio_margin') else '❌ 未启用'}") # 创建统一账户exchange exchange = ccxt.binance({ 'apiKey': account_config['api_key'], 'secret': account_config['secret'], 'sandbox': account_config.get('sandbox', False), 'enableRateLimit': True, 'options': { 'portfolioMargin': True, 'broker': { 'spot': 'C96E9MGA', 'future': 'eFC56vBf', 'delivery': 'eFC56vBf', 'option': 'eFC56vBf', 'swap': 'eFC56vBf', } } }) # 1. 测试统一账户余额查询 print(f"\n💰 1. 查询统一账户余额...") try: # 使用Portfolio Margin API balance = exchange.papi_get_balance() print(f" ✅ 余额查询成功") if isinstance(balance, list): for asset in balance: if asset.get('asset') == 'USDT' and float(asset.get('balance', 0)) > 0: print(f" 💵 USDT余额: {asset.get('balance')}") print(f" 🔓 可用余额: {asset.get('availableBalance', 'N/A')}") break else: print(f" 📊 总钱包余额: {balance.get('totalWalletBalance', 'N/A')}") except Exception as e: print(f" ❌ 余额查询失败: {e}") return # 2. 测试SHIB永续合约价格获取 print(f"\n📈 2. 获取SHIB永续合约价格...") try: # 测试1000SHIB合约 ticker = exchange.fetch_ticker('1000SHIBUSDT') price = float(ticker['last']) print(f" ✅ 1000SHIBUSDT 价格: ${price:.6f}") # 计算10U能买多少合约 trade_amount_usd = 10 contracts = int(trade_amount_usd / price) print(f" 💹 ${trade_amount_usd} 可买 {contracts:,} 张合约") return price, contracts except Exception as e: print(f" ❌ 价格获取失败: {e}") return None, None def test_portfolio_margin_order(): """测试统一账户下单功能""" print(f"\n📋 3. 测试统一账户下单功能...") # 使用MCP工具测试 server = SimpleBinanceMCPServer() config_manager = ConfigManager() accounts = config_manager.list_accounts() account_id = list(accounts.keys())[0] try: # 测试获取1000SHIB价格 ticker = server.tools.get_ticker('1000SHIBUSDT') price = float(ticker['last']) print(f" 📊 通过MCP获取价格: ${price:.6f}") # 测试获取账户余额(应该使用统一账户API) balance = server.tools.get_balance(account_id, account_type="future") print(f" 💰 期货账户余额查询: {'成功' if balance else '失败'}") return True except Exception as e: print(f" ❌ MCP工具测试失败: {str(e)[:100]}") if "-2015" in str(e): print(f" 💡 仍然遇到-2015错误,说明MCP工具还没有使用统一账户API") return False def main(): """主测试函数""" print("🚀 开始统一账户交易系统测试") print("=" * 60) # 测试直接API调用 price, contracts = test_unified_trading() if price and contracts: # 测试MCP工具 mcp_success = test_portfolio_margin_order() print(f"\n📊 测试结果汇总:") print("=" * 40) print(f" ✅ 统一账户API: 可正常使用") print(f" 📈 1000SHIBUSDT价格: ${price:.6f}") print(f" 💹 10U可买合约数: {contracts:,}张") print(f" {'✅' if mcp_success else '❌'} MCP工具兼容: {'正常' if mcp_success else '需要更新'}") if not mcp_success: print(f"\n🔧 下一步行动:") print(f" 1. 更新MCP工具以支持统一账户API") print(f" 2. 修改get_balance工具使用papi接口") print(f" 3. 更新create_contract_order工具") else: print(f"\n❌ 基础测试失败,无法继续") if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shanrichard/binance-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server