Angora Risk Guardian
- Utilitys
-
AYDIN DEMIREL
I'm an engineer and I'm working as a system engineer in a software company. I'm fourty years old. - Version: 1.21
- Aktivierungen: 5
Plattform: MetaTrader 5 / MQL5. Typ: Expert Advisor (Dienstprogramm). Kein externer Server; der einzige Netzwerkverkehr besteht aus optionalen Telegram-Benachrichtigungen. Geltungsbereich: kontoweit (alle Symbole, alle Magic Numbers). Pro Konto läuft eine Instanz.
1. Grundlegende Definitionen
| Begriff | Definition |
|---|---|
| Serverzeit | TimeTradeServer() . Alle Tagesberechnungen basieren auf der Serverzeit des Brokers, nicht auf der lokalen PC-Uhr. |
| Handelstag | Von der Startzeit des Handelstages (Eingabe, Standardwert 00:00) in Serverzeit bis zur gleichen Uhrzeit am nächsten Tag. Beispiel: Wenn eine Prop-Firma Mitternacht MEZ verwendet und der Server auf GMT+3 eingestellt ist, geben Sie 1 ein. |
| Tageswechsel | Der EA führt den ersten Tageswechsel durch, sobald sein 500-ms-Timer den Beginn des neuen Tages erkennt. Tägliche Überschreitungs-/Warnflags werden zurückgesetzt, der Gewinn/Verlust des Vortags wird in die CSV-Datei geschrieben und die Werte zum Tagesbeginn werden gespeichert. |
| Netto-Eigenkapital | ACCOUNT_EQUITY − ACCOUNT_CREDIT. Broker-Guthaben/Bonus werden bei den Risikoberechnungen nicht berücksichtigt. |
| Kapitalfluss | DEAL_TYPE_BALANCE-Transaktionen (Einzahlungen/Auszahlungen). Werden nicht als Gewinn/Verlust (P/L) berücksichtigt. Die Typen „CREDIT“ und „BONUS“ werden ignoriert. |
| Realisierter Gewinn/Verlust | Summe aus Gewinn + Swap + Provision + Gebühr aller heutigen Handelsgeschäfte (einschließlich Einstiegsprovisionen). |
| Unrealisierter Gewinn/Verlust | Summe aus POSITION_PROFIT und POSITION_SWAP der offenen Positionen. Noch nicht berechnete Schlussprovisionen sind nicht enthalten. |
2. Täglicher Verlust
Der Saldo zu Tagesbeginn wird stets exakt anhand der historischen Daten rekonstruiert: StartOfDayBalance = CurrentBalance − TodayRealizedPL − TodayCapitalFlow. Dadurch bleibt er korrekt, selbst wenn der EA mitten am Tag gestartet oder das Terminal neu gestartet wird.
Referenzmodus (Eingabe):
- Tagesanfangssaldo (Standard): der oben genannte Wert. Unrealisierte Verluste aus einer Position, die über Mitternacht hinaus gehalten wird, werden dem Verlust des neuen Tages zugerechnet.
- Eigenkapital zu Tagesbeginn: Netto-Eigenkapital, gemessen zum Zeitpunkt des Tageswechsels. Wenn der EA zu diesem Zeitpunkt nicht lief, kann es nicht gemessen werden; stattdessen wird der Tagesanfangssaldo verwendet, im Panel wird „(geschätzt)“ angezeigt und REF_ESTIMATED wird in die CSV-Datei geschrieben.
- Der höhere der beiden Werte: Die von vielen Prop-Firmen verwendete Regel.
Täglicher Gewinn/Verlust = Nettokapital − (Referenzwert + Kapitalfluss des Tages). Unrealisierte Verluste sind enthalten. Täglicher Verlust = max(0, −Täglicher Gewinn/Verlust). Limit = min(Referenzwert × Limit%, Festgelegtes Limit); ein auf Null gesetztes Limit ist deaktiviert.
Eine tägliche Überschreitung wird bis zum Ende des Tages festgehalten: Selbst wenn sich das Eigenkapital wieder erholt, gilt der Tag weiterhin als Überschreitung.
3. Maximaler Drawdown
- Ausgehend vom Höchststand des Kontostands (trailing): Der Höchststand steigt nur durch abgeschlossene Trades (Kontostand); die Regel vieler 1-Step-Herausforderungen.
- Ausgehend vom höchsten Eigenkapital (Trailing) (Standard): Höchstwert = höchstes beobachtetes Netto-Eigenkapital (einschließlich schwankender Werte, fortgeführt). DD = Höchstwert − Netto-Eigenkapital, die Grenze ist ein Prozentsatz des Höchstwerts.
- Ausgehend vom Anfangsguthaben (statisch): DD = Anfangsguthaben − Nettokapital. Das Anfangsguthaben ist eine Eingabegröße; bei 0 wird das Guthaben beim ersten Lauf gespeichert.
- Ein- und Auszahlungen (sofern sie während der Laufzeit des EAs erfolgen) verschieben den Höchststand und den Anfangssaldo um denselben Betrag.
- Ein DD-Verstoß wird festgehalten und niemals automatisch zurückgesetzt; setzen Sie ihn zurück, indem Sie mit „Reset DD breach and peak = true“ erneut verbinden.
4. Überwachung von Engagement und Risiko
- Positionsrisiko (bis zum SL) = FloatingPL − PL am SL (über „OrderCalcProfit“; das Terminal übernimmt die Umrechnung von Kontrakt- und Tick-Werten sowie die Währungsumrechnung des Kontos). Das Risiko beträgt 0, wenn der SL im Gewinn fixiert ist.
- Risiko einer ausstehenden Order = Verlust vom Orderpreis bis zum SL (Limitpreis bei Stop-Limit-Orders).
- Positionen/Orders ohne SL werden gezählt und ihr Risiko als „unbegrenztes Risiko“ gekennzeichnet.
- Wenn alle SLs erreicht werden: Das resultierende Netto-Eigenkapital und dessen Verhältnis zum Tageslimit werden angezeigt (ausstehende Orders sind nicht enthalten; werden separat angezeigt).
- Pro Magic: offene Positionen, Lots, schwankender Gewinn/Verlust, SL-Risiko, ausstehende Orders; in den letzten N Tagen (Eingabe, Standard 30): Anzahl der abgeschlossenen Trades, Gewinnquote und Nettogewinn/-verlust. Der „Magic“-Wert eines geschlossenen Handels wird aus dem Einstiegsgeschäft übernommen (d. h., eine EA-Position, die manuell oder durch einen SL geschlossen wurde, wird weiterhin dem EA zugeordnet). Magic 0 = „Manuell“. Die Gewinnquote wird pro abgeschlossenem Geschäft gezählt (Teilschließungen werden separat gezählt).
5. Benachrichtigungen
- Eine Warnung, wenn der Verlust den Warnwert in Prozent des Limits erreicht (Standard 80 %), und eine Überschreitungsbenachrichtigung bei 100 %. Einmal pro Tag (bei DD, bis die Überschreitung zurückgesetzt wird).
- Kanäle (jeder kann ein- und ausgeschaltet werden): Popup-Warnfenster, Audiodatei (PlaySound), MT5-Mobile-Push (SendNotification), Telegram.
- Farben im Bedienfeld: Grün = normal, Orange = Warnung, Rot = Überschreitung.
- Verbindungsverlust, Wiederherstellung der Verbindung und die Deaktivierung des Algo-Tradings werden ebenfalls gemeldet.
6. Schutz bei Limitüberschreitung
MQL5 kann einen manuellen Handel nicht im Voraus blockieren und die Algo-Trading-Schaltfläche ohne eine DLL nicht deaktivieren. „Blockieren“ bedeutet daher: Jede nach einer Überschreitung eröffnete Position wird sofort nach ihrer Eröffnung geschlossen, und neue ausstehende Orders werden gelöscht. Der Nutzer entscheidet sich bewusst dafür; dies kostet Spread/Provision.
Modi (Eingabe):
- Nur Warnmeldungen: Es werden keine Maßnahmen ergriffen.
- Neue Trades blockieren (sofort schließen) (Standard): Positionen, die nach dem Zeitpunkt der Überschreitung eröffnet werden, werden geschlossen (einschließlich vor der Überschreitung platzierter Pending-Orders, die danach ausgelöst werden). Optional werden alle Pending-Orders gelöscht (standardmäßig aktiviert).
- Alle schließen + blockieren: Alle Positionen werden geschlossen, alle ausstehenden Orders werden gelöscht und alle nachfolgenden Transaktionen werden blockiert.
Die Durchsetzung erfolgt zweistufig: sofort über `OnTradeTransaction` und als Backup über einen 500-ms-Timer (fehlgeschlagene Schließungen werden in Intervallen von 1 s erneut versucht). Bei Netting-Konten wird das nach einer Überschreitung zu einer bestehenden Position hinzugefügte Volumen durch eine entgegengesetzte Order rückgängig gemacht; wenn sich die Position umkehrt (INOUT), wird sie vollständig geschlossen.
7. Verbindungsabbrüche und Einschränkungen (wichtig)
Der Schutz funktioniert nur, solange das Terminal läuft, eine Verbindung zum Broker besteht und Algo-Trading erlaubt ist. Folgendes wird nicht berücksichtigt:
- Ohne Verbindung kann kein Order-Schluss gesendet werden. Im Panel wird ein roter Banner mit der Meldung „Keine Broker-Verbindung: Schutz funktioniert nicht“ angezeigt, „DISCONNECT“ wird in die CSV-Datei geschrieben, und der Schutz versucht es automatisch erneut, sobald die Verbindung wiederhergestellt ist.
- Solange das Terminal geschlossen ist, läuft nichts. Ein echter Schutz erfordert für jede Position einen broker-seitigen SL, weshalb das Tool Positionen ohne SL gesondert kennzeichnet.
- Positionen, die eröffnet wurden, während der EA nicht lief, werden im Modus „Neue Trades blockieren“ als vor dem Verstoß eröffnet gezählt und nicht geschlossen (nur der Modus „Alle schließen“ erfasst sie). Bei der Verrechnung wird das Volumen, das hinzugefügt wurde, während der EA nicht lief, nicht erfasst.
- Ein- und Auszahlungen, die vorgenommen wurden, während der EA nicht lief, werden nicht im Spitzen- bzw. Anfangsguthaben berücksichtigt (die täglichen Berechnungen sind davon nicht betroffen, da sie aus dem Verlauf gelesen werden).
- Das Spitzenkapital wird alle 500 ms erfasst; kürzere Spitzen können übersehen werden.
- Ein VPS wird empfohlen.
8. Persistenter Zustand
Globale Terminalvariablen mit dem Schlüsselpräfix ARG_<Konto>_: Tagesbeginn, Equity zu Tagesbeginn (und ob diese gemessen wurde), tägliche Überschreitungen/Warnungen und deren Zeitpunkt, Höchstwert, statische DD-Basis, DD-Überschreitung, Panel-Position und PIN-Status, Tagessperre. Eine zweite Chart-Instanz auf demselben Konto wird abgelehnt (Variable für temporäre Sperre).
9. CSV-Bericht
MQL5/Files/AngoraRiskGuardian/ARG_<Konto>_<JJJJ.MM>.csv, Trennzeichen ;, Dezimalpunkt . . Spalten: server_time; local_time; account; event; symbol; ticket; magic; volume; price; pl; balance; net_equity; daily_pl; daily_limit_used_%; dd; dd_limit_used_%; message. Ereignisse: START, STOP, DEAL, CAPITAL_FLOW, AUTO_SL, TILT_STREAK, TILT_BLOCK, TILT_WARN, LOT_LIMIT, NEWS (innerhalb von TILT_BLOCK), TARGET, PROFIT_LOCK, PANEL_ORDER, PANEL_REFUSED, DAY_SUMMARY, DAY_ROLLOVER, REF_ESTIMATED, WARN_DAILY, BREACH_DAILY, WARN_DD, BREACH_DD, DD_RESET, ENFORCE_CLOSE, ENFORCE_REDUCE, ENFORCE_DELETE, ENFORCE_FAIL, TRADE_DISABLED, DISCONNECT, RECONNECT.
10. Benutzeroberfläche
Chart-Panel: Kann an der Titelleiste verschoben werden, Position mit [pin] fixiert; die Position bleibt erhalten. Das Layout skaliert automatisch mit der Bildschirm-DPI (Schriftgrößen vergrößern sich mit der DPI, Objektkoordinaten hingegen nicht); bei Bedarf kann dies manuell über das Eingabefeld „Panel-Skalierung“ angepasst werden. Abschnitte: Statusleiste, Konto, Tagesverlust (Füllbalken), Maximaler Drawdown (Balken), Offenes Risiko, System, Gewinnsicherung, Nachrichten, Währungs-/Anlage-Exposure, Neue Order, Disziplin, Konten, „By Magic“-Tabelle (rechtsbündige Spalten). Inhalt: Status, Serverzeit/Tagesbeginn, Verbindung, Saldo/Eigenkapital/Floating, Referenz, tägliche Gewinn- und Verlustrechnung sowie Limitauslastung, DD, Positions-/Auftragsanzahl, SL-Risiken, Warnung bei fehlendem SL, Szenario „Alle SLs getroffen“, Schutzmodus und die „Magic Table“.
11. Lizenz und Daten
- v1 wird über den MQL5-Marktplatz mit einer Einmal-Lizenz verkauft; der Marktplatz wendet seinen eigenen Lizenzierungs- und Aktivierungsschutz an, sodass der Code keinen separaten Lizenzserver benötigt.
- Falls Verkäufe außerhalb des Markets erforderlich sind (v1.x), kann ein signierter Schlüssel hinzugefügt werden, der an die Kontonummer gebunden und offline verifiziert wird.
- Es verlassen keine Kontodaten das Terminal, mit Ausnahme von Telegram-Nachrichten, die der Nutzer ausdrücklich aktiviert. Als Ausgabedateien stehen die lokale CSV-Datei und die lokalen Multi-Account-Snapshot-Dateien zur Verfügung.
- Kandidaten für kostenpflichtige Tarife (nach Überprüfung der Nachfrage): serverbasierte Multi-Account-Ansicht über verschiedene Computer hinweg, Limits pro Magic/pro Symbol, wöchentliche/monatliche Limits, HTML-Berichtsübersichten.
12. Testmatrix
| Bereich | Szenarien |
|---|---|
| Konto-Modus | Absicherung, Verrechnung (Hinzufügen, Teilschließung, Stornierung) |
| Symbole | Devisen 5/3 Stellen, JPY, Metalle, Index-CFDs, Kryptowährungen; Kontowährung ≠ Gewinnwährung; Lot-Schritt 0,01/0,1/1; Mindestlot |
| Ausführung | Broker mit FOK-/IOC-/Return-Richtlinien |
| Zeit | Server GMT+2/+3, Sommerzeitumstellung, Handelsbeginn ≠ 0, Wochenende |
| Täglich | Start zur Mittagszeit, Neustart des Terminals, über Mitternacht gehaltene Positionen (3 Referenzmodi), Ein- und Auszahlungen während des Handelstages |
| Verletzung | Manueller Handel, Handel durch andere EAs, vor dem Kursdurchbruch platzierte ausstehende Order, die diesen anschließend auslöst, Schließversuch bei geschlossenem Markt (Wiederholungsversuch) |
| Verbindung | Netzwerkunterbrechung/Wiederherstellung, Ausfall während einer Unterbrechung, Algo-Trading deaktiviert |
| Mehrere Instanzen | Anbindung an ein zweites Chart auf demselben Konto (muss abgelehnt werden) |
| Strategietester | Verhalten bei Limit- und Schlusskurs im visuellen Modus |
13. Neuerungen in v1.1
Voreinstellungen
Wenn die Einstellung für den Regelsatz nicht „Benutzerdefiniert“ lautet, werden die täglichen/maximalen DD-Limits und Referenzmodi aus der Voreinstellung übernommen (geldbasierte Limits sind deaktiviert). Die Startzeit des Handelstages muss weiterhin vom Benutzer eingegeben werden, da sie von der Zeitzone des Servers abhängt. Für statisches DD muss der Anfangssaldo auf die Kontogröße gesetzt werden.
| Voreinstellung | Täglich | Referenz | Max. DD | DD-Basis |
|---|---|---|---|---|
| 2-Stufen-Herausforderung | 5 % | der höhere Wert aus Saldo und Eigenkapital | 10 % | statischer Anfangssaldo |
| 1-Schritt-Herausforderung | 4 % | Saldo zu Tagesbeginn | 6 % | Spitzensaldo (nachlaufend) |
| Sofortige Einzahlung | 3 % | der höhere Wert aus Saldo und Eigenkapital | 6 % | Spitzen-Eigenkapital (gleitend) |
| Strenge persönliche | 2 % | Saldo zu Tagesbeginn | 6 % | Höchstwert des Eigenkapitals (gleitend) |
Unternehmensspezifische benannte Voreinstellungen werden hinzugefügt, sobald die aktuellen Regeln des jeweiligen Unternehmens überprüft wurden.
Automatischer Stop-Loss
Eine Position ohne SL erhält nach Ablauf der Karenzzeit (standardmäßig 5 s, damit andere EAs ihr eigenes SL festlegen können) ein SL. Abstand: Risiko entspricht einem Prozentsatz des Nettovermögens (skaliert anhand eines Verlusts von 100 Punkten über OrderCalcProfit) oder einer festen Anzahl von Punkten. Wenn der Kurs das angestrebte SL bereits überschritten hat, wird das nächstgelegene vom Broker zugelassene Niveau verwendet und in der CSV-Datei vermerkt. Ein vorhandenes TP bleibt erhalten. Gilt nicht für ausstehende Orders (v1.1).
Disziplin-Wächter
Wird aus der heutigen Handelshistorie berechnet und beim Tageswechsel zurückgesetzt. Vom Tool selbst gesendete Trades (Magic-Code 20261010) werden nicht gezählt.
- Maximale Anzahl an Trades pro Tag: Anzahl der Einstiegs- (IN/INOUT) Trades am Tag.
- Verluste in Folge: Serie von abgeschlossenen Trades mit einem Nettoergebnis < 0; ein gewinnbringender oder ausgeglichener Abschluss setzt die Serie zurück. Wenn die Serie das Limit erreicht, werden für die Cooldown-Minuten keine neuen Trades getätigt (0 = Rest des Tages).
- Pause nach einem Verlust (Rache-Schutz): keine neuen Trades für N Minuten nach dem letzten Verlustabschluss.
- Maximales Lot pro Trade: Überschüssiges Volumen wird sofort geschlossen (Position reduziert). Wenn „Reverse new trades that break a rule = false“ gesetzt ist, wird lediglich eine Warnung ausgegeben. Die Disziplinregeln werden sofort über „OnTradeTransaction“ durchgesetzt; die zeitliche Absicherung dient nur bei Limitüberschreitungen.
14. Ergänzungen in v1.2
Nachrichtenfilter
Der in MT5 integrierte Wirtschaftskalender (CalendarValueHistory, Serverzeit) wird alle 5 Minuten für die nächsten 48 Stunden ausgelesen. Ein neuer Trade, der auf einem betroffenen Symbol innerhalb des Zeitfensters von einer Minute vor bzw. nach einer Nachricht mit hoher (optional mittlerer) Auswirkung eröffnet wurde, wird storniert. Betroffenes Symbol: Ist die Währungsliste leer, sind dies Symbole, deren Basis- oder Gewinnwährung mit der Währung der Nachricht übereinstimmt; ist die Liste gefüllt, gelten die Nachrichten für die aufgeführten Währungen für alle Symbole. Im Strategietester deaktiviert, da der Kalender dort nicht verfügbar ist. Kann der Kalender nicht geladen werden, gibt das Panel eine Warnung aus und versucht es jede Minute erneut.
Gewinnsicherung
- Tägliches Ziel (% des Referenzwerts oder Betrag): Bei Erreichen entweder alle Positionen schließen + den Tag sichern oder nur eine Warnung ausgeben.
- Gewinnabsicherung (Trailing): Sobald der Tagesgewinn die Start-Prozent-Marke überschreitet, wird der Tag gesichert, sobald der maximale Rückfall in Prozent des intraday-Gewinnhochs erreicht ist.
- An einem gesicherten Tag werden alle Positionen geschlossen, ausstehende Orders gelöscht und alle späteren neuen Trades rückgängig gemacht. Die Sicherung wird beim Tageswechsel aufgehoben und bleibt auch nach einem Neustart des Terminals bestehen.
Risikorechner und Ein-Klick-Orders
Felder „Risiko (%)“ und „SL (Punkte)“ im Bedienfeld für das Chart-Symbol. Lot = (Nettovermögen × Risiko %) ÷ (Verlust von 1 Lot bei SL, OrderCalcProfit), abgerundet auf die nächste Lot-Stufe; es gelten das maximale Lot und das Lot-Limit pro Trade. Wenn selbst das Mindest-Lot das Risiko überschreitet, wird keine Order gesendet. TP = SL × Verhältnis. Vor der Orderausführung erfolgt eine Vorabprüfung: Bei einer Limitüberschreitung, einem gesperrten Tag, einer Disziplinarregel oder einer Nachrichtenregel wird die Order niemals gesendet (echte Prävention bei Panel-Orders). Optionaler Bestätigungsdialog. Panel-Orders verwenden eine konfigurierbare Magic Number und werden auf die Disziplin-Limits angerechnet.
Währungs-/Anlage-Exposure
Der Nominalwert jeder Position in Kontowährung (Volumen × Kurs × Tick-Wert ÷ Tick-Größe) wird zur Basiswährung (+) und zur Gewinnwährung (−) addiert; Symbole mit derselben Basis- und Gewinnwährung (Indizes usw.) werden nach Symbolname angezeigt. Die fünf größten Engagements werden als Vielfaches des Nettovermögens angezeigt (5-fach orange, 10-fach rot).
Telegram und Tagesabschluss-Zusammenfassung
Wenn ein Bot-Token und eine Chat-ID eingegeben werden, werden alle Benachrichtigungen auch an Telegram gesendet. Es wird WebRequest verwendet; der Benutzer muss unter „Extras > Optionen > Expert Advisors“ https://api.telegram.org zulassen (muss in der Marktbeschreibung angegeben sein). Nachrichten werden in eine Warteschlange gestellt, und pro Zyklus wird höchstens eine gesendet (3-Sekunden-Timeout), sodass eine langsame Netzwerkverbindung den Schutz nie lange aufhält. Beim Tageswechsel wird eine Zusammenfassung (P/L, Anzahl der Trades, gewonnene/verlorene Schlusskurse, höchste Limitauslastung, Überschreitung/Sperre) an Telegram gesendet und in die CSV-Datei (DAY_SUMMARY) geschrieben. Das Token wird ausschließlich in den Terminaleingaben gespeichert.
Multi-Konto-Panel
Jede Instanz, bei der diese Option aktiviert ist, schreibt alle 5 Sekunden einen kleinen Snapshot in den gemeinsamen Ordner der Terminals (Common/Files/AngoraRiskGuardian/accounts/<account>.txt) und liest die Daten der anderen: Konto, Broker, Eigenkapital, täglicher Gewinn/Verlust, tägliche Limit- und DD-Auslastung, Status. Ein Konto, das seit 60 Sekunden nicht aktualisiert wurde, wird als „offline“ angezeigt. Die Daten verlassen den Computer zu keinem Zeitpunkt. Das Tool deckt alle MT5-Installationen auf demselben Computer ab; andere Computer/VPS sind nicht abgedeckt (eine serverbasierte Version sollte für die kostenpflichtige Stufe separat geprüft werden).
