""" Test script to verify MT5 connection and setup Run this script first to ensure everything is configured correctly. """ import MetaTrader5 as mt5 from datetime import datetime, timedelta def test_mt5_connection(): """Test MT5 connection and basic functionality""" print("Testing MetaTrader5 Connection...") print("="*60) # Initialize MT5 if not mt5.initialize(): print(f"ERROR: MT5 initialization failed") print(f"Error code: {mt5.last_error()}") print("\nTroubleshooting:") print("1. Make sure MetaTrader5 is installed") print("2. Make sure MT5 is running") print("3. Try logging into MT5 manually first") return False print("[OK] MT5 initialized successfully") # Get account info account_info = mt5.account_info() if account_info is None: print("WARNING: Could not get account info") else: print(f"[OK] Account: {account_info.login}") print(f" Server: {account_info.server}") print(f" Balance: ${account_info.balance:.2f}") # Test symbol access test_symbols = ['XAUUSD', 'EURUSD', 'BTCUSD'] print("\nTesting symbol access...") for symbol in test_symbols: symbol_info = mt5.symbol_info(symbol) if symbol_info is None: print(f"[FAIL] {symbol}: Not available") else: print(f"[OK] {symbol}: Available") print(f" Bid: {symbol_info.bid:.5f}, Ask: {symbol_info.ask:.5f}") print(f" Spread: {symbol_info.spread} points") # Test historical data print("\nTesting historical data retrieval...") symbol = 'XAUUSD' timeframe = mt5.TIMEFRAME_H1 end_date = datetime.now() start_date = end_date - timedelta(days=7) rates = mt5.copy_rates_range(symbol, timeframe, start_date, end_date) if rates is None or len(rates) == 0: print(f"[FAIL] Could not retrieve historical data for {symbol}") print(" Make sure you have historical data in MT5") else: print(f"[OK] Retrieved {len(rates)} bars for {symbol}") print(f" Date range: {datetime.fromtimestamp(rates[0]['time'])} to {datetime.fromtimestamp(rates[-1]['time'])}") # Test indicator creation (optional: some MetaTrader5 Python wheels omit terminal indicator APIs) print("\nTesting indicator creation...") if not hasattr(mt5, "iRSI") or not hasattr(mt5, "iMA"): print("[SKIP] mt5.iRSI / mt5.iMA not available in this MetaTrader5 build; skipping handle tests.") print(" (Historical data + account checks above are enough for the Python backtest harness.)") else: rsi_handle = mt5.iRSI(symbol, timeframe, 14, mt5.PRICE_CLOSE) if rsi_handle == mt5.INVALID_HANDLE: print("[FAIL] Failed to create RSI indicator") else: print("[OK] RSI indicator created successfully") rsi_values = mt5.copy_buffer(rsi_handle, 0, 0, 10) if rsi_values is not None: print(f" Latest RSI values: {rsi_values[-3:]}") mt5.indicator_release(rsi_handle) ema_handle = mt5.iMA(symbol, timeframe, 50, 0, mt5.MODE_EMA, mt5.PRICE_CLOSE) if ema_handle == mt5.INVALID_HANDLE: print("[FAIL] Failed to create EMA indicator") else: print("[OK] EMA indicator created successfully") mt5.indicator_release(ema_handle) # Cleanup mt5.shutdown() print("\n" + "="*60) print("Setup test completed!") print("="*60) return True if __name__ == '__main__': success = test_mt5_connection() if not success: exit(1)