""" 测试 Bitget CCXT SDK 实现 在运行之前,请确保: 1. 已安装 ccxt: pip install ccxt 2. 已在 .env 文件中配置 Bitget API 密钥 3. 使用测试网进行测试(BITGET_USE_TESTNET=true) """ import sys import os from pathlib import Path # 添加项目路径 script_dir = Path(__file__).parent project_root = script_dir.parent backend_dir = project_root / "backend" sys.path.insert(0, str(backend_dir)) sys.path.insert(0, str(project_root)) # 设置工作目录 os.chdir(project_root) from app.services.bitget_trading_api_sdk import BitgetTradingAPI from app.config import get_settings from app.utils.logger import logger def test_connection(): """测试 API 连接""" logger.info("=" * 60) logger.info("测试 1: API 连接测试") logger.info("=" * 60) settings = get_settings() api = BitgetTradingAPI( api_key=settings.bitget_api_key, api_secret=settings.bitget_api_secret, passphrase=settings.bitget_passphrase, use_testnet=settings.bitget_use_testnet ) result = api.test_connection() logger.info(f"连接测试结果: {'✅ 成功' if result else '❌ 失败'}") return api if result else None def test_get_balance(api): """测试查询余额""" logger.info("\n" + "=" * 60) logger.info("测试 2: 查询账户余额") logger.info("=" * 60) balance = api.get_balance() if balance: logger.info(f"✅ 余额查询成功") for currency, info in balance.items(): available = info.get('available', '0') frozen = info.get('frozen', '0') logger.info(f" {currency}: 可用={available}, 冻结={frozen}") else: logger.error("❌ 余额查询失败") def test_get_position(api): """测试查询持仓""" logger.info("\n" + "=" * 60) logger.info("测试 3: 查询持仓") logger.info("=" * 60) positions = api.get_position() if positions: logger.info(f"✅ 持仓查询成功,共 {len(positions)} 个持仓") for pos in positions: symbol = pos.get('symbol', 'N/A') size = pos.get('contracts', 0) side = pos.get('side', 'N/A') unrealized_pnl = pos.get('unrealizedPnl', 0) logger.info(f" {symbol} {side} {size}张 (未实现盈亏: {unrealized_pnl})") else: logger.info(" 当前无持仓") def test_get_open_orders(api): """测试查询挂单""" logger.info("\n" + "=" * 60) logger.info("测试 4: 查询当前挂单") logger.info("=" * 60) orders = api.get_open_orders() if orders: logger.info(f"✅ 挂单查询成功,共 {len(orders)} 个挂单") for order in orders[:5]: # 只显示前 5 个 symbol = order.get('symbol', 'N/A') side = order.get('side', 'N/A') price = order.get('price', 'N/A') amount = order.get('amount', 'N/A') logger.info(f" {symbol} {side} @ {price} x {amount}") else: logger.info(" 当前无挂单") def test_market_ticker(api, symbol='BTC/USDT:USDT'): """测试获取市场行情""" logger.info("\n" + "=" * 60) logger.info(f"测试 5: 获取 {symbol} 市场行情") logger.info("=" * 60) try: ticker = api.exchange.fetch_ticker(symbol) if ticker: logger.info(f"✅ 行情获取成功") logger.info(f" 交易对: {symbol}") logger.info(f" 最新价: {ticker.get('last', 'N/A')}") logger.info(f" 24h涨跌: {ticker.get('percentage', 'N/A')}%") logger.info(f" 24h成交量: {ticker.get('baseVolume', 'N/A')}") except Exception as e: logger.error(f"❌ 行情获取失败: {e}") def main(): """主测试函数""" logger.info("🚀 开始测试 Bitget CCXT SDK 实现") # 检查配置 settings = get_settings() if not settings.bitget_api_key or not settings.bitget_api_secret: logger.error("❌ 未配置 Bitget API 密钥,请在 .env 文件中设置:") logger.error(" BITGET_API_KEY=your_api_key") logger.error(" BITGET_API_SECRET=your_api_secret") return # 测试连接 api = test_connection() if not api: logger.error("❌ API 连接失败,请检查:") logger.error(" 1. API 密钥是否正确") logger.error(" 2. 网络连接是否正常") logger.error(" 3. 测试网是否可用") return # 运行测试 try: test_get_balance(api) test_get_position(api) test_get_open_orders(api) test_market_ticker(api) logger.info("\n" + "=" * 60) logger.info("✅ 所有测试完成") logger.info("=" * 60) except Exception as e: logger.error(f"❌ 测试过程中出错: {e}") import traceback traceback.print_exc() finally: # 关闭连接 api.close() logger.info("\n🔌 API 连接已关闭") if __name__ == "__main__": main()