AlgoGuardDocs
AlgoGuard

AlgoGuard

Integration

MQL-Integration

Integrieren Sie AlgoGuard in Ihre MT4/MT5 Expert Advisors

🤖 MQL-Integrationsleitfaden

Integrieren Sie die AlgoGuard-Lizenzverifizierung in Ihre MetaTrader 4 oder MetaTrader 5 Expert Advisors und Indikatoren.


📥 Installation

Schritt 1: Bibliothek herunterladen

Laden Sie AlgoGuard.mqh direkt aus Ihrem Dashboard herunter: 👉 Downloads → AlgoGuard MQL Library

Schritt 2: Installieren

Kopieren Sie die AlgoGuard.mqh Datei in Ihren MetaTrader Include-Ordner:

  • MT4: MQL4/Include/
  • MT5: MQL5/Include/

Schritt 3: WebRequest aktivieren

Damit Ihr EA mit unserer API kommunizieren darf, müssen Sie die URL freigeben:

  1. Öffnen Sie MetaTrader.
  2. Gehen Sie zu Extras → Optionen → Expert Advisors.
  3. Aktivieren Sie ✅ "WebRequest für folgende URL zulassen".
  4. Fügen Sie hinzu: https://www.algoguard.dev (und https://algoguard.dev).
  5. Klicken Sie auf OK.

🚀 Grundlegende Verwendung

MT5-Beispiel

#property strict
#include <AlgoGuard.mqh>

input string LicenseKey = "";       // Benutzer gibt seinen Lizenzschlüssel ein
string ApiKey = "ihr_api_key_hier"; // Ihr API-Schlüssel (geheim halten!)

int OnInit() {
  // Lizenz bei EA-Initialisierung verifizieren
  if (!AG_Verify(LicenseKey, ApiKey)) {
    string errorMsg = AG_GetLastError();
    Alert("❌ Lizenzverifizierung fehlgeschlagen: " + errorMsg);
    return INIT_FAILED;
  }

  Print("✅ Lizenz erfolgreich verifiziert!");
  Print("📅 Lizenz läuft ab: " + AG_GetExpiry());

  return INIT_SUCCEEDED;
}

void OnTick() {
  // Ihre Handelslogik hier
  // Lizenz ist bereits in OnInit verifiziert
}

MT4-Beispiel

#property strict
#include <AlgoGuard.mqh>

extern string LicenseKey = "";
string ApiKey = "ihr_api_key_hier";

int init() {
  if (!AG_Verify(LicenseKey, ApiKey)) {
    Alert("❌ Lizenzverifizierung fehlgeschlagen: " + AG_GetLastError());
    return INIT_FAILED;
  }

  return INIT_SUCCEEDED;
}

int start() {
  // Ihre Handelslogik
  return 0;
}

⚙️ Erweiterte Funktionen

🆔 Konto-basierte Lizenzierung

Binden Sie eine Lizenz an eine bestimmte Handelskontonummer, um die Weitergabe zu verhindern:

int OnInit() {
  string accountNumber = IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN));

  if (!AG_VerifyWithAccount(LicenseKey, ApiKey, accountNumber)) {
    Alert("⛔ Lizenz für dieses Konto nicht gültig!");
    return INIT_FAILED;
  }

  return INIT_SUCCEEDED;
}

⚡ Caching (Performance)

Verwenden Sie Caching, um API-Anfragen zu minimieren und die Leistung zu verbessern:

int OnInit() {
  // Verifizierungsergebnis für 15 Minuten (900 Sekunden) zwischenspeichern
  if (!AG_VerifyWithCache(LicenseKey, ApiKey, 900)) {
    return INIT_FAILED;
  }

  return INIT_SUCCEEDED;
}

void OnTimer() {
  // Cache alle 15 Minuten aktualisieren
  AG_VerifyWithCache(LicenseKey, ApiKey, 900);
}

🔒 Einschränkungen prüfen

Setzen Sie Symbol- oder Zeitrahmen-Einschränkungen durch, die in Ihren Produkteinstellungen definiert sind:

void OnTick() {
  string symbol = Symbol();
  int timeframe = Period();

  // Prüfen, ob aktuelles Symbol erlaubt ist
  if (!AG_IsSymbolAllowed(symbol)) {
    Comment("⛔ Symbol " + symbol + " nicht durch Lizenz erlaubt");
    return;
  }

  // Prüfen, ob aktueller Zeitrahmen erlaubt ist
  if (!AG_IsTimeframeAllowed(timeframe)) {
    Comment("⛔ Zeitrahmen nicht durch Lizenz erlaubt");
    return;
  }

  // Ihre Handelslogik
}

🔄 Versions-Check (Auto-Updater)

Überprüfen Sie automatisch auf Updates und benachrichtigen Sie Ihre Nutzer.

  1. Version setzen: Setzen Sie in OnInit Ihre aktuelle Version mit AG_SetVersion("1.0.0").
  2. Pflicht-Update prüfen: Nutzen Sie AG_IsUpdateRequired(), um veraltete Versionen zu blockieren.
  3. UI-Panel: Nutzen Sie AG_DrawUpdatePanel(), um einen Download-Button auf dem Chart anzuzeigen.
  4. Klick behandeln: Nutzen Sie AG_OnChartEvent, um Klicks auf den Update-Button zu verarbeiten.
// 1. Version definieren
#define EA_VERSION "1.0.0"

int OnInit() {
  AG_SetVersion(EA_VERSION);

  if (AG_Verify(LicenseKey, ApiKey)) {

    // 2. Auf kritisches Update prüfen
    if (AG_IsUpdateRequired()) {
       Alert("⛔ KRITISCHES UPDATE ERFORDERLICH! Bitte laden Sie die neueste Version herunter.");
       AG_DrawUpdatePanel(); // Zeigt Button
       return INIT_FAILED;   // EA stoppen
    }

    // 3. Optionaler Update-Hinweis
    if (AG_IsUpdateAvailable()) {
       Print("ℹ️ Update verfügbar: " + AG_GetLatestVersion());
       AG_DrawUpdatePanel(); // Zeigt "Update available" Button
    }
  }
  return INIT_SUCCEEDED;
}

// 4. Button-Klick verarbeiten
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {
   AG_OnChartEvent(id, lparam, dparam, sparam);
}

💻 Hardware-ID (HWID)

Die Bibliothek generiert automatisch eine eindeutige Hardware-ID, um Lizenzen an bestimmte Geräte zu binden.

ℹ️ Info: Die ID wird aus einer Kombination von Server, Login und Computer-Pfad generiert und gehasht.


🛠️ Fehlerbehandlung

Reagieren Sie auf spezifische Fehlercodes für besseres Benutzer-Feedback:

if (!AG_Verify(LicenseKey, ApiKey)) {
  string errorCode = AG_GetLastErrorCode();
  string errorMsg = AG_GetLastError();

  switch(errorCode) {
    case "license_expired":
      Alert("⚠️ Ihre Lizenz ist abgelaufen. Bitte erneuern.");
      break;
    case "activation_limit_reached":
      Alert("⚠️ Lizenz bereits auf einem anderen Gerät aktiviert.");
      break;
    case "account_mismatch":
      Alert("⛔ Lizenz für dieses Handelskonto nicht gültig.");
      break;
    default:
      Alert("❌ Verifizierung fehlgeschlagen: " + errorMsg);
  }

  return INIT_FAILED;
}

📡 Offline-Modus (Optional)

Erlauben Sie Ihrem EA, für eine Übergangszeit zu funktionieren, wenn die Verifizierung fehlschlägt (z.B. Internet ausgefallen):

int OnInit() {
  if (!AG_Verify(LicenseKey, ApiKey)) {
    // Prüfen, ob letzte erfolgreiche Verifizierung innerhalb von 24 Stunden war
    datetime lastVerified = AG_GetLastVerifiedTime();
    if (TimeCurrent() - lastVerified < 86400) {  // 24 Stunden
      Print("⚠️ Verwende zwischengespeicherte Lizenz (Offline-Modus)");
      return INIT_SUCCEEDED;
    }

    Alert("❌ Lizenzverifizierung erforderlich. Bitte mit Internet verbinden.");
    return INIT_FAILED;
  }

  return INIT_SUCCEEDED;
}

🧪 Testen

Verwenden Sie während der Entwicklung den Test-Modus, um kein API-Kontingent zu verbrauchen:

#define AG_TEST_MODE  // Für Produktion entfernen

int OnInit() {
  #ifdef AG_TEST_MODE
    Print("🧪 TEST-MODUS - Lizenzverifizierung umgangen");
    return INIT_SUCCEEDED;
  #endif

  if (!AG_Verify(LicenseKey, ApiKey)) {
    return INIT_FAILED;
  }

  return INIT_SUCCEEDED;
}

🐶 AlgoGuard WatchDog (Optional)

Der AlgoGuard WatchDog ist ein Hilfs-EA für Monitoring und Broadcasting. Da in MT4/MT5 nur ein EA pro Chart laufen darf, muss der WatchDog auf einem separaten Chart laufen.

Installation

  1. Öffnen Sie einen neuen, leeren Chart (beliebiges Währungspaar, beliebiger Timeframe).
  2. Ziehen Sie AlgoGuard_WatchDog.ex4 (oder .ex5) auf diesen Chart.
  3. Lassen Sie diesen Chart im Hintergrund offen.

Funktion:

  • Er überwacht die Verbindung zum AlgoGuard Server.
  • Er sendet "Heartbeats" (Status-Updates).
  • Falls Sie Broadcasting nutzen: Er liest die Trades Ihres Haupt-EAs und sendet sie an den Server.

✅ Sicherheits-Best-Practices

  1. Niemals Ihren API-Schlüssel im Quellcode hardcoden, den Sie verteilen.
  2. Obfuskieren Sie Ihre kompilierten .ex4/.ex5-Dateien.
  3. Validieren Sie Benutzereingaben für das Lizenzschlüssel-Format.

🆘 Fehlerbehebung

"WebRequest not allowed"

  • Prüfen Sie, ob die URL in den MT4/MT5-Optionen gewhitelistet ist.
  • Stellen Sie sicher, dass Sie HTTPS (nicht HTTP) verwenden.

"Invalid API Key"

  • Überprüfen Sie Ihren API-Schlüssel im AlgoGuard-Dashboard.
  • Prüfen Sie auf zusätzliche Leerzeichen.

"Network Timeout"

  • Erhöhen Sie das Timeout mit AG_SetTimeout(30) (Standard: 10 Sekunden).
  • Prüfen Sie Firewall/Antivirus-Einstellungen.

📞 Support

Brauchen Sie Hilfe? Kontaktieren Sie den Support unter support@algoguard.dev

MQL-Integration | AlgoGuard