Bot & Automation
Treding Forex Ai
/root/hermes-projects/Treding Forex Ai
mt5-bridge/scripts/check-mt5-connection.ps1
text
$ErrorActionPreference = "Stop"
$bridgeRoot = Split-Path -Parent $PSScriptRoot
$python = Join-Path $bridgeRoot ".venv\Scripts\python.exe"
if (-not (Test-Path -LiteralPath $python)) {
throw "Virtualenv belum ada. Jalankan: python -m venv .venv; .\.venv\Scripts\pip.exe install -r requirements.txt"
}
Set-Location $bridgeRoot
@'
import os
import MetaTrader5 as mt5
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path.cwd() / ".env")
path = r"C:\Program Files\MetaTrader 5\terminal64.exe"
configured_path = os.getenv("MT5_PATH") or path
login = os.getenv("MT5_LOGIN")
password = os.getenv("MT5_PASSWORD")
server = os.getenv("MT5_SERVER")
server_file = Path(os.getenv("APPDATA", "")) / "MetaQuotes" / "Terminal" / "D0E8209F77C8CF37AD8BF550E51FF075" / "config" / "servers.dat"
if server_file.exists():
raw = server_file.read_bytes()
server_text = raw.decode("utf-16le", errors="ignore") + raw.decode("ascii", errors="ignore")
result_server_known = bool(server and server in server_text)
else:
result_server_known = False
initialize_kwargs = {"path": configured_path}
if login and password and server:
initialize_kwargs.update({"login": int(login), "password": password, "server": server})
ok = mt5.initialize(**initialize_kwargs)
result = {
"initialize": ok,
"last_error": mt5.last_error(),
"server_known_in_local_config": result_server_known,
}
def trade_mode_label(account):
if account is None:
return "unknown"
value = getattr(account, "trade_mode", None)
if value == getattr(mt5, "ACCOUNT_TRADE_MODE_DEMO", None):
return "demo"
if value == getattr(mt5, "ACCOUNT_TRADE_MODE_CONTEST", None):
return "contest"
if value == getattr(mt5, "ACCOUNT_TRADE_MODE_REAL", None):
return "real"
return {0: "demo", 1: "contest", 2: "real"}.get(value, "unknown")
def mask_login(account):
if account is None:
return None
login_text = str(getattr(account, "login", ""))
if len(login_text) <= 4:
return "****"
return "***" + login_text[-4:]
if ok:
if login and password and server:
result["login_attempted"] = True
login_ok = mt5.login(int(login), password=password, server=server)
result["login_ok"] = login_ok
result["login_last_error"] = mt5.last_error()
else:
result["login_attempted"] = False
terminal = mt5.terminal_info()
account = mt5.account_info()
result.update({
"terminal_connected": bool(getattr(terminal, "connected", False)) if terminal else False,
"account_present": account is not None,
"account_login_last4": mask_login(account),
"server": getattr(account, "server", None) if account else None,
"account_trade_mode": trade_mode_label(account),
"trade_allowed": bool(getattr(account, "trade_allowed", False)) if account else False,
"terminal_trade_allowed": bool(getattr(terminal, "trade_allowed", False)) if terminal else False,
})
mt5.shutdown()
print(result)
'@ | & $python -