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 -