algorembrant's picture
Upload 61 files
9cb5a00 verified
"""
Quick MT5 diagnostic -- run this to see exactly what the Python API can access.
"""
import MetaTrader5 as mt5
from datetime import datetime, timedelta, timezone
print(f"MT5 package version: {mt5.__version__}")
# Initialize
if not mt5.initialize():
print(f"FAIL: initialize() -> {mt5.last_error()}")
quit()
print(f"OK: initialize()")
# Terminal info
info = mt5.terminal_info()
if info:
print(f"Terminal: {info.name}, Build {info.build}, Path: {info.path}")
print(f"Connected: {info.connected}, Trade allowed: {info.trade_allowed}")
# Account info
acc = mt5.account_info()
if acc:
print(f"Account: {acc.login}, Server: {acc.server}, Balance: {acc.balance}")
# Symbol check
sym = "XAUUSDc"
si = mt5.symbol_info(sym)
if si is None:
print(f"FAIL: symbol_info('{sym}') returned None -> {mt5.last_error()}")
# List all symbols with XAU or GOLD
all_s = mt5.symbols_get()
if all_s:
gold = [s.name for s in all_s if "XAU" in s.name.upper() or "GOLD" in s.name.upper()]
print(f"Gold-related symbols found: {gold}")
mt5.shutdown()
quit()
print(f"OK: symbol_info('{sym}') -> visible={si.visible}, spread={si.spread}, bid={si.bid}")
# Select symbol
mt5.symbol_select(sym, True)
# Try different fetch methods
utc_to = datetime(2026, 1, 1, tzinfo=timezone.utc)
utc_from = datetime(2025, 1, 1, tzinfo=timezone.utc)
print(f"\nFetching {sym} from {utc_from} to {utc_to}...")
# Method 1: copy_rates_range M3
for tf_name, tf_val in [("M1", mt5.TIMEFRAME_M1), ("M3", mt5.TIMEFRAME_M3), ("M5", mt5.TIMEFRAME_M5)]:
rates = mt5.copy_rates_range(sym, tf_val, utc_from, utc_to)
if rates is not None and len(rates) > 0:
print(f" copy_rates_range {tf_name}: {len(rates):,} bars")
else:
print(f" copy_rates_range {tf_name}: NONE -> {mt5.last_error()}")
# Method 2: copy_rates_from_pos (latest N bars)
for tf_name, tf_val in [("M1", mt5.TIMEFRAME_M1), ("M3", mt5.TIMEFRAME_M3)]:
rates = mt5.copy_rates_from_pos(sym, tf_val, 0, 100)
if rates is not None and len(rates) > 0:
print(f" copy_rates_from_pos {tf_name} (last 100): {len(rates)} bars")
else:
print(f" copy_rates_from_pos {tf_name}: NONE -> {mt5.last_error()}")
mt5.shutdown()
print("\nDone.")