File size: 2,256 Bytes
9cb5a00
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""
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.")