Trade Stats Multicurrency
- Utilitys
-
Vsevolod Morozov
Narm - Version: 1.32
- Aktivierungen: 5
1. Überblick
Trade Stats ist ein nicht-handelsbezogener Analyse-Expert Advisor für MetaTrader 5. Er liest den Verlauf der abgeschlossenen Trades des Kontos aus, gruppiert jeden Trade nach seiner Magic Number und stellt eine kompakte Live-Statistiktabelle direkt im Chart dar. Sein Zweck ist es, eine Frage zu beantworten: Welcher Expert Advisor auf diesem Konto erzielt tatsächlich Gewinne und wie hoch sind die jeweiligen Betriebskosten?
Er platziert keine Orders, nimmt keine Änderungen vor und greift niemals in Positionen ein. Er liest lediglich den Verlauf aus und zeichnet Chartbeschriftungen ein.
2. Was er nicht tut
- Kein Handel, kein Geldmanagement, keine Signale – es kann nichts eröffnen oder schließen.
- Keine Schreibvorgänge auf das Konto, keine externen Netzwerkaufrufe, keine Datei-Uploads.
- Es werden ausschließlich Chart-Objekte erstellt, alle mit dem Präfix „ByMagic_“, und alle werden in „OnDeinit“ wieder entfernt.
3. So funktioniert es
- Auswahl des Verlaufs – bei jeder Aktualisierung ruft der EA die Funktion „HistorySelect(from, to)“ für den durch die Periodeneingaben definierten Zeitraum auf (aktueller Monat, aktuelle Woche, heute, die letzten N Tage oder benutzerdefinierte Datumsangaben). Es wird die Serverzeit verwendet.
- Filterung von Trades – es werden nur marktbezogene Trades gezählt, die das Guthaben beeinflussen (DEAL_TYPE_BUY / DEAL_TYPE_SELL). Guthabenoperationen werden ignoriert. Optionale Filter: genaue Magic-Nummer, Symbolname und „manuelle Trades ausblenden“ (magic = 0).
- Ausstiegsgeschäfte definieren einen „Trade“ – ein Zeilenzähler wird nur für Geschäfte erhöht, die eine Position reduzieren: DEAL_ENTRY_OUT, DEAL_ENTRY_OUT_BY, DEAL_ENTRY_INOUT. Einstiegsgeschäfte erhöhen die Trade-Zahl nicht.
- Kostenakkumulation – Provisionen, Maklergebühren, Swap und (optional) ein geschätzter Spread werden für alle Transaktionen, einschließlich Einstiegstransaktionen, akkumuliert, da Makler diese Kosten bei Einstiegstransaktionen verbuchen.
- Nettoergebnis pro Geschäft – Gewinn + Provision + Gebühr + Swap + geschätzter Spread, wobei jede Komponente nur dann berücksichtigt wird, wenn der entsprechende Schalter aktiviert ist. Derselbe Wert fließt in Gewinne/Verluste, Bruttogewinn/-verlust, P/L sowie bestes/schlechtestes Geschäft ein.
- Auflösung von Expertennamen (nach Priorität geordnet):
- explizite Benutzerzuordnung aus InpExpertNames (magic=Name;);
- der am häufigsten wiederholte „aussagekräftige“ Kommentar der Einstiegstransaktionen für diese „Magic“ (Abstimmungsmechanismus);
- der letzte aussagekräftige Kommentar;
- ansonsten wird die Zeile als — angezeigt. Technische Kommentare des Brokers werden herausgefiltert: Zeichenfolgen, die mit [, sl, tp, so:, from #, by # beginnen, sowie Kommentare, die „cancelled“, „canceled“, „partial“, „split“, „timeout“, „deleted“ enthalten, ebenso wie Kommentare, die ausschließlich aus Ziffern und Satzzeichen bestehen.
- Sortierung — nach „Magic“ in aufsteigender Reihenfolge (manuelle Trades stehen immer an letzter Stelle) oder nach Netto-P/L, Profit-Faktor, Anzahl der Trades oder Gewinnquote, aufsteigend/absteigend; bei Gleichstand entscheidet „Magic“ über die Reihenfolge, um eine stabile Sortierung zu gewährleisten.
- Darstellung – ein schlankes Beschriftungsraster wird neu gezeichnet: Die Spaltenbreiten werden mit „TextSetFont“ / „TextGetSize“ aus der Kopfzeile und den sichtbaren Zellen ermittelt, sodass sich die Tabelle automatisch an den Inhalt in beiden Sprachen anpasst.
4. Layout des Bedienfelds
Fünf Informationszeilen oberhalb der Tabelle:
| Zeile | Beispiel (Englisch) |
|---|---|
| Titel | TRANSFERSTATISTIKEN – NACH MAGISCHER ZAHL |
| Zeitraum | Zeitraum: 01.10.2026 → 28.10.2026 |
| Zähler | Magic-Gruppen: 4 Abgeschlossene Trades: 187 |
| Kosten | Kosten: Provision -42,10, Swap -3,55, Spread* -18,40 |
| Status | Aktualisiert: 13:20:57 * Der Spread wird anhand der Ticks geschätzt |
Anschließend die Tabellenüberschrift, die Zeilen und die Zeile „GESAMT“. Wenn die Anzahl der Gruppen „InpMaxRows“ überschreitet, wird der Rest als „... und N weitere Magic“ angegeben.
Spalten: Magic | Expert | Trades | W | L | Gewinnquote | [Comm.] | [Swap] | [Spread*] | P/L | PF
„Comm.“, „Swap“ und „Spread*“ werden nur angezeigt, wenn die entsprechenden Schalter aktiviert sind. Numerische Spalten sind rechtsbündig ausgerichtet, der Name des Experten ist linksbündig ausgerichtet und wird mit „..“ abgeschnitten, wenn er die Spaltenbreite überschreitet (feste Obergrenze 320 px). Die Farbcodierung erfolgt pro Zelle: Gewinn/positiv → clrLime, Verlust/negativ → clrOrangeRed, neutral → clrSilver; die Magic-Nummern manueller Trades werden in Silber dargestellt, die der Programmtrades in Cyan.
5. Kennzahlen und Formeln
- Trades – Anzahl der Geschäfte zum Schließen von Positionen im Berichtszeitraum.
- W/L – abgeschlossene Trades mit einem Nettoergebnis > 0 und < 0; Trades mit einem Nullergebnis werden separat gezählt (nicht als Spalte angezeigt, im CSV-Export enthalten).
- Gewinnquote – Gewinne / (Gewinne + Verluste + Nullergebnisse) × 100.
- Bruttogewinn / Bruttoverlust – Summe der positiven und absolut negativen Nettoergebnisse.
- P/L – Nettoergebnis aller Geschäfte der Gruppe, einschließlich der aktivierten Kostenkomponenten.
- PF (Profit Factor) – Bruttogewinn / Bruttoverlust; wenn keine Verluste, aber ein Gewinn vorliegt, wird der Wert auf 99,99 begrenzt; andernfalls `0.
- Bester / schlechtester Handel, durchschnittlicher Handel, Zeitpunkt des letzten Handels — berechnet und als CSV-Datei exportiert (wird im Panel nicht angezeigt).
- Zeile „GESAMT“ – Summen über alle Gruppen hinweg sowie eine Gewinnquote und ein Gewinnfaktor auf Portfolioebene.
6. Eingaben
| Eingabe | Standard | Bedeutung |
|---|---|---|
| InpPeriodMode | PERIOD_CURRENT_MONTH | Aktueller Monat / aktuelle Woche / heute / letzte N Tage / benutzerdefinierte Daten |
| InpLastDays | 30 | Anzahl der Tage für den Modus „letzte N Tage“ |
| InpCustomFrom, InpCustomTo | 01.01.2025, 31.12.2025 | Benutzerdefinierter Datumsbereich (das Enddatum wird bis 23:59:59 verlängert) |
| InpMagicFilter | 0 | Eine einzelne magische Zahl analysieren (0 = alle) |
| InpShowManual | true | Manuelle Trades einbeziehen (magic = 0) |
| InpSymbolFilter | "" | Nur ein Symbol analysieren („“ = alle) |
| InpShowCommission | true | Provisionsspalte anzeigen und Provisionen + Gebühren in die Gewinn- und Verlustrechnung einbeziehen |
| InpShowSwap | true | Die Swap-Spalte anzeigen und Swaps in die Gewinn- und Verlustrechnung einbeziehen |
| InpShowSpread | false | Spread-Spalte anzeigen und geschätzten Spread von der Gewinn- und Verlustrechnung abziehen |
| InpSpreadMaxCalc | 300 | Maximale Anzahl neuer Spread-Schätzungen pro Aktualisierung (0..5000) |
| InpLanguage | LANG_ENGLISH | Sprache des Panels und des Journals: Englisch (Standard) oder Russisch |
| InpShowComment | true | Expertennamen aus Deal-Kommentaren ableiten |
| InpCommentLen | 20 | Maximale Länge eines abgeleiteten Expertennamens |
| InpExpertNames | "" | Explizite Namenszuordnung, z. B. 20261012=GoldScalperPro;1=ScalperProM30 |
| InpSortMode | STATS_SORT_MAGIC | Magic / Netto-P/L / Profitfaktor / Trades / Gewinnquote |
| InpSortDesc | true | Absteigende Reihenfolge (wird bei „nach Magic“ ignoriert, da hier immer aufsteigend sortiert wird) |
| InpRefreshSec | 5 | Mindestintervall zwischen den Neuberechnungen, Sekunden (1..3600) |
| InpPanelX, InpPanelY | 10 , 20 | Versatz des Fensters in Pixeln |
| InpTextColor, InpBgColor, InpHeaderColor | clrWhite, C'15,15,25', clrGold | Farben |
| InpFontSize, InpFontName | 9, Consolas | Schriftart (Größe 6..30); eine monospaced Schriftart sorgt für eine gleichmäßige Spaltenausrichtung |
| InpMaxRows | 30 | Maximale Anzahl sichtbarer Zeilen (0 = alle) |
| InpExportCSV | false | Bei jeder Aktualisierung einen CSV-Snapshot erstellen |
| InpCSVFileName | stats_by_magic.csv | CSV-Dateiname, erstellt im Sandbox-Verzeichnis „MQL5\Files“ des Terminals |
Ungültige Eingaben (Periodengrenzen, Schriftgröße, Kommentarlänge, Aktualisierungsintervall, Spread-Budget) führen zum Abbruch der Initialisierung mit dem Fehlercode INIT_PARAMETERS_INCORRECT und einer Journalmeldung.
7. Spread-Schätzung
MT5 speichert den Spread nicht in einem Trade. Wenn daher „InpShowSpread“ aktiviert ist, schätzt der EA diesen: Er kopiert mit „CopyTicksRange“ Ticks im Bereich von ±5 Sekunden um den Handelszeitpunkt, wählt den Tick aus, der dem Ausführungszeitpunkt am nächsten liegt, und berechnet
spread_cost = 0,5 × (Ask − Bid) × Volumen × Kontraktgröße
Der Wert wird als negativer Beitrag zum Ergebnis gespeichert und pro Handelsticket in einem nach Tickets sortierten Array mit binärer Suche zwischengespeichert, sodass ein Handel nur einmal geschätzt wird. Die Schätzungen werden pro Aktualisierung durch „InpSpreadMaxCalc“ begrenzt; wenn für diesen Zeitpunkt keine Ticks vorhanden sind, wird nichts zwischengespeichert und das Geschäft bei einer späteren Aktualisierung erneut versucht. Das Panel und das Journal kennzeichnen diesen Wert ausdrücklich als Schätzung (spread*).
8. CSV-Export
FILE_WRITE | FILE_CSV | FILE_ANSI , ; Trennzeichen, eine Zeile pro Magic-Gruppe, immer auf Englisch:
Magic;Expert;Trades;Wins;Losses;Zeros;Winrate;Commission;Swap;Spread;NetProfit; GrossProfit;GrossLoss;ProfitFactor;BestTrade;WorstTrade;AvgTrade;LastDeal
Die Datei wird in den Datenordner des Terminals (MQL5\Files\...) geschrieben, sodass sie von anderen Tools oder Diensten gelesen werden kann.
9. Lokalisierung
Alle Laufzeittexte (Meldungen im Bedienfeld und im Protokoll) werden über den Helper T(ENUM_TXT) aus einer zur Kompilierungszeit erstellten Tabelle mit englischen oder anderen Zeichenfolgen aufgelöst. Englisch ist die Standardeinstellung; durch Ändern von InpLanguage wird das Bedienfeld bei der nächsten Aktualisierung angepasst, ohne dass der EA neu gestartet werden muss. Die Beschriftungen im Eigenschaftsdialog des EAs sind statische englische Zeichenfolgen (MQL5 kann Eingabefeldbeschriftungen zur Laufzeit nicht lokalisieren).
10. Hinweise zur Leistung
- Die Neuberechnung wird durch „InpRefreshSec“ gedrosselt und sowohl von einem 1-Sekunden-Timer als auch von „OnTick“ gesteuert, sodass das Panel auch ohne Ticks aktiv bleibt; die erste Berechnung läuft in „OnInit“.
- Pro Aktualisierung erfolgt ein „HistorySelect“ sowie ein linearer Durchlauf über die Transaktionen des Zeitraums; die Gruppierung erfolgt durch einen kurzen linearen Scan, die Sortierung durch Einfügungssortierung (die Anzahl der Gruppen ist gering).
- Diagrammbeschriftungen werden einmalig erstellt und danach nur noch aktualisiert; veraltete Zeilen-/Spaltenobjekte werden durch „HideUnusedRows“ gelöscht, und der Hintergrund wird neu erstellt, falls er verschwindet (z. B. nach einem Vorlagenwechsel).
11. Einschränkungen und Annahmen
- Es werden nur abgeschlossene Geschäfte innerhalb des ausgewählten Zeitraums analysiert; offene Positionen und schwankende Gewinne/Verluste werden nicht berücksichtigt.
- Die Anzahl der Trades richtet sich nach der Geschäftsstruktur des Brokers: Teilschließungen werden als mehrere Ausstiege erfasst, und DEAL_ENTRY_INOUT (Netting-Stornierungen) wird als Ausstieg behandelt.
- Die Ergebnisse werden in der Einzahlungswährung des Kontos angezeigt; es erfolgt keine Währungsumrechnung.
- Provisionen werden genau so ausgewiesen, wie sie vom Broker erfasst werden; wenn ein Broker Provisionen nur bei Einstiegsgeschäften verbucht, wird dieses Verhalten beibehalten.
- Der Spread ist naturgemäß eine Schätzung und entspricht nicht dem tatsächlichen Aufschlag des Brokers.
- Expertennamen sind heuristische Bezeichnungen, die auf Kommentaren basieren; verwenden Sie „InpExpertNames“ für eine exakte Beschriftung.
- Der EA ist ein Indikator-/Analyse-Tool: Er ist dafür vorgesehen, an ein beliebiges Chart angehängt und dort laufen gelassen zu werden.
12. Kompatibilität und Validierung
- MetaTrader 5, MQL5; kompiliert mit 0 Fehlern und 0 Warnungen in der Compiler-Version 6230.
- Die veröffentlichte Binärdatei wurde für „X64 Regular“ kompiliert und wird daher vom MQL5-Markt akzeptiert (AVX2-/AVX512-Builds werden dort abgelehnt).
- Überprüfen Sie auf einem Demokonto oder im visuellen Modus des Strategietesters, ob das Panel in das Chart passt, ob die Spaltenbreiten in beiden Sprachen korrekt sind und ob die exportierten CSV-Werte mit dem Kontoverlauf übereinstimmen.
13. Risikohinweis
Trade Stats gibt lediglich historische Statistiken wieder. Die vergangene Performance eines Expert Advisors ist keine Garantie für zukünftige Ergebnisse, und Spread-Schätzungen sowie aus Kommentaren abgeleitete Bezeichnungen können von den tatsächlichen Gegebenheiten beim Broker abweichen. Überprüfen Sie Entscheidungen, die auf diesen Zahlen basieren, stets anhand Ihrer eigenen Aufzeichnungen.
