Files
ccxt_with_mt5/test/_test_mt5_fixed.py
lz_db 0fab423a18 add
2025-11-16 12:31:03 +08:00

153 lines
4.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import asyncio
import logging
import sys
import os
# 添加 ccxt 路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from ccxt import mt5 as mt5_sync
from ccxt.async_support import mt5 as mt5_async
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger('MT5-Fixed-Test')
# 测试配置 - 使用你的配置
TEST_CONFIG = {
'apiKey': '76888962',
'secret': 'LZ-trade666888',
'hostname': '43.167.188.220:5000',
'host': '18.163.85.196',
'port': 443,
'sandbox': True,
'verbose': True,
}
def test_url_fix():
"""测试 URL 修复"""
logger.info("🔧 测试 URL 修复...")
try:
exchange = mt5_sync(TEST_CONFIG)
# 检查 URLs 配置
logger.info("检查 URLs 配置:")
logger.info(f" Public API: {exchange.urls['api']['public']}")
logger.info(f" Private API: {exchange.urls['api']['private']}")
# 测试连接
logger.info("\n测试连接...")
token = exchange.get_token()
logger.info(f"✅ 连接成功! Token: {token}")
return True
except Exception as e:
logger.error(f"❌ 测试失败: {e}")
import traceback
traceback.print_exc()
return False
async def test_async_url_fix():
"""测试异步 URL 修复"""
logger.info("\n🔧 测试异步 URL 修复...")
exchange = None
try:
exchange = mt5_async(TEST_CONFIG)
# 检查 URLs 配置
logger.info("检查异步 URLs 配置:")
logger.info(f" Public API: {exchange.urls['api']['public']}")
logger.info(f" Private API: {exchange.urls['api']['private']}")
# 测试连接
logger.info("\n测试异步连接...")
token = await exchange.get_token()
logger.info(f"✅ 异步连接成功! Token: {token}")
return True
except Exception as e:
logger.error(f"❌ 异步测试失败: {e}")
import traceback
traceback.print_exc()
return False
finally:
if exchange:
await exchange.close()
def test_direct_connection():
"""测试直接连接"""
logger.info("\n🔧 测试直接连接...")
try:
# 使用 requests 直接测试连接
import requests
url = "http://43.167.188.220:5000/Connect"
params = {
'user': '76888962',
'password': 'LZ-trade666888',
'host': '18.163.85.196',
'port': 443,
'connectTimeoutSeconds': 30
}
logger.info(f"测试直接请求: {url}")
response = requests.get(url, params=params, timeout=30)
logger.info(f"状态码: {response.status_code}")
logger.info(f"响应内容: {response.text}")
if response.status_code == 200:
logger.info("✅ 直接连接成功!")
return True
else:
logger.error(f"❌ 直接连接失败: {response.status_code}")
return False
except Exception as e:
logger.error(f"❌ 直接连接测试失败: {e}")
return False
async def main():
"""运行修复测试"""
print("🚀 MT5 URL 修复测试")
print("="*50)
# 测试直接连接
direct_success = test_direct_connection()
# 测试同步版本
sync_success = test_url_fix()
# 测试异步版本
async_success = await test_async_url_fix()
print("\n" + "="*50)
print("📊 修复测试结果")
print(f"直接连接: {'✅ 通过' if direct_success else '❌ 失败'}")
print(f"同步版本: {'✅ 通过' if sync_success else '❌ 失败'}")
print(f"异步版本: {'✅ 通过' if async_success else '❌ 失败'}")
if direct_success and sync_success and async_success:
print("🎉 所有修复测试通过!")
else:
print("\n⚠️ 如果直接连接失败,请检查:")
print(" 1. 网络连接是否正常")
print(" 2. 服务器地址是否正确")
print(" 3. 防火墙设置")
print(" 4. 服务器状态")
if __name__ == "__main__":
asyncio.run(main())